/// <summary>
        /// Static constructor to build the profile object
        /// </summary>
        static Profile()
        {
            ushort mesgIndex = 0;
             ushort fieldIndex, subfieldIndex;
             // FileId
             Mesg fileIdMesg = new Mesg("FileId", MesgNum.FileId);
             fieldIndex = 0;
             fileIdMesg.SetField(new Field("Type", 0, 0, 1f, 0f, ""));
             fieldIndex++;
             fileIdMesg.SetField(new Field("Manufacturer", 1, 132, 1f, 0f, ""));
             fieldIndex++;
             fileIdMesg.SetField(new Field("Product", 2, 132, 1f, 0f, ""));
             subfieldIndex = 0;
             fileIdMesg.fields[fieldIndex].subfields.Add(new Subfield("GarminProduct", 132, 1f, 0f, ""));
             fileIdMesg.fields[fieldIndex].subfields[subfieldIndex].AddMap(1, 1);
             fileIdMesg.fields[fieldIndex].subfields[subfieldIndex].AddMap(1, 15);
             fileIdMesg.fields[fieldIndex].subfields[subfieldIndex].AddMap(1, 13);
             subfieldIndex++;
             fieldIndex++;
             fileIdMesg.SetField(new Field("SerialNumber", 3, 140, 1f, 0f, ""));
             fieldIndex++;
             fileIdMesg.SetField(new Field("TimeCreated", 4, 134, 1f, 0f, ""));
             fieldIndex++;
             fileIdMesg.SetField(new Field("Number", 5, 132, 1f, 0f, ""));
             fieldIndex++;
             fileIdMesg.SetField(new Field("ProductName", 8, 7, 1f, 0f, ""));
             fieldIndex++;
             mesgs.Add(fileIdMesg);
             FileIdIndex = mesgIndex;
             mesgIndex++;

             // FileCreator
             Mesg fileCreatorMesg = new Mesg("FileCreator", MesgNum.FileCreator);
             fieldIndex = 0;
             fileCreatorMesg.SetField(new Field("SoftwareVersion", 0, 132, 1f, 0f, ""));
             fieldIndex++;
             fileCreatorMesg.SetField(new Field("HardwareVersion", 1, 2, 1f, 0f, ""));
             fieldIndex++;
             mesgs.Add(fileCreatorMesg);
             FileCreatorIndex = mesgIndex;
             mesgIndex++;

             // TimestampCorrelation
             Mesg timestampCorrelationMesg = new Mesg("TimestampCorrelation", MesgNum.TimestampCorrelation);
             fieldIndex = 0;
             timestampCorrelationMesg.SetField(new Field("Timestamp", 253, 134, 1f, 0f, "s"));
             fieldIndex++;
             timestampCorrelationMesg.SetField(new Field("FractionalTimestamp", 0, 132, 32768f, 0f, "s"));
             fieldIndex++;
             timestampCorrelationMesg.SetField(new Field("SystemTimestamp", 1, 134, 1f, 0f, "s"));
             fieldIndex++;
             timestampCorrelationMesg.SetField(new Field("FractionalSystemTimestamp", 2, 132, 32768f, 0f, "s"));
             fieldIndex++;
             timestampCorrelationMesg.SetField(new Field("LocalTimestamp", 3, 134, 1f, 0f, "s"));
             fieldIndex++;
             timestampCorrelationMesg.SetField(new Field("TimestampMs", 4, 132, 1f, 0f, "ms"));
             fieldIndex++;
             timestampCorrelationMesg.SetField(new Field("SystemTimestampMs", 5, 132, 1f, 0f, "ms"));
             fieldIndex++;
             mesgs.Add(timestampCorrelationMesg);
             TimestampCorrelationIndex = mesgIndex;
             mesgIndex++;

             // Software
             Mesg softwareMesg = new Mesg("Software", MesgNum.Software);
             fieldIndex = 0;
             softwareMesg.SetField(new Field("MessageIndex", 254, 132, 1f, 0f, ""));
             fieldIndex++;
             softwareMesg.SetField(new Field("Version", 3, 132, 100f, 0f, ""));
             fieldIndex++;
             softwareMesg.SetField(new Field("PartNumber", 5, 7, 1f, 0f, ""));
             fieldIndex++;
             mesgs.Add(softwareMesg);
             SoftwareIndex = mesgIndex;
             mesgIndex++;

             // SlaveDevice
             Mesg slaveDeviceMesg = new Mesg("SlaveDevice", MesgNum.SlaveDevice);
             fieldIndex = 0;
             slaveDeviceMesg.SetField(new Field("Manufacturer", 0, 132, 1f, 0f, ""));
             fieldIndex++;
             slaveDeviceMesg.SetField(new Field("Product", 1, 132, 1f, 0f, ""));
             subfieldIndex = 0;
             slaveDeviceMesg.fields[fieldIndex].subfields.Add(new Subfield("GarminProduct", 132, 1f, 0f, ""));
             slaveDeviceMesg.fields[fieldIndex].subfields[subfieldIndex].AddMap(0, 1);
             slaveDeviceMesg.fields[fieldIndex].subfields[subfieldIndex].AddMap(0, 15);
             slaveDeviceMesg.fields[fieldIndex].subfields[subfieldIndex].AddMap(0, 13);
             subfieldIndex++;
             fieldIndex++;
             mesgs.Add(slaveDeviceMesg);
             SlaveDeviceIndex = mesgIndex;
             mesgIndex++;

             // Capabilities
             Mesg capabilitiesMesg = new Mesg("Capabilities", MesgNum.Capabilities);
             fieldIndex = 0;
             capabilitiesMesg.SetField(new Field("Languages", 0, 10, 1f, 0f, ""));
             fieldIndex++;
             capabilitiesMesg.SetField(new Field("Sports", 1, 10, 1f, 0f, ""));
             fieldIndex++;
             capabilitiesMesg.SetField(new Field("WorkoutsSupported", 21, 140, 1f, 0f, ""));
             fieldIndex++;
             capabilitiesMesg.SetField(new Field("ConnectivitySupported", 23, 140, 1f, 0f, ""));
             fieldIndex++;
             mesgs.Add(capabilitiesMesg);
             CapabilitiesIndex = mesgIndex;
             mesgIndex++;

             // FileCapabilities
             Mesg fileCapabilitiesMesg = new Mesg("FileCapabilities", MesgNum.FileCapabilities);
             fieldIndex = 0;
             fileCapabilitiesMesg.SetField(new Field("MessageIndex", 254, 132, 1f, 0f, ""));
             fieldIndex++;
             fileCapabilitiesMesg.SetField(new Field("Type", 0, 0, 1f, 0f, ""));
             fieldIndex++;
             fileCapabilitiesMesg.SetField(new Field("Flags", 1, 10, 1f, 0f, ""));
             fieldIndex++;
             fileCapabilitiesMesg.SetField(new Field("Directory", 2, 7, 1f, 0f, ""));
             fieldIndex++;
             fileCapabilitiesMesg.SetField(new Field("MaxCount", 3, 132, 1f, 0f, ""));
             fieldIndex++;
             fileCapabilitiesMesg.SetField(new Field("MaxSize", 4, 134, 1f, 0f, "bytes"));
             fieldIndex++;
             mesgs.Add(fileCapabilitiesMesg);
             FileCapabilitiesIndex = mesgIndex;
             mesgIndex++;

             // MesgCapabilities
             Mesg mesgCapabilitiesMesg = new Mesg("MesgCapabilities", MesgNum.MesgCapabilities);
             fieldIndex = 0;
             mesgCapabilitiesMesg.SetField(new Field("MessageIndex", 254, 132, 1f, 0f, ""));
             fieldIndex++;
             mesgCapabilitiesMesg.SetField(new Field("File", 0, 0, 1f, 0f, ""));
             fieldIndex++;
             mesgCapabilitiesMesg.SetField(new Field("MesgNum", 1, 132, 1f, 0f, ""));
             fieldIndex++;
             mesgCapabilitiesMesg.SetField(new Field("CountType", 2, 0, 1f, 0f, ""));
             fieldIndex++;
             mesgCapabilitiesMesg.SetField(new Field("Count", 3, 132, 1f, 0f, ""));
             subfieldIndex = 0;
             mesgCapabilitiesMesg.fields[fieldIndex].subfields.Add(new Subfield("NumPerFile", 132, 1f, 0f, ""));
             mesgCapabilitiesMesg.fields[fieldIndex].subfields[subfieldIndex].AddMap(2, 0);
             subfieldIndex++;
             mesgCapabilitiesMesg.fields[fieldIndex].subfields.Add(new Subfield("MaxPerFile", 132, 1f, 0f, ""));
             mesgCapabilitiesMesg.fields[fieldIndex].subfields[subfieldIndex].AddMap(2, 1);
             subfieldIndex++;
             mesgCapabilitiesMesg.fields[fieldIndex].subfields.Add(new Subfield("MaxPerFileType", 132, 1f, 0f, ""));
             mesgCapabilitiesMesg.fields[fieldIndex].subfields[subfieldIndex].AddMap(2, 2);
             subfieldIndex++;
             fieldIndex++;
             mesgs.Add(mesgCapabilitiesMesg);
             MesgCapabilitiesIndex = mesgIndex;
             mesgIndex++;

             // FieldCapabilities
             Mesg fieldCapabilitiesMesg = new Mesg("FieldCapabilities", MesgNum.FieldCapabilities);
             fieldIndex = 0;
             fieldCapabilitiesMesg.SetField(new Field("MessageIndex", 254, 132, 1f, 0f, ""));
             fieldIndex++;
             fieldCapabilitiesMesg.SetField(new Field("File", 0, 0, 1f, 0f, ""));
             fieldIndex++;
             fieldCapabilitiesMesg.SetField(new Field("MesgNum", 1, 132, 1f, 0f, ""));
             fieldIndex++;
             fieldCapabilitiesMesg.SetField(new Field("FieldNum", 2, 2, 1f, 0f, ""));
             fieldIndex++;
             fieldCapabilitiesMesg.SetField(new Field("Count", 3, 132, 1f, 0f, ""));
             fieldIndex++;
             mesgs.Add(fieldCapabilitiesMesg);
             FieldCapabilitiesIndex = mesgIndex;
             mesgIndex++;

             // DeviceSettings
             Mesg deviceSettingsMesg = new Mesg("DeviceSettings", MesgNum.DeviceSettings);
             fieldIndex = 0;
             deviceSettingsMesg.SetField(new Field("ActiveTimeZone", 0, 2, 1f, 0f, ""));
             fieldIndex++;
             deviceSettingsMesg.SetField(new Field("UtcOffset", 1, 134, 1f, 0f, ""));
             fieldIndex++;
             deviceSettingsMesg.SetField(new Field("TimeZoneOffset", 5, 1, 4f, 0f, "hr"));
             fieldIndex++;
             mesgs.Add(deviceSettingsMesg);
             DeviceSettingsIndex = mesgIndex;
             mesgIndex++;

             // UserProfile
             Mesg userProfileMesg = new Mesg("UserProfile", MesgNum.UserProfile);
             fieldIndex = 0;
             userProfileMesg.SetField(new Field("MessageIndex", 254, 132, 1f, 0f, ""));
             fieldIndex++;
             userProfileMesg.SetField(new Field("FriendlyName", 0, 7, 1f, 0f, ""));
             fieldIndex++;
             userProfileMesg.SetField(new Field("Gender", 1, 0, 1f, 0f, ""));
             fieldIndex++;
             userProfileMesg.SetField(new Field("Age", 2, 2, 1f, 0f, "years"));
             fieldIndex++;
             userProfileMesg.SetField(new Field("Height", 3, 2, 100f, 0f, "m"));
             fieldIndex++;
             userProfileMesg.SetField(new Field("Weight", 4, 132, 10f, 0f, "kg"));
             fieldIndex++;
             userProfileMesg.SetField(new Field("Language", 5, 0, 1f, 0f, ""));
             fieldIndex++;
             userProfileMesg.SetField(new Field("ElevSetting", 6, 0, 1f, 0f, ""));
             fieldIndex++;
             userProfileMesg.SetField(new Field("WeightSetting", 7, 0, 1f, 0f, ""));
             fieldIndex++;
             userProfileMesg.SetField(new Field("RestingHeartRate", 8, 2, 1f, 0f, "bpm"));
             fieldIndex++;
             userProfileMesg.SetField(new Field("DefaultMaxRunningHeartRate", 9, 2, 1f, 0f, "bpm"));
             fieldIndex++;
             userProfileMesg.SetField(new Field("DefaultMaxBikingHeartRate", 10, 2, 1f, 0f, "bpm"));
             fieldIndex++;
             userProfileMesg.SetField(new Field("DefaultMaxHeartRate", 11, 2, 1f, 0f, "bpm"));
             fieldIndex++;
             userProfileMesg.SetField(new Field("HrSetting", 12, 0, 1f, 0f, ""));
             fieldIndex++;
             userProfileMesg.SetField(new Field("SpeedSetting", 13, 0, 1f, 0f, ""));
             fieldIndex++;
             userProfileMesg.SetField(new Field("DistSetting", 14, 0, 1f, 0f, ""));
             fieldIndex++;
             userProfileMesg.SetField(new Field("PowerSetting", 16, 0, 1f, 0f, ""));
             fieldIndex++;
             userProfileMesg.SetField(new Field("ActivityClass", 17, 0, 1f, 0f, ""));
             fieldIndex++;
             userProfileMesg.SetField(new Field("PositionSetting", 18, 0, 1f, 0f, ""));
             fieldIndex++;
             userProfileMesg.SetField(new Field("TemperatureSetting", 21, 0, 1f, 0f, ""));
             fieldIndex++;
             userProfileMesg.SetField(new Field("LocalId", 22, 132, 1f, 0f, ""));
             fieldIndex++;
             userProfileMesg.SetField(new Field("GlobalId", 23, 13, 1f, 0f, ""));
             fieldIndex++;
             userProfileMesg.SetField(new Field("HeightSetting", 30, 0, 1f, 0f, ""));
             fieldIndex++;
             mesgs.Add(userProfileMesg);
             UserProfileIndex = mesgIndex;
             mesgIndex++;

             // HrmProfile
             Mesg hrmProfileMesg = new Mesg("HrmProfile", MesgNum.HrmProfile);
             fieldIndex = 0;
             hrmProfileMesg.SetField(new Field("MessageIndex", 254, 132, 1f, 0f, ""));
             fieldIndex++;
             hrmProfileMesg.SetField(new Field("Enabled", 0, 0, 1f, 0f, ""));
             fieldIndex++;
             hrmProfileMesg.SetField(new Field("HrmAntId", 1, 139, 1f, 0f, ""));
             fieldIndex++;
             hrmProfileMesg.SetField(new Field("LogHrv", 2, 0, 1f, 0f, ""));
             fieldIndex++;
             hrmProfileMesg.SetField(new Field("HrmAntIdTransType", 3, 10, 1f, 0f, ""));
             fieldIndex++;
             mesgs.Add(hrmProfileMesg);
             HrmProfileIndex = mesgIndex;
             mesgIndex++;

             // SdmProfile
             Mesg sdmProfileMesg = new Mesg("SdmProfile", MesgNum.SdmProfile);
             fieldIndex = 0;
             sdmProfileMesg.SetField(new Field("MessageIndex", 254, 132, 1f, 0f, ""));
             fieldIndex++;
             sdmProfileMesg.SetField(new Field("Enabled", 0, 0, 1f, 0f, ""));
             fieldIndex++;
             sdmProfileMesg.SetField(new Field("SdmAntId", 1, 139, 1f, 0f, ""));
             fieldIndex++;
             sdmProfileMesg.SetField(new Field("SdmCalFactor", 2, 132, 10f, 0f, "%"));
             fieldIndex++;
             sdmProfileMesg.SetField(new Field("Odometer", 3, 134, 100f, 0f, "m"));
             fieldIndex++;
             sdmProfileMesg.SetField(new Field("SpeedSource", 4, 0, 1f, 0f, ""));
             fieldIndex++;
             sdmProfileMesg.SetField(new Field("SdmAntIdTransType", 5, 10, 1f, 0f, ""));
             fieldIndex++;
             sdmProfileMesg.SetField(new Field("OdometerRollover", 7, 2, 1f, 0f, ""));
             fieldIndex++;
             mesgs.Add(sdmProfileMesg);
             SdmProfileIndex = mesgIndex;
             mesgIndex++;

             // BikeProfile
             Mesg bikeProfileMesg = new Mesg("BikeProfile", MesgNum.BikeProfile);
             fieldIndex = 0;
             bikeProfileMesg.SetField(new Field("MessageIndex", 254, 132, 1f, 0f, ""));
             fieldIndex++;
             bikeProfileMesg.SetField(new Field("Name", 0, 7, 1f, 0f, ""));
             fieldIndex++;
             bikeProfileMesg.SetField(new Field("Sport", 1, 0, 1f, 0f, ""));
             fieldIndex++;
             bikeProfileMesg.SetField(new Field("SubSport", 2, 0, 1f, 0f, ""));
             fieldIndex++;
             bikeProfileMesg.SetField(new Field("Odometer", 3, 134, 100f, 0f, "m"));
             fieldIndex++;
             bikeProfileMesg.SetField(new Field("BikeSpdAntId", 4, 139, 1f, 0f, ""));
             fieldIndex++;
             bikeProfileMesg.SetField(new Field("BikeCadAntId", 5, 139, 1f, 0f, ""));
             fieldIndex++;
             bikeProfileMesg.SetField(new Field("BikeSpdcadAntId", 6, 139, 1f, 0f, ""));
             fieldIndex++;
             bikeProfileMesg.SetField(new Field("BikePowerAntId", 7, 139, 1f, 0f, ""));
             fieldIndex++;
             bikeProfileMesg.SetField(new Field("CustomWheelsize", 8, 132, 1000f, 0f, "m"));
             fieldIndex++;
             bikeProfileMesg.SetField(new Field("AutoWheelsize", 9, 132, 1000f, 0f, "m"));
             fieldIndex++;
             bikeProfileMesg.SetField(new Field("BikeWeight", 10, 132, 10f, 0f, "kg"));
             fieldIndex++;
             bikeProfileMesg.SetField(new Field("PowerCalFactor", 11, 132, 10f, 0f, "%"));
             fieldIndex++;
             bikeProfileMesg.SetField(new Field("AutoWheelCal", 12, 0, 1f, 0f, ""));
             fieldIndex++;
             bikeProfileMesg.SetField(new Field("AutoPowerZero", 13, 0, 1f, 0f, ""));
             fieldIndex++;
             bikeProfileMesg.SetField(new Field("Id", 14, 2, 1f, 0f, ""));
             fieldIndex++;
             bikeProfileMesg.SetField(new Field("SpdEnabled", 15, 0, 1f, 0f, ""));
             fieldIndex++;
             bikeProfileMesg.SetField(new Field("CadEnabled", 16, 0, 1f, 0f, ""));
             fieldIndex++;
             bikeProfileMesg.SetField(new Field("SpdcadEnabled", 17, 0, 1f, 0f, ""));
             fieldIndex++;
             bikeProfileMesg.SetField(new Field("PowerEnabled", 18, 0, 1f, 0f, ""));
             fieldIndex++;
             bikeProfileMesg.SetField(new Field("CrankLength", 19, 2, 2f, -110f, "mm"));
             fieldIndex++;
             bikeProfileMesg.SetField(new Field("Enabled", 20, 0, 1f, 0f, ""));
             fieldIndex++;
             bikeProfileMesg.SetField(new Field("BikeSpdAntIdTransType", 21, 10, 1f, 0f, ""));
             fieldIndex++;
             bikeProfileMesg.SetField(new Field("BikeCadAntIdTransType", 22, 10, 1f, 0f, ""));
             fieldIndex++;
             bikeProfileMesg.SetField(new Field("BikeSpdcadAntIdTransType", 23, 10, 1f, 0f, ""));
             fieldIndex++;
             bikeProfileMesg.SetField(new Field("BikePowerAntIdTransType", 24, 10, 1f, 0f, ""));
             fieldIndex++;
             bikeProfileMesg.SetField(new Field("OdometerRollover", 37, 2, 1f, 0f, ""));
             fieldIndex++;
             bikeProfileMesg.SetField(new Field("FrontGearNum", 38, 10, 1f, 0f, ""));
             fieldIndex++;
             bikeProfileMesg.SetField(new Field("FrontGear", 39, 10, 1f, 0f, ""));
             fieldIndex++;
             bikeProfileMesg.SetField(new Field("RearGearNum", 40, 10, 1f, 0f, ""));
             fieldIndex++;
             bikeProfileMesg.SetField(new Field("RearGear", 41, 10, 1f, 0f, ""));
             fieldIndex++;
             bikeProfileMesg.SetField(new Field("ShimanoDi2Enabled", 44, 0, 1f, 0f, ""));
             fieldIndex++;
             mesgs.Add(bikeProfileMesg);
             BikeProfileIndex = mesgIndex;
             mesgIndex++;

             // ZonesTarget
             Mesg zonesTargetMesg = new Mesg("ZonesTarget", MesgNum.ZonesTarget);
             fieldIndex = 0;
             zonesTargetMesg.SetField(new Field("MaxHeartRate", 1, 2, 1f, 0f, ""));
             fieldIndex++;
             zonesTargetMesg.SetField(new Field("ThresholdHeartRate", 2, 2, 1f, 0f, ""));
             fieldIndex++;
             zonesTargetMesg.SetField(new Field("FunctionalThresholdPower", 3, 132, 1f, 0f, ""));
             fieldIndex++;
             zonesTargetMesg.SetField(new Field("HrCalcType", 5, 0, 1f, 0f, ""));
             fieldIndex++;
             zonesTargetMesg.SetField(new Field("PwrCalcType", 7, 0, 1f, 0f, ""));
             fieldIndex++;
             mesgs.Add(zonesTargetMesg);
             ZonesTargetIndex = mesgIndex;
             mesgIndex++;

             // Sport
             Mesg sportMesg = new Mesg("Sport", MesgNum.Sport);
             fieldIndex = 0;
             sportMesg.SetField(new Field("Sport", 0, 0, 1f, 0f, ""));
             fieldIndex++;
             sportMesg.SetField(new Field("SubSport", 1, 0, 1f, 0f, ""));
             fieldIndex++;
             sportMesg.SetField(new Field("Name", 3, 7, 1f, 0f, ""));
             fieldIndex++;
             mesgs.Add(sportMesg);
             SportIndex = mesgIndex;
             mesgIndex++;

             // HrZone
             Mesg hrZoneMesg = new Mesg("HrZone", MesgNum.HrZone);
             fieldIndex = 0;
             hrZoneMesg.SetField(new Field("MessageIndex", 254, 132, 1f, 0f, ""));
             fieldIndex++;
             hrZoneMesg.SetField(new Field("HighBpm", 1, 2, 1f, 0f, "bpm"));
             fieldIndex++;
             hrZoneMesg.SetField(new Field("Name", 2, 7, 1f, 0f, ""));
             fieldIndex++;
             mesgs.Add(hrZoneMesg);
             HrZoneIndex = mesgIndex;
             mesgIndex++;

             // SpeedZone
             Mesg speedZoneMesg = new Mesg("SpeedZone", MesgNum.SpeedZone);
             fieldIndex = 0;
             speedZoneMesg.SetField(new Field("MessageIndex", 254, 132, 1f, 0f, ""));
             fieldIndex++;
             speedZoneMesg.SetField(new Field("HighValue", 0, 132, 1000f, 0f, "m/s"));
             fieldIndex++;
             speedZoneMesg.SetField(new Field("Name", 1, 7, 1f, 0f, ""));
             fieldIndex++;
             mesgs.Add(speedZoneMesg);
             SpeedZoneIndex = mesgIndex;
             mesgIndex++;

             // CadenceZone
             Mesg cadenceZoneMesg = new Mesg("CadenceZone", MesgNum.CadenceZone);
             fieldIndex = 0;
             cadenceZoneMesg.SetField(new Field("MessageIndex", 254, 132, 1f, 0f, ""));
             fieldIndex++;
             cadenceZoneMesg.SetField(new Field("HighValue", 0, 2, 1f, 0f, "rpm"));
             fieldIndex++;
             cadenceZoneMesg.SetField(new Field("Name", 1, 7, 1f, 0f, ""));
             fieldIndex++;
             mesgs.Add(cadenceZoneMesg);
             CadenceZoneIndex = mesgIndex;
             mesgIndex++;

             // PowerZone
             Mesg powerZoneMesg = new Mesg("PowerZone", MesgNum.PowerZone);
             fieldIndex = 0;
             powerZoneMesg.SetField(new Field("MessageIndex", 254, 132, 1f, 0f, ""));
             fieldIndex++;
             powerZoneMesg.SetField(new Field("HighValue", 1, 132, 1f, 0f, "watts"));
             fieldIndex++;
             powerZoneMesg.SetField(new Field("Name", 2, 7, 1f, 0f, ""));
             fieldIndex++;
             mesgs.Add(powerZoneMesg);
             PowerZoneIndex = mesgIndex;
             mesgIndex++;

             // MetZone
             Mesg metZoneMesg = new Mesg("MetZone", MesgNum.MetZone);
             fieldIndex = 0;
             metZoneMesg.SetField(new Field("MessageIndex", 254, 132, 1f, 0f, ""));
             fieldIndex++;
             metZoneMesg.SetField(new Field("HighBpm", 1, 2, 1f, 0f, ""));
             fieldIndex++;
             metZoneMesg.SetField(new Field("Calories", 2, 132, 10f, 0f, "kcal / min"));
             fieldIndex++;
             metZoneMesg.SetField(new Field("FatCalories", 3, 2, 10f, 0f, "kcal / min"));
             fieldIndex++;
             mesgs.Add(metZoneMesg);
             MetZoneIndex = mesgIndex;
             mesgIndex++;

             // Goal
             Mesg goalMesg = new Mesg("Goal", MesgNum.Goal);
             fieldIndex = 0;
             goalMesg.SetField(new Field("MessageIndex", 254, 132, 1f, 0f, ""));
             fieldIndex++;
             goalMesg.SetField(new Field("Sport", 0, 0, 1f, 0f, ""));
             fieldIndex++;
             goalMesg.SetField(new Field("SubSport", 1, 0, 1f, 0f, ""));
             fieldIndex++;
             goalMesg.SetField(new Field("StartDate", 2, 134, 1f, 0f, ""));
             fieldIndex++;
             goalMesg.SetField(new Field("EndDate", 3, 134, 1f, 0f, ""));
             fieldIndex++;
             goalMesg.SetField(new Field("Type", 4, 0, 1f, 0f, ""));
             fieldIndex++;
             goalMesg.SetField(new Field("Value", 5, 134, 1f, 0f, ""));
             fieldIndex++;
             goalMesg.SetField(new Field("Repeat", 6, 0, 1f, 0f, ""));
             fieldIndex++;
             goalMesg.SetField(new Field("TargetValue", 7, 134, 1f, 0f, ""));
             fieldIndex++;
             goalMesg.SetField(new Field("Recurrence", 8, 0, 1f, 0f, ""));
             fieldIndex++;
             goalMesg.SetField(new Field("RecurrenceValue", 9, 132, 1f, 0f, ""));
             fieldIndex++;
             goalMesg.SetField(new Field("Enabled", 10, 0, 1f, 0f, ""));
             fieldIndex++;
             mesgs.Add(goalMesg);
             GoalIndex = mesgIndex;
             mesgIndex++;

             // Activity
             Mesg activityMesg = new Mesg("Activity", MesgNum.Activity);
             fieldIndex = 0;
             activityMesg.SetField(new Field("Timestamp", 253, 134, 1f, 0f, ""));
             fieldIndex++;
             activityMesg.SetField(new Field("TotalTimerTime", 0, 134, 1000f, 0f, "s"));
             fieldIndex++;
             activityMesg.SetField(new Field("NumSessions", 1, 132, 1f, 0f, ""));
             fieldIndex++;
             activityMesg.SetField(new Field("Type", 2, 0, 1f, 0f, ""));
             fieldIndex++;
             activityMesg.SetField(new Field("Event", 3, 0, 1f, 0f, ""));
             fieldIndex++;
             activityMesg.SetField(new Field("EventType", 4, 0, 1f, 0f, ""));
             fieldIndex++;
             activityMesg.SetField(new Field("LocalTimestamp", 5, 134, 1f, 0f, ""));
             fieldIndex++;
             activityMesg.SetField(new Field("EventGroup", 6, 2, 1f, 0f, ""));
             fieldIndex++;
             mesgs.Add(activityMesg);
             ActivityIndex = mesgIndex;
             mesgIndex++;

             // Session
             Mesg sessionMesg = new Mesg("Session", MesgNum.Session);
             fieldIndex = 0;
             sessionMesg.SetField(new Field("MessageIndex", 254, 132, 1f, 0f, ""));
             fieldIndex++;
             sessionMesg.SetField(new Field("Timestamp", 253, 134, 1f, 0f, "s"));
             fieldIndex++;
             sessionMesg.SetField(new Field("Event", 0, 0, 1f, 0f, ""));
             fieldIndex++;
             sessionMesg.SetField(new Field("EventType", 1, 0, 1f, 0f, ""));
             fieldIndex++;
             sessionMesg.SetField(new Field("StartTime", 2, 134, 1f, 0f, ""));
             fieldIndex++;
             sessionMesg.SetField(new Field("StartPositionLat", 3, 133, 1f, 0f, "semicircles"));
             fieldIndex++;
             sessionMesg.SetField(new Field("StartPositionLong", 4, 133, 1f, 0f, "semicircles"));
             fieldIndex++;
             sessionMesg.SetField(new Field("Sport", 5, 0, 1f, 0f, ""));
             fieldIndex++;
             sessionMesg.SetField(new Field("SubSport", 6, 0, 1f, 0f, ""));
             fieldIndex++;
             sessionMesg.SetField(new Field("TotalElapsedTime", 7, 134, 1000f, 0f, "s"));
             fieldIndex++;
             sessionMesg.SetField(new Field("TotalTimerTime", 8, 134, 1000f, 0f, "s"));
             fieldIndex++;
             sessionMesg.SetField(new Field("TotalDistance", 9, 134, 100f, 0f, "m"));
             fieldIndex++;
             sessionMesg.SetField(new Field("TotalCycles", 10, 134, 1f, 0f, "cycles"));
             subfieldIndex = 0;
             sessionMesg.fields[fieldIndex].subfields.Add(new Subfield("TotalStrides", 134, 1f, 0f, "strides"));
             sessionMesg.fields[fieldIndex].subfields[subfieldIndex].AddMap(5, 1);
             sessionMesg.fields[fieldIndex].subfields[subfieldIndex].AddMap(5, 11);
             subfieldIndex++;
             fieldIndex++;
             sessionMesg.SetField(new Field("TotalCalories", 11, 132, 1f, 0f, "kcal"));
             fieldIndex++;
             sessionMesg.SetField(new Field("TotalFatCalories", 13, 132, 1f, 0f, "kcal"));
             fieldIndex++;
             sessionMesg.SetField(new Field("AvgSpeed", 14, 132, 1000f, 0f, "m/s"));
             sessionMesg.fields[fieldIndex].components.Add(new FieldComponent(124, false, 16, 1000f, 0f)); // enhanced_avg_speed
             fieldIndex++;
             sessionMesg.SetField(new Field("MaxSpeed", 15, 132, 1000f, 0f, "m/s"));
             sessionMesg.fields[fieldIndex].components.Add(new FieldComponent(125, false, 16, 1000f, 0f)); // enhanced_max_speed
             fieldIndex++;
             sessionMesg.SetField(new Field("AvgHeartRate", 16, 2, 1f, 0f, "bpm"));
             fieldIndex++;
             sessionMesg.SetField(new Field("MaxHeartRate", 17, 2, 1f, 0f, "bpm"));
             fieldIndex++;
             sessionMesg.SetField(new Field("AvgCadence", 18, 2, 1f, 0f, "rpm"));
             subfieldIndex = 0;
             sessionMesg.fields[fieldIndex].subfields.Add(new Subfield("AvgRunningCadence", 2, 1f, 0f, "strides/min"));
             sessionMesg.fields[fieldIndex].subfields[subfieldIndex].AddMap(5, 1);
             subfieldIndex++;
             fieldIndex++;
             sessionMesg.SetField(new Field("MaxCadence", 19, 2, 1f, 0f, "rpm"));
             subfieldIndex = 0;
             sessionMesg.fields[fieldIndex].subfields.Add(new Subfield("MaxRunningCadence", 2, 1f, 0f, "strides/min"));
             sessionMesg.fields[fieldIndex].subfields[subfieldIndex].AddMap(5, 1);
             subfieldIndex++;
             fieldIndex++;
             sessionMesg.SetField(new Field("AvgPower", 20, 132, 1f, 0f, "watts"));
             fieldIndex++;
             sessionMesg.SetField(new Field("MaxPower", 21, 132, 1f, 0f, "watts"));
             fieldIndex++;
             sessionMesg.SetField(new Field("TotalAscent", 22, 132, 1f, 0f, "m"));
             fieldIndex++;
             sessionMesg.SetField(new Field("TotalDescent", 23, 132, 1f, 0f, "m"));
             fieldIndex++;
             sessionMesg.SetField(new Field("TotalTrainingEffect", 24, 2, 10f, 0f, ""));
             fieldIndex++;
             sessionMesg.SetField(new Field("FirstLapIndex", 25, 132, 1f, 0f, ""));
             fieldIndex++;
             sessionMesg.SetField(new Field("NumLaps", 26, 132, 1f, 0f, ""));
             fieldIndex++;
             sessionMesg.SetField(new Field("EventGroup", 27, 2, 1f, 0f, ""));
             fieldIndex++;
             sessionMesg.SetField(new Field("Trigger", 28, 0, 1f, 0f, ""));
             fieldIndex++;
             sessionMesg.SetField(new Field("NecLat", 29, 133, 1f, 0f, "semicircles"));
             fieldIndex++;
             sessionMesg.SetField(new Field("NecLong", 30, 133, 1f, 0f, "semicircles"));
             fieldIndex++;
             sessionMesg.SetField(new Field("SwcLat", 31, 133, 1f, 0f, "semicircles"));
             fieldIndex++;
             sessionMesg.SetField(new Field("SwcLong", 32, 133, 1f, 0f, "semicircles"));
             fieldIndex++;
             sessionMesg.SetField(new Field("NormalizedPower", 34, 132, 1f, 0f, "watts"));
             fieldIndex++;
             sessionMesg.SetField(new Field("TrainingStressScore", 35, 132, 10f, 0f, "tss"));
             fieldIndex++;
             sessionMesg.SetField(new Field("IntensityFactor", 36, 132, 1000f, 0f, "if"));
             fieldIndex++;
             sessionMesg.SetField(new Field("LeftRightBalance", 37, 132, 1f, 0f, ""));
             fieldIndex++;
             sessionMesg.SetField(new Field("AvgStrokeCount", 41, 134, 10f, 0f, "strokes/lap"));
             fieldIndex++;
             sessionMesg.SetField(new Field("AvgStrokeDistance", 42, 132, 100f, 0f, "m"));
             fieldIndex++;
             sessionMesg.SetField(new Field("SwimStroke", 43, 0, 1f, 0f, "swim_stroke"));
             fieldIndex++;
             sessionMesg.SetField(new Field("PoolLength", 44, 132, 100f, 0f, "m"));
             fieldIndex++;
             sessionMesg.SetField(new Field("ThresholdPower", 45, 132, 1f, 0f, "watts"));
             fieldIndex++;
             sessionMesg.SetField(new Field("PoolLengthUnit", 46, 0, 1f, 0f, ""));
             fieldIndex++;
             sessionMesg.SetField(new Field("NumActiveLengths", 47, 132, 1f, 0f, "lengths"));
             fieldIndex++;
             sessionMesg.SetField(new Field("TotalWork", 48, 134, 1f, 0f, "J"));
             fieldIndex++;
             sessionMesg.SetField(new Field("AvgAltitude", 49, 132, 5f, 500f, "m"));
             sessionMesg.fields[fieldIndex].components.Add(new FieldComponent(126, false, 16, 5f, 500f)); // enhanced_avg_altitude
             fieldIndex++;
             sessionMesg.SetField(new Field("MaxAltitude", 50, 132, 5f, 500f, "m"));
             sessionMesg.fields[fieldIndex].components.Add(new FieldComponent(128, false, 16, 5f, 500f)); // enhanced_max_altitude
             fieldIndex++;
             sessionMesg.SetField(new Field("GpsAccuracy", 51, 2, 1f, 0f, "m"));
             fieldIndex++;
             sessionMesg.SetField(new Field("AvgGrade", 52, 131, 100f, 0f, "%"));
             fieldIndex++;
             sessionMesg.SetField(new Field("AvgPosGrade", 53, 131, 100f, 0f, "%"));
             fieldIndex++;
             sessionMesg.SetField(new Field("AvgNegGrade", 54, 131, 100f, 0f, "%"));
             fieldIndex++;
             sessionMesg.SetField(new Field("MaxPosGrade", 55, 131, 100f, 0f, "%"));
             fieldIndex++;
             sessionMesg.SetField(new Field("MaxNegGrade", 56, 131, 100f, 0f, "%"));
             fieldIndex++;
             sessionMesg.SetField(new Field("AvgTemperature", 57, 1, 1f, 0f, "C"));
             fieldIndex++;
             sessionMesg.SetField(new Field("MaxTemperature", 58, 1, 1f, 0f, "C"));
             fieldIndex++;
             sessionMesg.SetField(new Field("TotalMovingTime", 59, 134, 1000f, 0f, "s"));
             fieldIndex++;
             sessionMesg.SetField(new Field("AvgPosVerticalSpeed", 60, 131, 1000f, 0f, "m/s"));
             fieldIndex++;
             sessionMesg.SetField(new Field("AvgNegVerticalSpeed", 61, 131, 1000f, 0f, "m/s"));
             fieldIndex++;
             sessionMesg.SetField(new Field("MaxPosVerticalSpeed", 62, 131, 1000f, 0f, "m/s"));
             fieldIndex++;
             sessionMesg.SetField(new Field("MaxNegVerticalSpeed", 63, 131, 1000f, 0f, "m/s"));
             fieldIndex++;
             sessionMesg.SetField(new Field("MinHeartRate", 64, 2, 1f, 0f, "bpm"));
             fieldIndex++;
             sessionMesg.SetField(new Field("TimeInHrZone", 65, 134, 1000f, 0f, "s"));
             fieldIndex++;
             sessionMesg.SetField(new Field("TimeInSpeedZone", 66, 134, 1000f, 0f, "s"));
             fieldIndex++;
             sessionMesg.SetField(new Field("TimeInCadenceZone", 67, 134, 1000f, 0f, "s"));
             fieldIndex++;
             sessionMesg.SetField(new Field("TimeInPowerZone", 68, 134, 1000f, 0f, "s"));
             fieldIndex++;
             sessionMesg.SetField(new Field("AvgLapTime", 69, 134, 1000f, 0f, "s"));
             fieldIndex++;
             sessionMesg.SetField(new Field("BestLapIndex", 70, 132, 1f, 0f, ""));
             fieldIndex++;
             sessionMesg.SetField(new Field("MinAltitude", 71, 132, 5f, 500f, "m"));
             sessionMesg.fields[fieldIndex].components.Add(new FieldComponent(127, false, 16, 5f, 500f)); // enhanced_min_altitude
             fieldIndex++;
             sessionMesg.SetField(new Field("PlayerScore", 82, 132, 1f, 0f, ""));
             fieldIndex++;
             sessionMesg.SetField(new Field("OpponentScore", 83, 132, 1f, 0f, ""));
             fieldIndex++;
             sessionMesg.SetField(new Field("OpponentName", 84, 7, 1f, 0f, ""));
             fieldIndex++;
             sessionMesg.SetField(new Field("StrokeCount", 85, 132, 1f, 0f, "counts"));
             fieldIndex++;
             sessionMesg.SetField(new Field("ZoneCount", 86, 132, 1f, 0f, "counts"));
             fieldIndex++;
             sessionMesg.SetField(new Field("MaxBallSpeed", 87, 132, 100f, 0f, "m/s"));
             fieldIndex++;
             sessionMesg.SetField(new Field("AvgBallSpeed", 88, 132, 100f, 0f, "m/s"));
             fieldIndex++;
             sessionMesg.SetField(new Field("AvgVerticalOscillation", 89, 132, 10f, 0f, "mm"));
             fieldIndex++;
             sessionMesg.SetField(new Field("AvgStanceTimePercent", 90, 132, 100f, 0f, "percent"));
             fieldIndex++;
             sessionMesg.SetField(new Field("AvgStanceTime", 91, 132, 10f, 0f, "ms"));
             fieldIndex++;
             sessionMesg.SetField(new Field("AvgFractionalCadence", 92, 2, 128f, 0f, "rpm"));
             fieldIndex++;
             sessionMesg.SetField(new Field("MaxFractionalCadence", 93, 2, 128f, 0f, "rpm"));
             fieldIndex++;
             sessionMesg.SetField(new Field("TotalFractionalCycles", 94, 2, 128f, 0f, "cycles"));
             fieldIndex++;
             sessionMesg.SetField(new Field("AvgTotalHemoglobinConc", 95, 132, 100f, 0f, "g/dL"));
             fieldIndex++;
             sessionMesg.SetField(new Field("MinTotalHemoglobinConc", 96, 132, 100f, 0f, "g/dL"));
             fieldIndex++;
             sessionMesg.SetField(new Field("MaxTotalHemoglobinConc", 97, 132, 100f, 0f, "g/dL"));
             fieldIndex++;
             sessionMesg.SetField(new Field("AvgSaturatedHemoglobinPercent", 98, 132, 10f, 0f, "%"));
             fieldIndex++;
             sessionMesg.SetField(new Field("MinSaturatedHemoglobinPercent", 99, 132, 10f, 0f, "%"));
             fieldIndex++;
             sessionMesg.SetField(new Field("MaxSaturatedHemoglobinPercent", 100, 132, 10f, 0f, "%"));
             fieldIndex++;
             sessionMesg.SetField(new Field("AvgLeftTorqueEffectiveness", 101, 2, 2f, 0f, "percent"));
             fieldIndex++;
             sessionMesg.SetField(new Field("AvgRightTorqueEffectiveness", 102, 2, 2f, 0f, "percent"));
             fieldIndex++;
             sessionMesg.SetField(new Field("AvgLeftPedalSmoothness", 103, 2, 2f, 0f, "percent"));
             fieldIndex++;
             sessionMesg.SetField(new Field("AvgRightPedalSmoothness", 104, 2, 2f, 0f, "percent"));
             fieldIndex++;
             sessionMesg.SetField(new Field("AvgCombinedPedalSmoothness", 105, 2, 2f, 0f, "percent"));
             fieldIndex++;
             sessionMesg.SetField(new Field("SportIndex", 111, 2, 1f, 0f, ""));
             fieldIndex++;
             sessionMesg.SetField(new Field("TimeStanding", 112, 134, 1000f, 0f, "s"));
             fieldIndex++;
             sessionMesg.SetField(new Field("StandCount", 113, 132, 1f, 0f, ""));
             fieldIndex++;
             sessionMesg.SetField(new Field("AvgLeftPco", 114, 1, 1f, 0f, "mm"));
             fieldIndex++;
             sessionMesg.SetField(new Field("AvgRightPco", 115, 1, 1f, 0f, "mm"));
             fieldIndex++;
             sessionMesg.SetField(new Field("AvgLeftPowerPhase", 116, 2, 0.7111111f, 0f, "degrees"));
             fieldIndex++;
             sessionMesg.SetField(new Field("AvgLeftPowerPhasePeak", 117, 2, 0.7111111f, 0f, "degrees"));
             fieldIndex++;
             sessionMesg.SetField(new Field("AvgRightPowerPhase", 118, 2, 0.7111111f, 0f, "degrees"));
             fieldIndex++;
             sessionMesg.SetField(new Field("AvgRightPowerPhasePeak", 119, 2, 0.7111111f, 0f, "degrees"));
             fieldIndex++;
             sessionMesg.SetField(new Field("AvgPowerPosition", 120, 132, 1f, 0f, "watts"));
             fieldIndex++;
             sessionMesg.SetField(new Field("MaxPowerPosition", 121, 132, 1f, 0f, "watts"));
             fieldIndex++;
             sessionMesg.SetField(new Field("AvgCadencePosition", 122, 2, 1f, 0f, "rpm"));
             fieldIndex++;
             sessionMesg.SetField(new Field("MaxCadencePosition", 123, 2, 1f, 0f, "rpm"));
             fieldIndex++;
             sessionMesg.SetField(new Field("EnhancedAvgSpeed", 124, 134, 1000f, 0f, "m/s"));
             fieldIndex++;
             sessionMesg.SetField(new Field("EnhancedMaxSpeed", 125, 134, 1000f, 0f, "m/s"));
             fieldIndex++;
             sessionMesg.SetField(new Field("EnhancedAvgAltitude", 126, 134, 5f, 500f, "m"));
             fieldIndex++;
             sessionMesg.SetField(new Field("EnhancedMinAltitude", 127, 134, 5f, 500f, "m"));
             fieldIndex++;
             sessionMesg.SetField(new Field("EnhancedMaxAltitude", 128, 134, 5f, 500f, "m"));
             fieldIndex++;
             sessionMesg.SetField(new Field("AvgLevMotorPower", 129, 132, 1f, 0f, "watts"));
             fieldIndex++;
             sessionMesg.SetField(new Field("MaxLevMotorPower", 130, 132, 1f, 0f, "watts"));
             fieldIndex++;
             sessionMesg.SetField(new Field("LevBatteryConsumption", 131, 2, 2f, 0f, "percent"));
             fieldIndex++;
             mesgs.Add(sessionMesg);
             SessionIndex = mesgIndex;
             mesgIndex++;

             // Lap
             Mesg lapMesg = new Mesg("Lap", MesgNum.Lap);
             fieldIndex = 0;
             lapMesg.SetField(new Field("MessageIndex", 254, 132, 1f, 0f, ""));
             fieldIndex++;
             lapMesg.SetField(new Field("Timestamp", 253, 134, 1f, 0f, "s"));
             fieldIndex++;
             lapMesg.SetField(new Field("Event", 0, 0, 1f, 0f, ""));
             fieldIndex++;
             lapMesg.SetField(new Field("EventType", 1, 0, 1f, 0f, ""));
             fieldIndex++;
             lapMesg.SetField(new Field("StartTime", 2, 134, 1f, 0f, ""));
             fieldIndex++;
             lapMesg.SetField(new Field("StartPositionLat", 3, 133, 1f, 0f, "semicircles"));
             fieldIndex++;
             lapMesg.SetField(new Field("StartPositionLong", 4, 133, 1f, 0f, "semicircles"));
             fieldIndex++;
             lapMesg.SetField(new Field("EndPositionLat", 5, 133, 1f, 0f, "semicircles"));
             fieldIndex++;
             lapMesg.SetField(new Field("EndPositionLong", 6, 133, 1f, 0f, "semicircles"));
             fieldIndex++;
             lapMesg.SetField(new Field("TotalElapsedTime", 7, 134, 1000f, 0f, "s"));
             fieldIndex++;
             lapMesg.SetField(new Field("TotalTimerTime", 8, 134, 1000f, 0f, "s"));
             fieldIndex++;
             lapMesg.SetField(new Field("TotalDistance", 9, 134, 100f, 0f, "m"));
             fieldIndex++;
             lapMesg.SetField(new Field("TotalCycles", 10, 134, 1f, 0f, "cycles"));
             subfieldIndex = 0;
             lapMesg.fields[fieldIndex].subfields.Add(new Subfield("TotalStrides", 134, 1f, 0f, "strides"));
             lapMesg.fields[fieldIndex].subfields[subfieldIndex].AddMap(25, 1);
             lapMesg.fields[fieldIndex].subfields[subfieldIndex].AddMap(25, 11);
             subfieldIndex++;
             fieldIndex++;
             lapMesg.SetField(new Field("TotalCalories", 11, 132, 1f, 0f, "kcal"));
             fieldIndex++;
             lapMesg.SetField(new Field("TotalFatCalories", 12, 132, 1f, 0f, "kcal"));
             fieldIndex++;
             lapMesg.SetField(new Field("AvgSpeed", 13, 132, 1000f, 0f, "m/s"));
             lapMesg.fields[fieldIndex].components.Add(new FieldComponent(110, false, 16, 1000f, 0f)); // enhanced_avg_speed
             fieldIndex++;
             lapMesg.SetField(new Field("MaxSpeed", 14, 132, 1000f, 0f, "m/s"));
             lapMesg.fields[fieldIndex].components.Add(new FieldComponent(111, false, 16, 1000f, 0f)); // enhanced_max_speed
             fieldIndex++;
             lapMesg.SetField(new Field("AvgHeartRate", 15, 2, 1f, 0f, "bpm"));
             fieldIndex++;
             lapMesg.SetField(new Field("MaxHeartRate", 16, 2, 1f, 0f, "bpm"));
             fieldIndex++;
             lapMesg.SetField(new Field("AvgCadence", 17, 2, 1f, 0f, "rpm"));
             subfieldIndex = 0;
             lapMesg.fields[fieldIndex].subfields.Add(new Subfield("AvgRunningCadence", 2, 1f, 0f, "strides/min"));
             lapMesg.fields[fieldIndex].subfields[subfieldIndex].AddMap(25, 1);
             subfieldIndex++;
             fieldIndex++;
             lapMesg.SetField(new Field("MaxCadence", 18, 2, 1f, 0f, "rpm"));
             subfieldIndex = 0;
             lapMesg.fields[fieldIndex].subfields.Add(new Subfield("MaxRunningCadence", 2, 1f, 0f, "strides/min"));
             lapMesg.fields[fieldIndex].subfields[subfieldIndex].AddMap(25, 1);
             subfieldIndex++;
             fieldIndex++;
             lapMesg.SetField(new Field("AvgPower", 19, 132, 1f, 0f, "watts"));
             fieldIndex++;
             lapMesg.SetField(new Field("MaxPower", 20, 132, 1f, 0f, "watts"));
             fieldIndex++;
             lapMesg.SetField(new Field("TotalAscent", 21, 132, 1f, 0f, "m"));
             fieldIndex++;
             lapMesg.SetField(new Field("TotalDescent", 22, 132, 1f, 0f, "m"));
             fieldIndex++;
             lapMesg.SetField(new Field("Intensity", 23, 0, 1f, 0f, ""));
             fieldIndex++;
             lapMesg.SetField(new Field("LapTrigger", 24, 0, 1f, 0f, ""));
             fieldIndex++;
             lapMesg.SetField(new Field("Sport", 25, 0, 1f, 0f, ""));
             fieldIndex++;
             lapMesg.SetField(new Field("EventGroup", 26, 2, 1f, 0f, ""));
             fieldIndex++;
             lapMesg.SetField(new Field("NumLengths", 32, 132, 1f, 0f, "lengths"));
             fieldIndex++;
             lapMesg.SetField(new Field("NormalizedPower", 33, 132, 1f, 0f, "watts"));
             fieldIndex++;
             lapMesg.SetField(new Field("LeftRightBalance", 34, 132, 1f, 0f, ""));
             fieldIndex++;
             lapMesg.SetField(new Field("FirstLengthIndex", 35, 132, 1f, 0f, ""));
             fieldIndex++;
             lapMesg.SetField(new Field("AvgStrokeDistance", 37, 132, 100f, 0f, "m"));
             fieldIndex++;
             lapMesg.SetField(new Field("SwimStroke", 38, 0, 1f, 0f, ""));
             fieldIndex++;
             lapMesg.SetField(new Field("SubSport", 39, 0, 1f, 0f, ""));
             fieldIndex++;
             lapMesg.SetField(new Field("NumActiveLengths", 40, 132, 1f, 0f, "lengths"));
             fieldIndex++;
             lapMesg.SetField(new Field("TotalWork", 41, 134, 1f, 0f, "J"));
             fieldIndex++;
             lapMesg.SetField(new Field("AvgAltitude", 42, 132, 5f, 500f, "m"));
             lapMesg.fields[fieldIndex].components.Add(new FieldComponent(112, false, 16, 5f, 500f)); // enhanced_avg_altitude
             fieldIndex++;
             lapMesg.SetField(new Field("MaxAltitude", 43, 132, 5f, 500f, "m"));
             lapMesg.fields[fieldIndex].components.Add(new FieldComponent(114, false, 16, 5f, 500f)); // enhanced_max_altitude
             fieldIndex++;
             lapMesg.SetField(new Field("GpsAccuracy", 44, 2, 1f, 0f, "m"));
             fieldIndex++;
             lapMesg.SetField(new Field("AvgGrade", 45, 131, 100f, 0f, "%"));
             fieldIndex++;
             lapMesg.SetField(new Field("AvgPosGrade", 46, 131, 100f, 0f, "%"));
             fieldIndex++;
             lapMesg.SetField(new Field("AvgNegGrade", 47, 131, 100f, 0f, "%"));
             fieldIndex++;
             lapMesg.SetField(new Field("MaxPosGrade", 48, 131, 100f, 0f, "%"));
             fieldIndex++;
             lapMesg.SetField(new Field("MaxNegGrade", 49, 131, 100f, 0f, "%"));
             fieldIndex++;
             lapMesg.SetField(new Field("AvgTemperature", 50, 1, 1f, 0f, "C"));
             fieldIndex++;
             lapMesg.SetField(new Field("MaxTemperature", 51, 1, 1f, 0f, "C"));
             fieldIndex++;
             lapMesg.SetField(new Field("TotalMovingTime", 52, 134, 1000f, 0f, "s"));
             fieldIndex++;
             lapMesg.SetField(new Field("AvgPosVerticalSpeed", 53, 131, 1000f, 0f, "m/s"));
             fieldIndex++;
             lapMesg.SetField(new Field("AvgNegVerticalSpeed", 54, 131, 1000f, 0f, "m/s"));
             fieldIndex++;
             lapMesg.SetField(new Field("MaxPosVerticalSpeed", 55, 131, 1000f, 0f, "m/s"));
             fieldIndex++;
             lapMesg.SetField(new Field("MaxNegVerticalSpeed", 56, 131, 1000f, 0f, "m/s"));
             fieldIndex++;
             lapMesg.SetField(new Field("TimeInHrZone", 57, 134, 1000f, 0f, "s"));
             fieldIndex++;
             lapMesg.SetField(new Field("TimeInSpeedZone", 58, 134, 1000f, 0f, "s"));
             fieldIndex++;
             lapMesg.SetField(new Field("TimeInCadenceZone", 59, 134, 1000f, 0f, "s"));
             fieldIndex++;
             lapMesg.SetField(new Field("TimeInPowerZone", 60, 134, 1000f, 0f, "s"));
             fieldIndex++;
             lapMesg.SetField(new Field("RepetitionNum", 61, 132, 1f, 0f, ""));
             fieldIndex++;
             lapMesg.SetField(new Field("MinAltitude", 62, 132, 5f, 500f, "m"));
             lapMesg.fields[fieldIndex].components.Add(new FieldComponent(113, false, 16, 5f, 500f)); // enhanced_min_altitude
             fieldIndex++;
             lapMesg.SetField(new Field("MinHeartRate", 63, 2, 1f, 0f, "bpm"));
             fieldIndex++;
             lapMesg.SetField(new Field("WktStepIndex", 71, 132, 1f, 0f, ""));
             fieldIndex++;
             lapMesg.SetField(new Field("OpponentScore", 74, 132, 1f, 0f, ""));
             fieldIndex++;
             lapMesg.SetField(new Field("StrokeCount", 75, 132, 1f, 0f, "counts"));
             fieldIndex++;
             lapMesg.SetField(new Field("ZoneCount", 76, 132, 1f, 0f, "counts"));
             fieldIndex++;
             lapMesg.SetField(new Field("AvgVerticalOscillation", 77, 132, 10f, 0f, "mm"));
             fieldIndex++;
             lapMesg.SetField(new Field("AvgStanceTimePercent", 78, 132, 100f, 0f, "percent"));
             fieldIndex++;
             lapMesg.SetField(new Field("AvgStanceTime", 79, 132, 10f, 0f, "ms"));
             fieldIndex++;
             lapMesg.SetField(new Field("AvgFractionalCadence", 80, 2, 128f, 0f, "rpm"));
             fieldIndex++;
             lapMesg.SetField(new Field("MaxFractionalCadence", 81, 2, 128f, 0f, "rpm"));
             fieldIndex++;
             lapMesg.SetField(new Field("TotalFractionalCycles", 82, 2, 128f, 0f, "cycles"));
             fieldIndex++;
             lapMesg.SetField(new Field("PlayerScore", 83, 132, 1f, 0f, ""));
             fieldIndex++;
             lapMesg.SetField(new Field("AvgTotalHemoglobinConc", 84, 132, 100f, 0f, "g/dL"));
             fieldIndex++;
             lapMesg.SetField(new Field("MinTotalHemoglobinConc", 85, 132, 100f, 0f, "g/dL"));
             fieldIndex++;
             lapMesg.SetField(new Field("MaxTotalHemoglobinConc", 86, 132, 100f, 0f, "g/dL"));
             fieldIndex++;
             lapMesg.SetField(new Field("AvgSaturatedHemoglobinPercent", 87, 132, 10f, 0f, "%"));
             fieldIndex++;
             lapMesg.SetField(new Field("MinSaturatedHemoglobinPercent", 88, 132, 10f, 0f, "%"));
             fieldIndex++;
             lapMesg.SetField(new Field("MaxSaturatedHemoglobinPercent", 89, 132, 10f, 0f, "%"));
             fieldIndex++;
             lapMesg.SetField(new Field("AvgLeftTorqueEffectiveness", 91, 2, 2f, 0f, "percent"));
             fieldIndex++;
             lapMesg.SetField(new Field("AvgRightTorqueEffectiveness", 92, 2, 2f, 0f, "percent"));
             fieldIndex++;
             lapMesg.SetField(new Field("AvgLeftPedalSmoothness", 93, 2, 2f, 0f, "percent"));
             fieldIndex++;
             lapMesg.SetField(new Field("AvgRightPedalSmoothness", 94, 2, 2f, 0f, "percent"));
             fieldIndex++;
             lapMesg.SetField(new Field("AvgCombinedPedalSmoothness", 95, 2, 2f, 0f, "percent"));
             fieldIndex++;
             lapMesg.SetField(new Field("TimeStanding", 98, 134, 1000f, 0f, "s"));
             fieldIndex++;
             lapMesg.SetField(new Field("StandCount", 99, 132, 1f, 0f, ""));
             fieldIndex++;
             lapMesg.SetField(new Field("AvgLeftPco", 100, 1, 1f, 0f, "mm"));
             fieldIndex++;
             lapMesg.SetField(new Field("AvgRightPco", 101, 1, 1f, 0f, "mm"));
             fieldIndex++;
             lapMesg.SetField(new Field("AvgLeftPowerPhase", 102, 2, 0.7111111f, 0f, "degrees"));
             fieldIndex++;
             lapMesg.SetField(new Field("AvgLeftPowerPhasePeak", 103, 2, 0.7111111f, 0f, "degrees"));
             fieldIndex++;
             lapMesg.SetField(new Field("AvgRightPowerPhase", 104, 2, 0.7111111f, 0f, "degrees"));
             fieldIndex++;
             lapMesg.SetField(new Field("AvgRightPowerPhasePeak", 105, 2, 0.7111111f, 0f, "degrees"));
             fieldIndex++;
             lapMesg.SetField(new Field("AvgPowerPosition", 106, 132, 1f, 0f, "watts"));
             fieldIndex++;
             lapMesg.SetField(new Field("MaxPowerPosition", 107, 132, 1f, 0f, "watts"));
             fieldIndex++;
             lapMesg.SetField(new Field("AvgCadencePosition", 108, 2, 1f, 0f, "rpm"));
             fieldIndex++;
             lapMesg.SetField(new Field("MaxCadencePosition", 109, 2, 1f, 0f, "rpm"));
             fieldIndex++;
             lapMesg.SetField(new Field("EnhancedAvgSpeed", 110, 134, 1000f, 0f, "m/s"));
             fieldIndex++;
             lapMesg.SetField(new Field("EnhancedMaxSpeed", 111, 134, 1000f, 0f, "m/s"));
             fieldIndex++;
             lapMesg.SetField(new Field("EnhancedAvgAltitude", 112, 134, 5f, 500f, "m"));
             fieldIndex++;
             lapMesg.SetField(new Field("EnhancedMinAltitude", 113, 134, 5f, 500f, "m"));
             fieldIndex++;
             lapMesg.SetField(new Field("EnhancedMaxAltitude", 114, 134, 5f, 500f, "m"));
             fieldIndex++;
             lapMesg.SetField(new Field("AvgLevMotorPower", 115, 132, 1f, 0f, "watts"));
             fieldIndex++;
             lapMesg.SetField(new Field("MaxLevMotorPower", 116, 132, 1f, 0f, "watts"));
             fieldIndex++;
             lapMesg.SetField(new Field("LevBatteryConsumption", 117, 2, 2f, 0f, "percent"));
             fieldIndex++;
             mesgs.Add(lapMesg);
             LapIndex = mesgIndex;
             mesgIndex++;

             // Length
             Mesg lengthMesg = new Mesg("Length", MesgNum.Length);
             fieldIndex = 0;
             lengthMesg.SetField(new Field("MessageIndex", 254, 132, 1f, 0f, ""));
             fieldIndex++;
             lengthMesg.SetField(new Field("Timestamp", 253, 134, 1f, 0f, ""));
             fieldIndex++;
             lengthMesg.SetField(new Field("Event", 0, 0, 1f, 0f, ""));
             fieldIndex++;
             lengthMesg.SetField(new Field("EventType", 1, 0, 1f, 0f, ""));
             fieldIndex++;
             lengthMesg.SetField(new Field("StartTime", 2, 134, 1f, 0f, ""));
             fieldIndex++;
             lengthMesg.SetField(new Field("TotalElapsedTime", 3, 134, 1000f, 0f, "s"));
             fieldIndex++;
             lengthMesg.SetField(new Field("TotalTimerTime", 4, 134, 1000f, 0f, "s"));
             fieldIndex++;
             lengthMesg.SetField(new Field("TotalStrokes", 5, 132, 1f, 0f, "strokes"));
             fieldIndex++;
             lengthMesg.SetField(new Field("AvgSpeed", 6, 132, 1000f, 0f, "m/s"));
             fieldIndex++;
             lengthMesg.SetField(new Field("SwimStroke", 7, 0, 1f, 0f, "swim_stroke"));
             fieldIndex++;
             lengthMesg.SetField(new Field("AvgSwimmingCadence", 9, 2, 1f, 0f, "strokes/min"));
             fieldIndex++;
             lengthMesg.SetField(new Field("EventGroup", 10, 2, 1f, 0f, ""));
             fieldIndex++;
             lengthMesg.SetField(new Field("TotalCalories", 11, 132, 1f, 0f, "kcal"));
             fieldIndex++;
             lengthMesg.SetField(new Field("LengthType", 12, 0, 1f, 0f, ""));
             fieldIndex++;
             lengthMesg.SetField(new Field("PlayerScore", 18, 132, 1f, 0f, ""));
             fieldIndex++;
             lengthMesg.SetField(new Field("OpponentScore", 19, 132, 1f, 0f, ""));
             fieldIndex++;
             lengthMesg.SetField(new Field("StrokeCount", 20, 132, 1f, 0f, "counts"));
             fieldIndex++;
             lengthMesg.SetField(new Field("ZoneCount", 21, 132, 1f, 0f, "counts"));
             fieldIndex++;
             mesgs.Add(lengthMesg);
             LengthIndex = mesgIndex;
             mesgIndex++;

             // Record
             Mesg recordMesg = new Mesg("Record", MesgNum.Record);
             fieldIndex = 0;
             recordMesg.SetField(new Field("Timestamp", 253, 134, 1f, 0f, "s"));
             fieldIndex++;
             recordMesg.SetField(new Field("PositionLat", 0, 133, 1f, 0f, "semicircles"));
             fieldIndex++;
             recordMesg.SetField(new Field("PositionLong", 1, 133, 1f, 0f, "semicircles"));
             fieldIndex++;
             recordMesg.SetField(new Field("Altitude", 2, 132, 5f, 500f, "m"));
             recordMesg.fields[fieldIndex].components.Add(new FieldComponent(78, false, 16, 5f, 500f)); // enhanced_altitude
             fieldIndex++;
             recordMesg.SetField(new Field("HeartRate", 3, 2, 1f, 0f, "bpm"));
             fieldIndex++;
             recordMesg.SetField(new Field("Cadence", 4, 2, 1f, 0f, "rpm"));
             fieldIndex++;
             recordMesg.SetField(new Field("Distance", 5, 134, 100f, 0f, "m"));
             fieldIndex++;
             recordMesg.SetField(new Field("Speed", 6, 132, 1000f, 0f, "m/s"));
             recordMesg.fields[fieldIndex].components.Add(new FieldComponent(73, false, 16, 1000f, 0f)); // enhanced_speed
             fieldIndex++;
             recordMesg.SetField(new Field("Power", 7, 132, 1f, 0f, "watts"));
             fieldIndex++;
             recordMesg.SetField(new Field("CompressedSpeedDistance", 8, 13, 1f, 0f, ""));
             recordMesg.fields[fieldIndex].components.Add(new FieldComponent(6, false, 12, 100f, 0f)); // speed
             recordMesg.fields[fieldIndex].components.Add(new FieldComponent(5, true, 12, 16f, 0f)); // distance
             fieldIndex++;
             recordMesg.SetField(new Field("Grade", 9, 131, 100f, 0f, "%"));
             fieldIndex++;
             recordMesg.SetField(new Field("Resistance", 10, 2, 1f, 0f, ""));
             fieldIndex++;
             recordMesg.SetField(new Field("TimeFromCourse", 11, 133, 1000f, 0f, "s"));
             fieldIndex++;
             recordMesg.SetField(new Field("CycleLength", 12, 2, 100f, 0f, "m"));
             fieldIndex++;
             recordMesg.SetField(new Field("Temperature", 13, 1, 1f, 0f, "C"));
             fieldIndex++;
             recordMesg.SetField(new Field("Speed1s", 17, 2, 16f, 0f, "m/s"));
             fieldIndex++;
             recordMesg.SetField(new Field("Cycles", 18, 2, 1f, 0f, "cycles"));
             recordMesg.fields[fieldIndex].components.Add(new FieldComponent(19, true, 8, 1f, 0f)); // total_cycles
             fieldIndex++;
             recordMesg.SetField(new Field("TotalCycles", 19, 134, 1f, 0f, "cycles"));
             fieldIndex++;
             recordMesg.SetField(new Field("CompressedAccumulatedPower", 28, 132, 1f, 0f, "watts"));
             recordMesg.fields[fieldIndex].components.Add(new FieldComponent(29, true, 16, 1f, 0f)); // accumulated_power
             fieldIndex++;
             recordMesg.SetField(new Field("AccumulatedPower", 29, 134, 1f, 0f, "watts"));
             fieldIndex++;
             recordMesg.SetField(new Field("LeftRightBalance", 30, 2, 1f, 0f, ""));
             fieldIndex++;
             recordMesg.SetField(new Field("GpsAccuracy", 31, 2, 1f, 0f, "m"));
             fieldIndex++;
             recordMesg.SetField(new Field("VerticalSpeed", 32, 131, 1000f, 0f, "m/s"));
             fieldIndex++;
             recordMesg.SetField(new Field("Calories", 33, 132, 1f, 0f, "kcal"));
             fieldIndex++;
             recordMesg.SetField(new Field("VerticalOscillation", 39, 132, 10f, 0f, "mm"));
             fieldIndex++;
             recordMesg.SetField(new Field("StanceTimePercent", 40, 132, 100f, 0f, "percent"));
             fieldIndex++;
             recordMesg.SetField(new Field("StanceTime", 41, 132, 10f, 0f, "ms"));
             fieldIndex++;
             recordMesg.SetField(new Field("ActivityType", 42, 0, 1f, 0f, ""));
             fieldIndex++;
             recordMesg.SetField(new Field("LeftTorqueEffectiveness", 43, 2, 2f, 0f, "percent"));
             fieldIndex++;
             recordMesg.SetField(new Field("RightTorqueEffectiveness", 44, 2, 2f, 0f, "percent"));
             fieldIndex++;
             recordMesg.SetField(new Field("LeftPedalSmoothness", 45, 2, 2f, 0f, "percent"));
             fieldIndex++;
             recordMesg.SetField(new Field("RightPedalSmoothness", 46, 2, 2f, 0f, "percent"));
             fieldIndex++;
             recordMesg.SetField(new Field("CombinedPedalSmoothness", 47, 2, 2f, 0f, "percent"));
             fieldIndex++;
             recordMesg.SetField(new Field("Time128", 48, 2, 128f, 0f, "s"));
             fieldIndex++;
             recordMesg.SetField(new Field("StrokeType", 49, 0, 1f, 0f, ""));
             fieldIndex++;
             recordMesg.SetField(new Field("Zone", 50, 2, 1f, 0f, ""));
             fieldIndex++;
             recordMesg.SetField(new Field("BallSpeed", 51, 132, 100f, 0f, "m/s"));
             fieldIndex++;
             recordMesg.SetField(new Field("Cadence256", 52, 132, 256f, 0f, "rpm"));
             fieldIndex++;
             recordMesg.SetField(new Field("FractionalCadence", 53, 2, 128f, 0f, "rpm"));
             fieldIndex++;
             recordMesg.SetField(new Field("TotalHemoglobinConc", 54, 132, 100f, 0f, "g/dL"));
             fieldIndex++;
             recordMesg.SetField(new Field("TotalHemoglobinConcMin", 55, 132, 100f, 0f, "g/dL"));
             fieldIndex++;
             recordMesg.SetField(new Field("TotalHemoglobinConcMax", 56, 132, 100f, 0f, "g/dL"));
             fieldIndex++;
             recordMesg.SetField(new Field("SaturatedHemoglobinPercent", 57, 132, 10f, 0f, "%"));
             fieldIndex++;
             recordMesg.SetField(new Field("SaturatedHemoglobinPercentMin", 58, 132, 10f, 0f, "%"));
             fieldIndex++;
             recordMesg.SetField(new Field("SaturatedHemoglobinPercentMax", 59, 132, 10f, 0f, "%"));
             fieldIndex++;
             recordMesg.SetField(new Field("DeviceIndex", 62, 2, 1f, 0f, ""));
             fieldIndex++;
             recordMesg.SetField(new Field("LeftPco", 67, 1, 1f, 0f, "mm"));
             fieldIndex++;
             recordMesg.SetField(new Field("RightPco", 68, 1, 1f, 0f, "mm"));
             fieldIndex++;
             recordMesg.SetField(new Field("LeftPowerPhase", 69, 2, 0.7111111f, 0f, "degrees"));
             fieldIndex++;
             recordMesg.SetField(new Field("LeftPowerPhasePeak", 70, 2, 0.7111111f, 0f, "degrees"));
             fieldIndex++;
             recordMesg.SetField(new Field("RightPowerPhase", 71, 2, 0.7111111f, 0f, "degrees"));
             fieldIndex++;
             recordMesg.SetField(new Field("RightPowerPhasePeak", 72, 2, 0.7111111f, 0f, "degrees"));
             fieldIndex++;
             recordMesg.SetField(new Field("EnhancedSpeed", 73, 134, 1000f, 0f, "m/s"));
             fieldIndex++;
             recordMesg.SetField(new Field("EnhancedAltitude", 78, 134, 5f, 500f, "m"));
             fieldIndex++;
             recordMesg.SetField(new Field("BatterySoc", 81, 2, 2f, 0f, "percent"));
             fieldIndex++;
             recordMesg.SetField(new Field("MotorPower", 82, 132, 1f, 0f, "watts"));
             fieldIndex++;
             mesgs.Add(recordMesg);
             RecordIndex = mesgIndex;
             mesgIndex++;

             // Event
             Mesg eventMesg = new Mesg("Event", MesgNum.Event);
             fieldIndex = 0;
             eventMesg.SetField(new Field("Timestamp", 253, 134, 1f, 0f, "s"));
             fieldIndex++;
             eventMesg.SetField(new Field("Event", 0, 0, 1f, 0f, ""));
             fieldIndex++;
             eventMesg.SetField(new Field("EventType", 1, 0, 1f, 0f, ""));
             fieldIndex++;
             eventMesg.SetField(new Field("Data16", 2, 132, 1f, 0f, ""));
             eventMesg.fields[fieldIndex].components.Add(new FieldComponent(3, false, 16, 1f, 0f)); // data
             fieldIndex++;
             eventMesg.SetField(new Field("Data", 3, 134, 1f, 0f, ""));
             subfieldIndex = 0;
             eventMesg.fields[fieldIndex].subfields.Add(new Subfield("TimerTrigger", 0, 1f, 0f, ""));
             eventMesg.fields[fieldIndex].subfields[subfieldIndex].AddMap(0, 0);
             subfieldIndex++;
             eventMesg.fields[fieldIndex].subfields.Add(new Subfield("CoursePointIndex", 132, 1f, 0f, ""));
             eventMesg.fields[fieldIndex].subfields[subfieldIndex].AddMap(0, 10);
             subfieldIndex++;
             eventMesg.fields[fieldIndex].subfields.Add(new Subfield("BatteryLevel", 132, 1000f, 0f, "V"));
             eventMesg.fields[fieldIndex].subfields[subfieldIndex].AddMap(0, 11);
             subfieldIndex++;
             eventMesg.fields[fieldIndex].subfields.Add(new Subfield("VirtualPartnerSpeed", 132, 1000f, 0f, "m/s"));
             eventMesg.fields[fieldIndex].subfields[subfieldIndex].AddMap(0, 12);
             subfieldIndex++;
             eventMesg.fields[fieldIndex].subfields.Add(new Subfield("HrHighAlert", 2, 1f, 0f, "bpm"));
             eventMesg.fields[fieldIndex].subfields[subfieldIndex].AddMap(0, 13);
             subfieldIndex++;
             eventMesg.fields[fieldIndex].subfields.Add(new Subfield("HrLowAlert", 2, 1f, 0f, "bpm"));
             eventMesg.fields[fieldIndex].subfields[subfieldIndex].AddMap(0, 14);
             subfieldIndex++;
             eventMesg.fields[fieldIndex].subfields.Add(new Subfield("SpeedHighAlert", 134, 1000f, 0f, "m/s"));
             eventMesg.fields[fieldIndex].subfields[subfieldIndex].AddMap(0, 15);
             subfieldIndex++;
             eventMesg.fields[fieldIndex].subfields.Add(new Subfield("SpeedLowAlert", 134, 1000f, 0f, "m/s"));
             eventMesg.fields[fieldIndex].subfields[subfieldIndex].AddMap(0, 16);
             subfieldIndex++;
             eventMesg.fields[fieldIndex].subfields.Add(new Subfield("CadHighAlert", 132, 1f, 0f, "rpm"));
             eventMesg.fields[fieldIndex].subfields[subfieldIndex].AddMap(0, 17);
             subfieldIndex++;
             eventMesg.fields[fieldIndex].subfields.Add(new Subfield("CadLowAlert", 132, 1f, 0f, "rpm"));
             eventMesg.fields[fieldIndex].subfields[subfieldIndex].AddMap(0, 18);
             subfieldIndex++;
             eventMesg.fields[fieldIndex].subfields.Add(new Subfield("PowerHighAlert", 132, 1f, 0f, "watts"));
             eventMesg.fields[fieldIndex].subfields[subfieldIndex].AddMap(0, 19);
             subfieldIndex++;
             eventMesg.fields[fieldIndex].subfields.Add(new Subfield("PowerLowAlert", 132, 1f, 0f, "watts"));
             eventMesg.fields[fieldIndex].subfields[subfieldIndex].AddMap(0, 20);
             subfieldIndex++;
             eventMesg.fields[fieldIndex].subfields.Add(new Subfield("TimeDurationAlert", 134, 1000f, 0f, "s"));
             eventMesg.fields[fieldIndex].subfields[subfieldIndex].AddMap(0, 23);
             subfieldIndex++;
             eventMesg.fields[fieldIndex].subfields.Add(new Subfield("DistanceDurationAlert", 134, 100f, 0f, "m"));
             eventMesg.fields[fieldIndex].subfields[subfieldIndex].AddMap(0, 24);
             subfieldIndex++;
             eventMesg.fields[fieldIndex].subfields.Add(new Subfield("CalorieDurationAlert", 134, 1f, 0f, "calories"));
             eventMesg.fields[fieldIndex].subfields[subfieldIndex].AddMap(0, 25);
             subfieldIndex++;
             eventMesg.fields[fieldIndex].subfields.Add(new Subfield("FitnessEquipmentState", 0, 1f, 0f, ""));
             eventMesg.fields[fieldIndex].subfields[subfieldIndex].AddMap(0, 27);
             subfieldIndex++;
             eventMesg.fields[fieldIndex].subfields.Add(new Subfield("SportPoint", 134, 1f, 0f, ""));
             eventMesg.fields[fieldIndex].subfields[subfieldIndex].AddMap(0, 33);
             eventMesg.fields[fieldIndex].subfields[subfieldIndex].AddComponent(new FieldComponent(7, false, 16, 1f, 0f)); // score
             eventMesg.fields[fieldIndex].subfields[subfieldIndex].AddComponent(new FieldComponent(8, false, 16, 1f, 0f)); // opponent_score
             subfieldIndex++;
             eventMesg.fields[fieldIndex].subfields.Add(new Subfield("GearChangeData", 134, 1f, 0f, ""));
             eventMesg.fields[fieldIndex].subfields[subfieldIndex].AddMap(0, 42);
             eventMesg.fields[fieldIndex].subfields[subfieldIndex].AddMap(0, 43);
             eventMesg.fields[fieldIndex].subfields[subfieldIndex].AddComponent(new FieldComponent(11, false, 8, 1f, 0f)); // rear_gear_num
             eventMesg.fields[fieldIndex].subfields[subfieldIndex].AddComponent(new FieldComponent(12, false, 8, 1f, 0f)); // rear_gear
             eventMesg.fields[fieldIndex].subfields[subfieldIndex].AddComponent(new FieldComponent(9, false, 8, 1f, 0f)); // front_gear_num
             eventMesg.fields[fieldIndex].subfields[subfieldIndex].AddComponent(new FieldComponent(10, false, 8, 1f, 0f)); // front_gear
             subfieldIndex++;
             eventMesg.fields[fieldIndex].subfields.Add(new Subfield("RiderPosition", 0, 1f, 0f, ""));
             eventMesg.fields[fieldIndex].subfields[subfieldIndex].AddMap(0, 44);
             subfieldIndex++;
             eventMesg.fields[fieldIndex].subfields.Add(new Subfield("CommTimeout", 132, 1f, 0f, ""));
             eventMesg.fields[fieldIndex].subfields[subfieldIndex].AddMap(0, 47);
             subfieldIndex++;
             fieldIndex++;
             eventMesg.SetField(new Field("EventGroup", 4, 2, 1f, 0f, ""));
             fieldIndex++;
             eventMesg.SetField(new Field("Score", 7, 132, 1f, 0f, ""));
             fieldIndex++;
             eventMesg.SetField(new Field("OpponentScore", 8, 132, 1f, 0f, ""));
             fieldIndex++;
             eventMesg.SetField(new Field("FrontGearNum", 9, 10, 1f, 0f, ""));
             fieldIndex++;
             eventMesg.SetField(new Field("FrontGear", 10, 10, 1f, 0f, ""));
             fieldIndex++;
             eventMesg.SetField(new Field("RearGearNum", 11, 10, 1f, 0f, ""));
             fieldIndex++;
             eventMesg.SetField(new Field("RearGear", 12, 10, 1f, 0f, ""));
             fieldIndex++;
             eventMesg.SetField(new Field("DeviceIndex", 13, 2, 1f, 0f, ""));
             fieldIndex++;
             mesgs.Add(eventMesg);
             EventIndex = mesgIndex;
             mesgIndex++;

             // DeviceInfo
             Mesg deviceInfoMesg = new Mesg("DeviceInfo", MesgNum.DeviceInfo);
             fieldIndex = 0;
             deviceInfoMesg.SetField(new Field("Timestamp", 253, 134, 1f, 0f, "s"));
             fieldIndex++;
             deviceInfoMesg.SetField(new Field("DeviceIndex", 0, 2, 1f, 0f, ""));
             fieldIndex++;
             deviceInfoMesg.SetField(new Field("DeviceType", 1, 2, 1f, 0f, ""));
             subfieldIndex = 0;
             deviceInfoMesg.fields[fieldIndex].subfields.Add(new Subfield("AntplusDeviceType", 2, 1f, 0f, ""));
             deviceInfoMesg.fields[fieldIndex].subfields[subfieldIndex].AddMap(25, 1);
             subfieldIndex++;
             deviceInfoMesg.fields[fieldIndex].subfields.Add(new Subfield("AntDeviceType", 2, 1f, 0f, ""));
             deviceInfoMesg.fields[fieldIndex].subfields[subfieldIndex].AddMap(25, 0);
             subfieldIndex++;
             fieldIndex++;
             deviceInfoMesg.SetField(new Field("Manufacturer", 2, 132, 1f, 0f, ""));
             fieldIndex++;
             deviceInfoMesg.SetField(new Field("SerialNumber", 3, 140, 1f, 0f, ""));
             fieldIndex++;
             deviceInfoMesg.SetField(new Field("Product", 4, 132, 1f, 0f, ""));
             subfieldIndex = 0;
             deviceInfoMesg.fields[fieldIndex].subfields.Add(new Subfield("GarminProduct", 132, 1f, 0f, ""));
             deviceInfoMesg.fields[fieldIndex].subfields[subfieldIndex].AddMap(2, 1);
             deviceInfoMesg.fields[fieldIndex].subfields[subfieldIndex].AddMap(2, 15);
             deviceInfoMesg.fields[fieldIndex].subfields[subfieldIndex].AddMap(2, 13);
             subfieldIndex++;
             fieldIndex++;
             deviceInfoMesg.SetField(new Field("SoftwareVersion", 5, 132, 100f, 0f, ""));
             fieldIndex++;
             deviceInfoMesg.SetField(new Field("HardwareVersion", 6, 2, 1f, 0f, ""));
             fieldIndex++;
             deviceInfoMesg.SetField(new Field("CumOperatingTime", 7, 134, 1f, 0f, "s"));
             fieldIndex++;
             deviceInfoMesg.SetField(new Field("BatteryVoltage", 10, 132, 256f, 0f, "V"));
             fieldIndex++;
             deviceInfoMesg.SetField(new Field("BatteryStatus", 11, 2, 1f, 0f, ""));
             fieldIndex++;
             deviceInfoMesg.SetField(new Field("SensorPosition", 18, 0, 1f, 0f, ""));
             fieldIndex++;
             deviceInfoMesg.SetField(new Field("Descriptor", 19, 7, 1f, 0f, ""));
             fieldIndex++;
             deviceInfoMesg.SetField(new Field("AntTransmissionType", 20, 10, 1f, 0f, ""));
             fieldIndex++;
             deviceInfoMesg.SetField(new Field("AntDeviceNumber", 21, 139, 1f, 0f, ""));
             fieldIndex++;
             deviceInfoMesg.SetField(new Field("AntNetwork", 22, 0, 1f, 0f, ""));
             fieldIndex++;
             deviceInfoMesg.SetField(new Field("SourceType", 25, 0, 1f, 0f, ""));
             fieldIndex++;
             deviceInfoMesg.SetField(new Field("ProductName", 27, 7, 1f, 0f, ""));
             fieldIndex++;
             mesgs.Add(deviceInfoMesg);
             DeviceInfoIndex = mesgIndex;
             mesgIndex++;

             // TrainingFile
             Mesg trainingFileMesg = new Mesg("TrainingFile", MesgNum.TrainingFile);
             fieldIndex = 0;
             trainingFileMesg.SetField(new Field("Timestamp", 253, 134, 1f, 0f, ""));
             fieldIndex++;
             trainingFileMesg.SetField(new Field("Type", 0, 0, 1f, 0f, ""));
             fieldIndex++;
             trainingFileMesg.SetField(new Field("Manufacturer", 1, 132, 1f, 0f, ""));
             fieldIndex++;
             trainingFileMesg.SetField(new Field("Product", 2, 132, 1f, 0f, ""));
             subfieldIndex = 0;
             trainingFileMesg.fields[fieldIndex].subfields.Add(new Subfield("GarminProduct", 132, 1f, 0f, ""));
             trainingFileMesg.fields[fieldIndex].subfields[subfieldIndex].AddMap(1, 1);
             trainingFileMesg.fields[fieldIndex].subfields[subfieldIndex].AddMap(1, 15);
             trainingFileMesg.fields[fieldIndex].subfields[subfieldIndex].AddMap(1, 13);
             subfieldIndex++;
             fieldIndex++;
             trainingFileMesg.SetField(new Field("SerialNumber", 3, 140, 1f, 0f, ""));
             fieldIndex++;
             trainingFileMesg.SetField(new Field("TimeCreated", 4, 134, 1f, 0f, ""));
             fieldIndex++;
             mesgs.Add(trainingFileMesg);
             TrainingFileIndex = mesgIndex;
             mesgIndex++;

             // Hrv
             Mesg hrvMesg = new Mesg("Hrv", MesgNum.Hrv);
             fieldIndex = 0;
             hrvMesg.SetField(new Field("Time", 0, 132, 1000f, 0f, "s"));
             fieldIndex++;
             mesgs.Add(hrvMesg);
             HrvIndex = mesgIndex;
             mesgIndex++;

             // CameraEvent
             Mesg cameraEventMesg = new Mesg("CameraEvent", MesgNum.CameraEvent);
             fieldIndex = 0;
             cameraEventMesg.SetField(new Field("Timestamp", 253, 134, 1f, 0f, "s"));
             fieldIndex++;
             cameraEventMesg.SetField(new Field("TimestampMs", 0, 132, 1f, 0f, "ms"));
             fieldIndex++;
             cameraEventMesg.SetField(new Field("CameraEventType", 1, 0, 1f, 0f, ""));
             fieldIndex++;
             cameraEventMesg.SetField(new Field("CameraFileUuid", 2, 7, 1f, 0f, ""));
             fieldIndex++;
             cameraEventMesg.SetField(new Field("CameraOrientation", 3, 0, 1f, 0f, ""));
             fieldIndex++;
             mesgs.Add(cameraEventMesg);
             CameraEventIndex = mesgIndex;
             mesgIndex++;

             // GyroscopeData
             Mesg gyroscopeDataMesg = new Mesg("GyroscopeData", MesgNum.GyroscopeData);
             fieldIndex = 0;
             gyroscopeDataMesg.SetField(new Field("Timestamp", 253, 134, 1f, 0f, "s"));
             fieldIndex++;
             gyroscopeDataMesg.SetField(new Field("TimestampMs", 0, 132, 1f, 0f, "ms"));
             fieldIndex++;
             gyroscopeDataMesg.SetField(new Field("SampleTimeOffset", 1, 132, 1f, 0f, "ms"));
             fieldIndex++;
             gyroscopeDataMesg.SetField(new Field("GyroX", 2, 132, 1f, 0f, "counts"));
             fieldIndex++;
             gyroscopeDataMesg.SetField(new Field("GyroY", 3, 132, 1f, 0f, "counts"));
             fieldIndex++;
             gyroscopeDataMesg.SetField(new Field("GyroZ", 4, 132, 1f, 0f, "counts"));
             fieldIndex++;
             gyroscopeDataMesg.SetField(new Field("CalibratedGyroX", 5, 136, 1f, 0f, "deg/s"));
             fieldIndex++;
             gyroscopeDataMesg.SetField(new Field("CalibratedGyroY", 6, 136, 1f, 0f, "deg/s"));
             fieldIndex++;
             gyroscopeDataMesg.SetField(new Field("CalibratedGyroZ", 7, 136, 1f, 0f, "deg/s"));
             fieldIndex++;
             mesgs.Add(gyroscopeDataMesg);
             GyroscopeDataIndex = mesgIndex;
             mesgIndex++;

             // AccelerometerData
             Mesg accelerometerDataMesg = new Mesg("AccelerometerData", MesgNum.AccelerometerData);
             fieldIndex = 0;
             accelerometerDataMesg.SetField(new Field("Timestamp", 253, 134, 1f, 0f, "s"));
             fieldIndex++;
             accelerometerDataMesg.SetField(new Field("TimestampMs", 0, 132, 1f, 0f, "ms"));
             fieldIndex++;
             accelerometerDataMesg.SetField(new Field("SampleTimeOffset", 1, 132, 1f, 0f, "ms"));
             fieldIndex++;
             accelerometerDataMesg.SetField(new Field("AccelX", 2, 132, 1f, 0f, "counts"));
             fieldIndex++;
             accelerometerDataMesg.SetField(new Field("AccelY", 3, 132, 1f, 0f, "counts"));
             fieldIndex++;
             accelerometerDataMesg.SetField(new Field("AccelZ", 4, 132, 1f, 0f, "counts"));
             fieldIndex++;
             accelerometerDataMesg.SetField(new Field("CalibratedAccelX", 5, 136, 1f, 0f, "g"));
             fieldIndex++;
             accelerometerDataMesg.SetField(new Field("CalibratedAccelY", 6, 136, 1f, 0f, "g"));
             fieldIndex++;
             accelerometerDataMesg.SetField(new Field("CalibratedAccelZ", 7, 136, 1f, 0f, "g"));
             fieldIndex++;
             mesgs.Add(accelerometerDataMesg);
             AccelerometerDataIndex = mesgIndex;
             mesgIndex++;

             // ThreeDSensorCalibration
             Mesg threeDSensorCalibrationMesg = new Mesg("ThreeDSensorCalibration", MesgNum.ThreeDSensorCalibration);
             fieldIndex = 0;
             threeDSensorCalibrationMesg.SetField(new Field("Timestamp", 253, 134, 1f, 0f, "s"));
             fieldIndex++;
             threeDSensorCalibrationMesg.SetField(new Field("SensorType", 0, 0, 1f, 0f, ""));
             fieldIndex++;
             threeDSensorCalibrationMesg.SetField(new Field("CalibrationFactor", 1, 134, 1f, 0f, ""));
             subfieldIndex = 0;
             threeDSensorCalibrationMesg.fields[fieldIndex].subfields.Add(new Subfield("AccelCalFactor", 134, 1f, 0f, "g"));
             threeDSensorCalibrationMesg.fields[fieldIndex].subfields[subfieldIndex].AddMap(0, 0);
             subfieldIndex++;
             threeDSensorCalibrationMesg.fields[fieldIndex].subfields.Add(new Subfield("GyroCalFactor", 134, 1f, 0f, "deg/s"));
             threeDSensorCalibrationMesg.fields[fieldIndex].subfields[subfieldIndex].AddMap(0, 1);
             subfieldIndex++;
             fieldIndex++;
             threeDSensorCalibrationMesg.SetField(new Field("CalibrationDivisor", 2, 134, 1f, 0f, "counts"));
             fieldIndex++;
             threeDSensorCalibrationMesg.SetField(new Field("LevelShift", 3, 134, 1f, 0f, ""));
             fieldIndex++;
             threeDSensorCalibrationMesg.SetField(new Field("OffsetCal", 4, 133, 1f, 0f, ""));
             fieldIndex++;
             threeDSensorCalibrationMesg.SetField(new Field("OrientationMatrix", 5, 133, 65535f, 0f, ""));
             fieldIndex++;
             mesgs.Add(threeDSensorCalibrationMesg);
             ThreeDSensorCalibrationIndex = mesgIndex;
             mesgIndex++;

             // VideoFrame
             Mesg videoFrameMesg = new Mesg("VideoFrame", MesgNum.VideoFrame);
             fieldIndex = 0;
             videoFrameMesg.SetField(new Field("Timestamp", 253, 134, 1f, 0f, "s"));
             fieldIndex++;
             videoFrameMesg.SetField(new Field("TimestampMs", 0, 132, 1f, 0f, "ms"));
             fieldIndex++;
             videoFrameMesg.SetField(new Field("FrameNumber", 1, 134, 1f, 0f, ""));
             fieldIndex++;
             mesgs.Add(videoFrameMesg);
             VideoFrameIndex = mesgIndex;
             mesgIndex++;

             // ObdiiData
             Mesg obdiiDataMesg = new Mesg("ObdiiData", MesgNum.ObdiiData);
             fieldIndex = 0;
             obdiiDataMesg.SetField(new Field("Timestamp", 253, 134, 1f, 0f, "s"));
             fieldIndex++;
             obdiiDataMesg.SetField(new Field("TimestampMs", 0, 132, 1f, 0f, "ms"));
             fieldIndex++;
             obdiiDataMesg.SetField(new Field("TimeOffset", 1, 132, 1f, 0f, "ms"));
             fieldIndex++;
             obdiiDataMesg.SetField(new Field("Pid", 2, 13, 1f, 0f, ""));
             fieldIndex++;
             obdiiDataMesg.SetField(new Field("RawData", 3, 13, 1f, 0f, ""));
             fieldIndex++;
             obdiiDataMesg.SetField(new Field("PidDataSize", 4, 2, 1f, 0f, ""));
             fieldIndex++;
             obdiiDataMesg.SetField(new Field("SystemTime", 5, 134, 1f, 0f, ""));
             fieldIndex++;
             obdiiDataMesg.SetField(new Field("StartTimestamp", 6, 134, 1f, 0f, ""));
             fieldIndex++;
             obdiiDataMesg.SetField(new Field("StartTimestampMs", 7, 132, 1f, 0f, "ms"));
             fieldIndex++;
             mesgs.Add(obdiiDataMesg);
             ObdiiDataIndex = mesgIndex;
             mesgIndex++;

             // NmeaSentence
             Mesg nmeaSentenceMesg = new Mesg("NmeaSentence", MesgNum.NmeaSentence);
             fieldIndex = 0;
             nmeaSentenceMesg.SetField(new Field("Timestamp", 253, 134, 1f, 0f, "s"));
             fieldIndex++;
             nmeaSentenceMesg.SetField(new Field("TimestampMs", 0, 132, 1f, 0f, "ms"));
             fieldIndex++;
             nmeaSentenceMesg.SetField(new Field("Sentence", 1, 7, 1f, 0f, ""));
             fieldIndex++;
             mesgs.Add(nmeaSentenceMesg);
             NmeaSentenceIndex = mesgIndex;
             mesgIndex++;

             // AviationAttitude
             Mesg aviationAttitudeMesg = new Mesg("AviationAttitude", MesgNum.AviationAttitude);
             fieldIndex = 0;
             aviationAttitudeMesg.SetField(new Field("Timestamp", 253, 134, 1f, 0f, "s"));
             fieldIndex++;
             aviationAttitudeMesg.SetField(new Field("TimestampMs", 0, 132, 1f, 0f, "ms"));
             fieldIndex++;
             aviationAttitudeMesg.SetField(new Field("SystemTime", 1, 134, 1f, 0f, "ms"));
             fieldIndex++;
             aviationAttitudeMesg.SetField(new Field("Pitch", 2, 131, 10430.38f, 0f, "radians"));
             fieldIndex++;
             aviationAttitudeMesg.SetField(new Field("Roll", 3, 131, 10430.38f, 0f, "radians"));
             fieldIndex++;
             aviationAttitudeMesg.SetField(new Field("AccelLateral", 4, 131, 100f, 0f, "m/s^2"));
             fieldIndex++;
             aviationAttitudeMesg.SetField(new Field("AccelNormal", 5, 131, 100f, 0f, "m/s^2"));
             fieldIndex++;
             aviationAttitudeMesg.SetField(new Field("TurnRate", 6, 131, 1024f, 0f, "radians/second"));
             fieldIndex++;
             aviationAttitudeMesg.SetField(new Field("Stage", 7, 0, 1f, 0f, ""));
             fieldIndex++;
             aviationAttitudeMesg.SetField(new Field("AttitudeStageComplete", 8, 2, 1f, 0f, "%"));
             fieldIndex++;
             aviationAttitudeMesg.SetField(new Field("Track", 9, 132, 10430.38f, 0f, "radians"));
             fieldIndex++;
             aviationAttitudeMesg.SetField(new Field("Validity", 10, 132, 1f, 0f, ""));
             fieldIndex++;
             mesgs.Add(aviationAttitudeMesg);
             AviationAttitudeIndex = mesgIndex;
             mesgIndex++;

             // Video
             Mesg videoMesg = new Mesg("Video", MesgNum.Video);
             fieldIndex = 0;
             videoMesg.SetField(new Field("Url", 0, 7, 1f, 0f, ""));
             fieldIndex++;
             videoMesg.SetField(new Field("HostingProvider", 1, 7, 1f, 0f, ""));
             fieldIndex++;
             videoMesg.SetField(new Field("Duration", 2, 134, 1f, 0f, "ms"));
             fieldIndex++;
             mesgs.Add(videoMesg);
             VideoIndex = mesgIndex;
             mesgIndex++;

             // VideoTitle
             Mesg videoTitleMesg = new Mesg("VideoTitle", MesgNum.VideoTitle);
             fieldIndex = 0;
             videoTitleMesg.SetField(new Field("MessageIndex", 254, 132, 1f, 0f, ""));
             fieldIndex++;
             videoTitleMesg.SetField(new Field("MessageCount", 0, 132, 1f, 0f, ""));
             fieldIndex++;
             videoTitleMesg.SetField(new Field("Text", 1, 7, 1f, 0f, ""));
             fieldIndex++;
             mesgs.Add(videoTitleMesg);
             VideoTitleIndex = mesgIndex;
             mesgIndex++;

             // VideoDescription
             Mesg videoDescriptionMesg = new Mesg("VideoDescription", MesgNum.VideoDescription);
             fieldIndex = 0;
             videoDescriptionMesg.SetField(new Field("MessageIndex", 254, 132, 1f, 0f, ""));
             fieldIndex++;
             videoDescriptionMesg.SetField(new Field("MessageCount", 0, 132, 1f, 0f, ""));
             fieldIndex++;
             videoDescriptionMesg.SetField(new Field("Text", 1, 7, 1f, 0f, ""));
             fieldIndex++;
             mesgs.Add(videoDescriptionMesg);
             VideoDescriptionIndex = mesgIndex;
             mesgIndex++;

             // VideoClip
             Mesg videoClipMesg = new Mesg("VideoClip", MesgNum.VideoClip);
             fieldIndex = 0;
             videoClipMesg.SetField(new Field("ClipNumber", 0, 132, 1f, 0f, ""));
             fieldIndex++;
             videoClipMesg.SetField(new Field("StartTimestamp", 1, 134, 1f, 0f, ""));
             fieldIndex++;
             videoClipMesg.SetField(new Field("StartTimestampMs", 2, 132, 1f, 0f, ""));
             fieldIndex++;
             videoClipMesg.SetField(new Field("EndTimestamp", 3, 134, 1f, 0f, ""));
             fieldIndex++;
             videoClipMesg.SetField(new Field("EndTimestampMs", 4, 132, 1f, 0f, ""));
             fieldIndex++;
             videoClipMesg.SetField(new Field("ClipStart", 6, 134, 1f, 0f, "ms"));
             fieldIndex++;
             videoClipMesg.SetField(new Field("ClipEnd", 7, 134, 1f, 0f, "ms"));
             fieldIndex++;
             mesgs.Add(videoClipMesg);
             VideoClipIndex = mesgIndex;
             mesgIndex++;

             // Course
             Mesg courseMesg = new Mesg("Course", MesgNum.Course);
             fieldIndex = 0;
             courseMesg.SetField(new Field("Sport", 4, 0, 1f, 0f, ""));
             fieldIndex++;
             courseMesg.SetField(new Field("Name", 5, 7, 1f, 0f, ""));
             fieldIndex++;
             courseMesg.SetField(new Field("Capabilities", 6, 140, 1f, 0f, ""));
             fieldIndex++;
             mesgs.Add(courseMesg);
             CourseIndex = mesgIndex;
             mesgIndex++;

             // CoursePoint
             Mesg coursePointMesg = new Mesg("CoursePoint", MesgNum.CoursePoint);
             fieldIndex = 0;
             coursePointMesg.SetField(new Field("MessageIndex", 254, 132, 1f, 0f, ""));
             fieldIndex++;
             coursePointMesg.SetField(new Field("Timestamp", 1, 134, 1f, 0f, ""));
             fieldIndex++;
             coursePointMesg.SetField(new Field("PositionLat", 2, 133, 1f, 0f, "semicircles"));
             fieldIndex++;
             coursePointMesg.SetField(new Field("PositionLong", 3, 133, 1f, 0f, "semicircles"));
             fieldIndex++;
             coursePointMesg.SetField(new Field("Distance", 4, 134, 100f, 0f, "m"));
             fieldIndex++;
             coursePointMesg.SetField(new Field("Type", 5, 0, 1f, 0f, ""));
             fieldIndex++;
             coursePointMesg.SetField(new Field("Name", 6, 7, 1f, 0f, ""));
             fieldIndex++;
             coursePointMesg.SetField(new Field("Favorite", 8, 0, 1f, 0f, ""));
             fieldIndex++;
             mesgs.Add(coursePointMesg);
             CoursePointIndex = mesgIndex;
             mesgIndex++;

             // SegmentId
             Mesg segmentIdMesg = new Mesg("SegmentId", MesgNum.SegmentId);
             fieldIndex = 0;
             segmentIdMesg.SetField(new Field("Name", 0, 7, 1f, 0f, ""));
             fieldIndex++;
             segmentIdMesg.SetField(new Field("Uuid", 1, 7, 1f, 0f, ""));
             fieldIndex++;
             segmentIdMesg.SetField(new Field("Sport", 2, 0, 1f, 0f, ""));
             fieldIndex++;
             segmentIdMesg.SetField(new Field("Enabled", 3, 0, 1f, 0f, ""));
             fieldIndex++;
             segmentIdMesg.SetField(new Field("UserProfilePrimaryKey", 4, 134, 1f, 0f, ""));
             fieldIndex++;
             segmentIdMesg.SetField(new Field("DeviceId", 5, 134, 1f, 0f, ""));
             fieldIndex++;
             segmentIdMesg.SetField(new Field("DefaultRaceLeader", 6, 2, 1f, 0f, ""));
             fieldIndex++;
             segmentIdMesg.SetField(new Field("DeleteStatus", 7, 0, 1f, 0f, ""));
             fieldIndex++;
             segmentIdMesg.SetField(new Field("SelectionType", 8, 0, 1f, 0f, ""));
             fieldIndex++;
             mesgs.Add(segmentIdMesg);
             SegmentIdIndex = mesgIndex;
             mesgIndex++;

             // SegmentLeaderboardEntry
             Mesg segmentLeaderboardEntryMesg = new Mesg("SegmentLeaderboardEntry", MesgNum.SegmentLeaderboardEntry);
             fieldIndex = 0;
             segmentLeaderboardEntryMesg.SetField(new Field("MessageIndex", 254, 132, 1f, 0f, ""));
             fieldIndex++;
             segmentLeaderboardEntryMesg.SetField(new Field("Name", 0, 7, 1f, 0f, ""));
             fieldIndex++;
             segmentLeaderboardEntryMesg.SetField(new Field("Type", 1, 0, 1f, 0f, ""));
             fieldIndex++;
             segmentLeaderboardEntryMesg.SetField(new Field("GroupPrimaryKey", 2, 134, 1f, 0f, ""));
             fieldIndex++;
             segmentLeaderboardEntryMesg.SetField(new Field("ActivityId", 3, 134, 1f, 0f, ""));
             fieldIndex++;
             segmentLeaderboardEntryMesg.SetField(new Field("SegmentTime", 4, 134, 1000f, 0f, "s"));
             fieldIndex++;
             segmentLeaderboardEntryMesg.SetField(new Field("ActivityIdString", 5, 7, 1f, 0f, ""));
             fieldIndex++;
             mesgs.Add(segmentLeaderboardEntryMesg);
             SegmentLeaderboardEntryIndex = mesgIndex;
             mesgIndex++;

             // SegmentPoint
             Mesg segmentPointMesg = new Mesg("SegmentPoint", MesgNum.SegmentPoint);
             fieldIndex = 0;
             segmentPointMesg.SetField(new Field("MessageIndex", 254, 132, 1f, 0f, ""));
             fieldIndex++;
             segmentPointMesg.SetField(new Field("PositionLat", 1, 133, 1f, 0f, "semicircles"));
             fieldIndex++;
             segmentPointMesg.SetField(new Field("PositionLong", 2, 133, 1f, 0f, "semicircles"));
             fieldIndex++;
             segmentPointMesg.SetField(new Field("Distance", 3, 134, 100f, 0f, "m"));
             fieldIndex++;
             segmentPointMesg.SetField(new Field("Altitude", 4, 132, 5f, 500f, "m"));
             fieldIndex++;
             segmentPointMesg.SetField(new Field("LeaderTime", 5, 134, 1000f, 0f, "s"));
             fieldIndex++;
             mesgs.Add(segmentPointMesg);
             SegmentPointIndex = mesgIndex;
             mesgIndex++;

             // SegmentLap
             Mesg segmentLapMesg = new Mesg("SegmentLap", MesgNum.SegmentLap);
             fieldIndex = 0;
             segmentLapMesg.SetField(new Field("MessageIndex", 254, 132, 1f, 0f, ""));
             fieldIndex++;
             segmentLapMesg.SetField(new Field("Timestamp", 253, 134, 1f, 0f, "s"));
             fieldIndex++;
             segmentLapMesg.SetField(new Field("Event", 0, 0, 1f, 0f, ""));
             fieldIndex++;
             segmentLapMesg.SetField(new Field("EventType", 1, 0, 1f, 0f, ""));
             fieldIndex++;
             segmentLapMesg.SetField(new Field("StartTime", 2, 134, 1f, 0f, ""));
             fieldIndex++;
             segmentLapMesg.SetField(new Field("StartPositionLat", 3, 133, 1f, 0f, "semicircles"));
             fieldIndex++;
             segmentLapMesg.SetField(new Field("StartPositionLong", 4, 133, 1f, 0f, "semicircles"));
             fieldIndex++;
             segmentLapMesg.SetField(new Field("EndPositionLat", 5, 133, 1f, 0f, "semicircles"));
             fieldIndex++;
             segmentLapMesg.SetField(new Field("EndPositionLong", 6, 133, 1f, 0f, "semicircles"));
             fieldIndex++;
             segmentLapMesg.SetField(new Field("TotalElapsedTime", 7, 134, 1000f, 0f, "s"));
             fieldIndex++;
             segmentLapMesg.SetField(new Field("TotalTimerTime", 8, 134, 1000f, 0f, "s"));
             fieldIndex++;
             segmentLapMesg.SetField(new Field("TotalDistance", 9, 134, 100f, 0f, "m"));
             fieldIndex++;
             segmentLapMesg.SetField(new Field("TotalCycles", 10, 134, 1f, 0f, "cycles"));
             subfieldIndex = 0;
             segmentLapMesg.fields[fieldIndex].subfields.Add(new Subfield("TotalStrokes", 134, 1f, 0f, "strokes"));
             segmentLapMesg.fields[fieldIndex].subfields[subfieldIndex].AddMap(23, 2);
             subfieldIndex++;
             fieldIndex++;
             segmentLapMesg.SetField(new Field("TotalCalories", 11, 132, 1f, 0f, "kcal"));
             fieldIndex++;
             segmentLapMesg.SetField(new Field("TotalFatCalories", 12, 132, 1f, 0f, "kcal"));
             fieldIndex++;
             segmentLapMesg.SetField(new Field("AvgSpeed", 13, 132, 1000f, 0f, "m/s"));
             fieldIndex++;
             segmentLapMesg.SetField(new Field("MaxSpeed", 14, 132, 1000f, 0f, "m/s"));
             fieldIndex++;
             segmentLapMesg.SetField(new Field("AvgHeartRate", 15, 2, 1f, 0f, "bpm"));
             fieldIndex++;
             segmentLapMesg.SetField(new Field("MaxHeartRate", 16, 2, 1f, 0f, "bpm"));
             fieldIndex++;
             segmentLapMesg.SetField(new Field("AvgCadence", 17, 2, 1f, 0f, "rpm"));
             fieldIndex++;
             segmentLapMesg.SetField(new Field("MaxCadence", 18, 2, 1f, 0f, "rpm"));
             fieldIndex++;
             segmentLapMesg.SetField(new Field("AvgPower", 19, 132, 1f, 0f, "watts"));
             fieldIndex++;
             segmentLapMesg.SetField(new Field("MaxPower", 20, 132, 1f, 0f, "watts"));
             fieldIndex++;
             segmentLapMesg.SetField(new Field("TotalAscent", 21, 132, 1f, 0f, "m"));
             fieldIndex++;
             segmentLapMesg.SetField(new Field("TotalDescent", 22, 132, 1f, 0f, "m"));
             fieldIndex++;
             segmentLapMesg.SetField(new Field("Sport", 23, 0, 1f, 0f, ""));
             fieldIndex++;
             segmentLapMesg.SetField(new Field("EventGroup", 24, 2, 1f, 0f, ""));
             fieldIndex++;
             segmentLapMesg.SetField(new Field("NecLat", 25, 133, 1f, 0f, "semicircles"));
             fieldIndex++;
             segmentLapMesg.SetField(new Field("NecLong", 26, 133, 1f, 0f, "semicircles"));
             fieldIndex++;
             segmentLapMesg.SetField(new Field("SwcLat", 27, 133, 1f, 0f, "semicircles"));
             fieldIndex++;
             segmentLapMesg.SetField(new Field("SwcLong", 28, 133, 1f, 0f, "semicircles"));
             fieldIndex++;
             segmentLapMesg.SetField(new Field("Name", 29, 7, 1f, 0f, ""));
             fieldIndex++;
             segmentLapMesg.SetField(new Field("NormalizedPower", 30, 132, 1f, 0f, "watts"));
             fieldIndex++;
             segmentLapMesg.SetField(new Field("LeftRightBalance", 31, 132, 1f, 0f, ""));
             fieldIndex++;
             segmentLapMesg.SetField(new Field("SubSport", 32, 0, 1f, 0f, ""));
             fieldIndex++;
             segmentLapMesg.SetField(new Field("TotalWork", 33, 134, 1f, 0f, "J"));
             fieldIndex++;
             segmentLapMesg.SetField(new Field("AvgAltitude", 34, 132, 5f, 500f, "m"));
             fieldIndex++;
             segmentLapMesg.SetField(new Field("MaxAltitude", 35, 132, 5f, 500f, "m"));
             fieldIndex++;
             segmentLapMesg.SetField(new Field("GpsAccuracy", 36, 2, 1f, 0f, "m"));
             fieldIndex++;
             segmentLapMesg.SetField(new Field("AvgGrade", 37, 131, 100f, 0f, "%"));
             fieldIndex++;
             segmentLapMesg.SetField(new Field("AvgPosGrade", 38, 131, 100f, 0f, "%"));
             fieldIndex++;
             segmentLapMesg.SetField(new Field("AvgNegGrade", 39, 131, 100f, 0f, "%"));
             fieldIndex++;
             segmentLapMesg.SetField(new Field("MaxPosGrade", 40, 131, 100f, 0f, "%"));
             fieldIndex++;
             segmentLapMesg.SetField(new Field("MaxNegGrade", 41, 131, 100f, 0f, "%"));
             fieldIndex++;
             segmentLapMesg.SetField(new Field("AvgTemperature", 42, 1, 1f, 0f, "C"));
             fieldIndex++;
             segmentLapMesg.SetField(new Field("MaxTemperature", 43, 1, 1f, 0f, "C"));
             fieldIndex++;
             segmentLapMesg.SetField(new Field("TotalMovingTime", 44, 134, 1000f, 0f, "s"));
             fieldIndex++;
             segmentLapMesg.SetField(new Field("AvgPosVerticalSpeed", 45, 131, 1000f, 0f, "m/s"));
             fieldIndex++;
             segmentLapMesg.SetField(new Field("AvgNegVerticalSpeed", 46, 131, 1000f, 0f, "m/s"));
             fieldIndex++;
             segmentLapMesg.SetField(new Field("MaxPosVerticalSpeed", 47, 131, 1000f, 0f, "m/s"));
             fieldIndex++;
             segmentLapMesg.SetField(new Field("MaxNegVerticalSpeed", 48, 131, 1000f, 0f, "m/s"));
             fieldIndex++;
             segmentLapMesg.SetField(new Field("TimeInHrZone", 49, 134, 1000f, 0f, "s"));
             fieldIndex++;
             segmentLapMesg.SetField(new Field("TimeInSpeedZone", 50, 134, 1000f, 0f, "s"));
             fieldIndex++;
             segmentLapMesg.SetField(new Field("TimeInCadenceZone", 51, 134, 1000f, 0f, "s"));
             fieldIndex++;
             segmentLapMesg.SetField(new Field("TimeInPowerZone", 52, 134, 1000f, 0f, "s"));
             fieldIndex++;
             segmentLapMesg.SetField(new Field("RepetitionNum", 53, 132, 1f, 0f, ""));
             fieldIndex++;
             segmentLapMesg.SetField(new Field("MinAltitude", 54, 132, 5f, 500f, "m"));
             fieldIndex++;
             segmentLapMesg.SetField(new Field("MinHeartRate", 55, 2, 1f, 0f, "bpm"));
             fieldIndex++;
             segmentLapMesg.SetField(new Field("ActiveTime", 56, 134, 1000f, 0f, "s"));
             fieldIndex++;
             segmentLapMesg.SetField(new Field("WktStepIndex", 57, 132, 1f, 0f, ""));
             fieldIndex++;
             segmentLapMesg.SetField(new Field("SportEvent", 58, 0, 1f, 0f, ""));
             fieldIndex++;
             segmentLapMesg.SetField(new Field("AvgLeftTorqueEffectiveness", 59, 2, 2f, 0f, "percent"));
             fieldIndex++;
             segmentLapMesg.SetField(new Field("AvgRightTorqueEffectiveness", 60, 2, 2f, 0f, "percent"));
             fieldIndex++;
             segmentLapMesg.SetField(new Field("AvgLeftPedalSmoothness", 61, 2, 2f, 0f, "percent"));
             fieldIndex++;
             segmentLapMesg.SetField(new Field("AvgRightPedalSmoothness", 62, 2, 2f, 0f, "percent"));
             fieldIndex++;
             segmentLapMesg.SetField(new Field("AvgCombinedPedalSmoothness", 63, 2, 2f, 0f, "percent"));
             fieldIndex++;
             segmentLapMesg.SetField(new Field("Status", 64, 0, 1f, 0f, ""));
             fieldIndex++;
             segmentLapMesg.SetField(new Field("Uuid", 65, 7, 1f, 0f, ""));
             fieldIndex++;
             segmentLapMesg.SetField(new Field("AvgFractionalCadence", 66, 2, 128f, 0f, "rpm"));
             fieldIndex++;
             segmentLapMesg.SetField(new Field("MaxFractionalCadence", 67, 2, 128f, 0f, "rpm"));
             fieldIndex++;
             segmentLapMesg.SetField(new Field("TotalFractionalCycles", 68, 2, 128f, 0f, "cycles"));
             fieldIndex++;
             segmentLapMesg.SetField(new Field("FrontGearShiftCount", 69, 132, 1f, 0f, ""));
             fieldIndex++;
             segmentLapMesg.SetField(new Field("RearGearShiftCount", 70, 132, 1f, 0f, ""));
             fieldIndex++;
             segmentLapMesg.SetField(new Field("TimeStanding", 71, 134, 1000f, 0f, "s"));
             fieldIndex++;
             segmentLapMesg.SetField(new Field("StandCount", 72, 132, 1f, 0f, ""));
             fieldIndex++;
             segmentLapMesg.SetField(new Field("AvgLeftPco", 73, 1, 1f, 0f, "mm"));
             fieldIndex++;
             segmentLapMesg.SetField(new Field("AvgRightPco", 74, 1, 1f, 0f, "mm"));
             fieldIndex++;
             segmentLapMesg.SetField(new Field("AvgLeftPowerPhase", 75, 2, 0.7111111f, 0f, "degrees"));
             fieldIndex++;
             segmentLapMesg.SetField(new Field("AvgLeftPowerPhasePeak", 76, 2, 0.7111111f, 0f, "degrees"));
             fieldIndex++;
             segmentLapMesg.SetField(new Field("AvgRightPowerPhase", 77, 2, 0.7111111f, 0f, "degrees"));
             fieldIndex++;
             segmentLapMesg.SetField(new Field("AvgRightPowerPhasePeak", 78, 2, 0.7111111f, 0f, "degrees"));
             fieldIndex++;
             segmentLapMesg.SetField(new Field("AvgPowerPosition", 79, 132, 1f, 0f, "watts"));
             fieldIndex++;
             segmentLapMesg.SetField(new Field("MaxPowerPosition", 80, 132, 1f, 0f, "watts"));
             fieldIndex++;
             segmentLapMesg.SetField(new Field("AvgCadencePosition", 81, 2, 1f, 0f, "rpm"));
             fieldIndex++;
             segmentLapMesg.SetField(new Field("MaxCadencePosition", 82, 2, 1f, 0f, "rpm"));
             fieldIndex++;
             mesgs.Add(segmentLapMesg);
             SegmentLapIndex = mesgIndex;
             mesgIndex++;

             // SegmentFile
             Mesg segmentFileMesg = new Mesg("SegmentFile", MesgNum.SegmentFile);
             fieldIndex = 0;
             segmentFileMesg.SetField(new Field("MessageIndex", 254, 132, 1f, 0f, ""));
             fieldIndex++;
             segmentFileMesg.SetField(new Field("FileUuid", 1, 7, 1f, 0f, ""));
             fieldIndex++;
             segmentFileMesg.SetField(new Field("Enabled", 3, 0, 1f, 0f, ""));
             fieldIndex++;
             segmentFileMesg.SetField(new Field("UserProfilePrimaryKey", 4, 134, 1f, 0f, ""));
             fieldIndex++;
             segmentFileMesg.SetField(new Field("LeaderType", 7, 0, 1f, 0f, ""));
             fieldIndex++;
             segmentFileMesg.SetField(new Field("LeaderGroupPrimaryKey", 8, 134, 1f, 0f, ""));
             fieldIndex++;
             segmentFileMesg.SetField(new Field("LeaderActivityId", 9, 134, 1f, 0f, ""));
             fieldIndex++;
             segmentFileMesg.SetField(new Field("LeaderActivityIdString", 10, 7, 1f, 0f, ""));
             fieldIndex++;
             mesgs.Add(segmentFileMesg);
             SegmentFileIndex = mesgIndex;
             mesgIndex++;

             // Workout
             Mesg workoutMesg = new Mesg("Workout", MesgNum.Workout);
             fieldIndex = 0;
             workoutMesg.SetField(new Field("Sport", 4, 0, 1f, 0f, ""));
             fieldIndex++;
             workoutMesg.SetField(new Field("Capabilities", 5, 140, 1f, 0f, ""));
             fieldIndex++;
             workoutMesg.SetField(new Field("NumValidSteps", 6, 132, 1f, 0f, ""));
             fieldIndex++;
             workoutMesg.SetField(new Field("WktName", 8, 7, 1f, 0f, ""));
             fieldIndex++;
             mesgs.Add(workoutMesg);
             WorkoutIndex = mesgIndex;
             mesgIndex++;

             // WorkoutStep
             Mesg workoutStepMesg = new Mesg("WorkoutStep", MesgNum.WorkoutStep);
             fieldIndex = 0;
             workoutStepMesg.SetField(new Field("MessageIndex", 254, 132, 1f, 0f, ""));
             fieldIndex++;
             workoutStepMesg.SetField(new Field("WktStepName", 0, 7, 1f, 0f, ""));
             fieldIndex++;
             workoutStepMesg.SetField(new Field("DurationType", 1, 0, 1f, 0f, ""));
             fieldIndex++;
             workoutStepMesg.SetField(new Field("DurationValue", 2, 134, 1f, 0f, ""));
             subfieldIndex = 0;
             workoutStepMesg.fields[fieldIndex].subfields.Add(new Subfield("DurationTime", 134, 1000f, 0f, "s"));
             workoutStepMesg.fields[fieldIndex].subfields[subfieldIndex].AddMap(1, 0);
             workoutStepMesg.fields[fieldIndex].subfields[subfieldIndex].AddMap(1, 28);
             subfieldIndex++;
             workoutStepMesg.fields[fieldIndex].subfields.Add(new Subfield("DurationDistance", 134, 100f, 0f, "m"));
             workoutStepMesg.fields[fieldIndex].subfields[subfieldIndex].AddMap(1, 1);
             subfieldIndex++;
             workoutStepMesg.fields[fieldIndex].subfields.Add(new Subfield("DurationHr", 134, 1f, 0f, "% or bpm"));
             workoutStepMesg.fields[fieldIndex].subfields[subfieldIndex].AddMap(1, 2);
             workoutStepMesg.fields[fieldIndex].subfields[subfieldIndex].AddMap(1, 3);
             subfieldIndex++;
             workoutStepMesg.fields[fieldIndex].subfields.Add(new Subfield("DurationCalories", 134, 1f, 0f, "calories"));
             workoutStepMesg.fields[fieldIndex].subfields[subfieldIndex].AddMap(1, 4);
             subfieldIndex++;
             workoutStepMesg.fields[fieldIndex].subfields.Add(new Subfield("DurationStep", 134, 1f, 0f, ""));
             workoutStepMesg.fields[fieldIndex].subfields[subfieldIndex].AddMap(1, 6);
             workoutStepMesg.fields[fieldIndex].subfields[subfieldIndex].AddMap(1, 7);
             workoutStepMesg.fields[fieldIndex].subfields[subfieldIndex].AddMap(1, 8);
             workoutStepMesg.fields[fieldIndex].subfields[subfieldIndex].AddMap(1, 9);
             workoutStepMesg.fields[fieldIndex].subfields[subfieldIndex].AddMap(1, 10);
             workoutStepMesg.fields[fieldIndex].subfields[subfieldIndex].AddMap(1, 11);
             workoutStepMesg.fields[fieldIndex].subfields[subfieldIndex].AddMap(1, 12);
             workoutStepMesg.fields[fieldIndex].subfields[subfieldIndex].AddMap(1, 13);
             subfieldIndex++;
             workoutStepMesg.fields[fieldIndex].subfields.Add(new Subfield("DurationPower", 134, 1f, 0f, "% or watts"));
             workoutStepMesg.fields[fieldIndex].subfields[subfieldIndex].AddMap(1, 14);
             workoutStepMesg.fields[fieldIndex].subfields[subfieldIndex].AddMap(1, 15);
             subfieldIndex++;
             fieldIndex++;
             workoutStepMesg.SetField(new Field("TargetType", 3, 0, 1f, 0f, ""));
             fieldIndex++;
             workoutStepMesg.SetField(new Field("TargetValue", 4, 134, 1f, 0f, ""));
             subfieldIndex = 0;
             workoutStepMesg.fields[fieldIndex].subfields.Add(new Subfield("TargetHrZone", 134, 1f, 0f, ""));
             workoutStepMesg.fields[fieldIndex].subfields[subfieldIndex].AddMap(3, 1);
             subfieldIndex++;
             workoutStepMesg.fields[fieldIndex].subfields.Add(new Subfield("TargetPowerZone", 134, 1f, 0f, ""));
             workoutStepMesg.fields[fieldIndex].subfields[subfieldIndex].AddMap(3, 4);
             subfieldIndex++;
             workoutStepMesg.fields[fieldIndex].subfields.Add(new Subfield("RepeatSteps", 134, 1f, 0f, ""));
             workoutStepMesg.fields[fieldIndex].subfields[subfieldIndex].AddMap(1, 6);
             subfieldIndex++;
             workoutStepMesg.fields[fieldIndex].subfields.Add(new Subfield("RepeatTime", 134, 1000f, 0f, "s"));
             workoutStepMesg.fields[fieldIndex].subfields[subfieldIndex].AddMap(1, 7);
             subfieldIndex++;
             workoutStepMesg.fields[fieldIndex].subfields.Add(new Subfield("RepeatDistance", 134, 100f, 0f, "m"));
             workoutStepMesg.fields[fieldIndex].subfields[subfieldIndex].AddMap(1, 8);
             subfieldIndex++;
             workoutStepMesg.fields[fieldIndex].subfields.Add(new Subfield("RepeatCalories", 134, 1f, 0f, "calories"));
             workoutStepMesg.fields[fieldIndex].subfields[subfieldIndex].AddMap(1, 9);
             subfieldIndex++;
             workoutStepMesg.fields[fieldIndex].subfields.Add(new Subfield("RepeatHr", 134, 1f, 0f, "% or bpm"));
             workoutStepMesg.fields[fieldIndex].subfields[subfieldIndex].AddMap(1, 10);
             workoutStepMesg.fields[fieldIndex].subfields[subfieldIndex].AddMap(1, 11);
             subfieldIndex++;
             workoutStepMesg.fields[fieldIndex].subfields.Add(new Subfield("RepeatPower", 134, 1f, 0f, "% or watts"));
             workoutStepMesg.fields[fieldIndex].subfields[subfieldIndex].AddMap(1, 12);
             workoutStepMesg.fields[fieldIndex].subfields[subfieldIndex].AddMap(1, 13);
             subfieldIndex++;
             fieldIndex++;
             workoutStepMesg.SetField(new Field("CustomTargetValueLow", 5, 134, 1f, 0f, ""));
             subfieldIndex = 0;
             workoutStepMesg.fields[fieldIndex].subfields.Add(new Subfield("CustomTargetSpeedLow", 134, 1000f, 0f, "m/s"));
             workoutStepMesg.fields[fieldIndex].subfields[subfieldIndex].AddMap(3, 0);
             subfieldIndex++;
             workoutStepMesg.fields[fieldIndex].subfields.Add(new Subfield("CustomTargetHeartRateLow", 134, 1f, 0f, "% or bpm"));
             workoutStepMesg.fields[fieldIndex].subfields[subfieldIndex].AddMap(3, 1);
             subfieldIndex++;
             workoutStepMesg.fields[fieldIndex].subfields.Add(new Subfield("CustomTargetCadenceLow", 134, 1f, 0f, "rpm"));
             workoutStepMesg.fields[fieldIndex].subfields[subfieldIndex].AddMap(3, 3);
             subfieldIndex++;
             workoutStepMesg.fields[fieldIndex].subfields.Add(new Subfield("CustomTargetPowerLow", 134, 1f, 0f, "% or watts"));
             workoutStepMesg.fields[fieldIndex].subfields[subfieldIndex].AddMap(3, 4);
             subfieldIndex++;
             fieldIndex++;
             workoutStepMesg.SetField(new Field("CustomTargetValueHigh", 6, 134, 1f, 0f, ""));
             subfieldIndex = 0;
             workoutStepMesg.fields[fieldIndex].subfields.Add(new Subfield("CustomTargetSpeedHigh", 134, 1000f, 0f, "m/s"));
             workoutStepMesg.fields[fieldIndex].subfields[subfieldIndex].AddMap(3, 0);
             subfieldIndex++;
             workoutStepMesg.fields[fieldIndex].subfields.Add(new Subfield("CustomTargetHeartRateHigh", 134, 1f, 0f, "% or bpm"));
             workoutStepMesg.fields[fieldIndex].subfields[subfieldIndex].AddMap(3, 1);
             subfieldIndex++;
             workoutStepMesg.fields[fieldIndex].subfields.Add(new Subfield("CustomTargetCadenceHigh", 134, 1f, 0f, "rpm"));
             workoutStepMesg.fields[fieldIndex].subfields[subfieldIndex].AddMap(3, 3);
             subfieldIndex++;
             workoutStepMesg.fields[fieldIndex].subfields.Add(new Subfield("CustomTargetPowerHigh", 134, 1f, 0f, "% or watts"));
             workoutStepMesg.fields[fieldIndex].subfields[subfieldIndex].AddMap(3, 4);
             subfieldIndex++;
             fieldIndex++;
             workoutStepMesg.SetField(new Field("Intensity", 7, 0, 1f, 0f, ""));
             fieldIndex++;
             mesgs.Add(workoutStepMesg);
             WorkoutStepIndex = mesgIndex;
             mesgIndex++;

             // Schedule
             Mesg scheduleMesg = new Mesg("Schedule", MesgNum.Schedule);
             fieldIndex = 0;
             scheduleMesg.SetField(new Field("Manufacturer", 0, 132, 1f, 0f, ""));
             fieldIndex++;
             scheduleMesg.SetField(new Field("Product", 1, 132, 1f, 0f, ""));
             subfieldIndex = 0;
             scheduleMesg.fields[fieldIndex].subfields.Add(new Subfield("GarminProduct", 132, 1f, 0f, ""));
             scheduleMesg.fields[fieldIndex].subfields[subfieldIndex].AddMap(0, 1);
             scheduleMesg.fields[fieldIndex].subfields[subfieldIndex].AddMap(0, 15);
             scheduleMesg.fields[fieldIndex].subfields[subfieldIndex].AddMap(0, 13);
             subfieldIndex++;
             fieldIndex++;
             scheduleMesg.SetField(new Field("SerialNumber", 2, 140, 1f, 0f, ""));
             fieldIndex++;
             scheduleMesg.SetField(new Field("TimeCreated", 3, 134, 1f, 0f, ""));
             fieldIndex++;
             scheduleMesg.SetField(new Field("Completed", 4, 0, 1f, 0f, ""));
             fieldIndex++;
             scheduleMesg.SetField(new Field("Type", 5, 0, 1f, 0f, ""));
             fieldIndex++;
             scheduleMesg.SetField(new Field("ScheduledTime", 6, 134, 1f, 0f, ""));
             fieldIndex++;
             mesgs.Add(scheduleMesg);
             ScheduleIndex = mesgIndex;
             mesgIndex++;

             // Totals
             Mesg totalsMesg = new Mesg("Totals", MesgNum.Totals);
             fieldIndex = 0;
             totalsMesg.SetField(new Field("MessageIndex", 254, 132, 1f, 0f, ""));
             fieldIndex++;
             totalsMesg.SetField(new Field("Timestamp", 253, 134, 1f, 0f, "s"));
             fieldIndex++;
             totalsMesg.SetField(new Field("TimerTime", 0, 134, 1f, 0f, "s"));
             fieldIndex++;
             totalsMesg.SetField(new Field("Distance", 1, 134, 1f, 0f, "m"));
             fieldIndex++;
             totalsMesg.SetField(new Field("Calories", 2, 134, 1f, 0f, "kcal"));
             fieldIndex++;
             totalsMesg.SetField(new Field("Sport", 3, 0, 1f, 0f, ""));
             fieldIndex++;
             totalsMesg.SetField(new Field("ElapsedTime", 4, 134, 1f, 0f, "s"));
             fieldIndex++;
             totalsMesg.SetField(new Field("Sessions", 5, 132, 1f, 0f, ""));
             fieldIndex++;
             totalsMesg.SetField(new Field("ActiveTime", 6, 134, 1f, 0f, "s"));
             fieldIndex++;
             totalsMesg.SetField(new Field("SportIndex", 9, 2, 1f, 0f, ""));
             fieldIndex++;
             mesgs.Add(totalsMesg);
             TotalsIndex = mesgIndex;
             mesgIndex++;

             // WeightScale
             Mesg weightScaleMesg = new Mesg("WeightScale", MesgNum.WeightScale);
             fieldIndex = 0;
             weightScaleMesg.SetField(new Field("Timestamp", 253, 134, 1f, 0f, "s"));
             fieldIndex++;
             weightScaleMesg.SetField(new Field("Weight", 0, 132, 100f, 0f, "kg"));
             fieldIndex++;
             weightScaleMesg.SetField(new Field("PercentFat", 1, 132, 100f, 0f, "%"));
             fieldIndex++;
             weightScaleMesg.SetField(new Field("PercentHydration", 2, 132, 100f, 0f, "%"));
             fieldIndex++;
             weightScaleMesg.SetField(new Field("VisceralFatMass", 3, 132, 100f, 0f, "kg"));
             fieldIndex++;
             weightScaleMesg.SetField(new Field("BoneMass", 4, 132, 100f, 0f, "kg"));
             fieldIndex++;
             weightScaleMesg.SetField(new Field("MuscleMass", 5, 132, 100f, 0f, "kg"));
             fieldIndex++;
             weightScaleMesg.SetField(new Field("BasalMet", 7, 132, 4f, 0f, "kcal/day"));
             fieldIndex++;
             weightScaleMesg.SetField(new Field("PhysiqueRating", 8, 2, 1f, 0f, ""));
             fieldIndex++;
             weightScaleMesg.SetField(new Field("ActiveMet", 9, 132, 4f, 0f, "kcal/day"));
             fieldIndex++;
             weightScaleMesg.SetField(new Field("MetabolicAge", 10, 2, 1f, 0f, "years"));
             fieldIndex++;
             weightScaleMesg.SetField(new Field("VisceralFatRating", 11, 2, 1f, 0f, ""));
             fieldIndex++;
             weightScaleMesg.SetField(new Field("UserProfileIndex", 12, 132, 1f, 0f, ""));
             fieldIndex++;
             mesgs.Add(weightScaleMesg);
             WeightScaleIndex = mesgIndex;
             mesgIndex++;

             // BloodPressure
             Mesg bloodPressureMesg = new Mesg("BloodPressure", MesgNum.BloodPressure);
             fieldIndex = 0;
             bloodPressureMesg.SetField(new Field("Timestamp", 253, 134, 1f, 0f, "s"));
             fieldIndex++;
             bloodPressureMesg.SetField(new Field("SystolicPressure", 0, 132, 1f, 0f, "mmHg"));
             fieldIndex++;
             bloodPressureMesg.SetField(new Field("DiastolicPressure", 1, 132, 1f, 0f, "mmHg"));
             fieldIndex++;
             bloodPressureMesg.SetField(new Field("MeanArterialPressure", 2, 132, 1f, 0f, "mmHg"));
             fieldIndex++;
             bloodPressureMesg.SetField(new Field("Map3SampleMean", 3, 132, 1f, 0f, "mmHg"));
             fieldIndex++;
             bloodPressureMesg.SetField(new Field("MapMorningValues", 4, 132, 1f, 0f, "mmHg"));
             fieldIndex++;
             bloodPressureMesg.SetField(new Field("MapEveningValues", 5, 132, 1f, 0f, "mmHg"));
             fieldIndex++;
             bloodPressureMesg.SetField(new Field("HeartRate", 6, 2, 1f, 0f, "bpm"));
             fieldIndex++;
             bloodPressureMesg.SetField(new Field("HeartRateType", 7, 0, 1f, 0f, ""));
             fieldIndex++;
             bloodPressureMesg.SetField(new Field("Status", 8, 0, 1f, 0f, ""));
             fieldIndex++;
             bloodPressureMesg.SetField(new Field("UserProfileIndex", 9, 132, 1f, 0f, ""));
             fieldIndex++;
             mesgs.Add(bloodPressureMesg);
             BloodPressureIndex = mesgIndex;
             mesgIndex++;

             // MonitoringInfo
             Mesg monitoringInfoMesg = new Mesg("MonitoringInfo", MesgNum.MonitoringInfo);
             fieldIndex = 0;
             monitoringInfoMesg.SetField(new Field("Timestamp", 253, 134, 1f, 0f, "s"));
             fieldIndex++;
             monitoringInfoMesg.SetField(new Field("LocalTimestamp", 0, 134, 1f, 0f, "s"));
             fieldIndex++;
             monitoringInfoMesg.SetField(new Field("ActivityType", 1, 0, 1f, 0f, ""));
             fieldIndex++;
             monitoringInfoMesg.SetField(new Field("CyclesToDistance", 3, 132, 5000f, 0f, "m/cycle"));
             fieldIndex++;
             monitoringInfoMesg.SetField(new Field("CyclesToCalories", 4, 132, 5000f, 0f, "kcal/cycle"));
             fieldIndex++;
             monitoringInfoMesg.SetField(new Field("RestingMetabolicRate", 5, 132, 1f, 0f, "kcal / day"));
             fieldIndex++;
             mesgs.Add(monitoringInfoMesg);
             MonitoringInfoIndex = mesgIndex;
             mesgIndex++;

             // Monitoring
             Mesg monitoringMesg = new Mesg("Monitoring", MesgNum.Monitoring);
             fieldIndex = 0;
             monitoringMesg.SetField(new Field("Timestamp", 253, 134, 1f, 0f, "s"));
             fieldIndex++;
             monitoringMesg.SetField(new Field("DeviceIndex", 0, 2, 1f, 0f, ""));
             fieldIndex++;
             monitoringMesg.SetField(new Field("Calories", 1, 132, 1f, 0f, "kcal"));
             fieldIndex++;
             monitoringMesg.SetField(new Field("Distance", 2, 134, 100f, 0f, "m"));
             fieldIndex++;
             monitoringMesg.SetField(new Field("Cycles", 3, 134, 2f, 0f, "cycles"));
             subfieldIndex = 0;
             monitoringMesg.fields[fieldIndex].subfields.Add(new Subfield("Steps", 134, 1f, 0f, "steps"));
             monitoringMesg.fields[fieldIndex].subfields[subfieldIndex].AddMap(5, 6);
             monitoringMesg.fields[fieldIndex].subfields[subfieldIndex].AddMap(5, 1);
             subfieldIndex++;
             monitoringMesg.fields[fieldIndex].subfields.Add(new Subfield("Strokes", 134, 2f, 0f, "strokes"));
             monitoringMesg.fields[fieldIndex].subfields[subfieldIndex].AddMap(5, 2);
             monitoringMesg.fields[fieldIndex].subfields[subfieldIndex].AddMap(5, 5);
             subfieldIndex++;
             fieldIndex++;
             monitoringMesg.SetField(new Field("ActiveTime", 4, 134, 1000f, 0f, "s"));
             fieldIndex++;
             monitoringMesg.SetField(new Field("ActivityType", 5, 0, 1f, 0f, ""));
             fieldIndex++;
             monitoringMesg.SetField(new Field("ActivitySubtype", 6, 0, 1f, 0f, ""));
             fieldIndex++;
             monitoringMesg.SetField(new Field("ActivityLevel", 7, 0, 1f, 0f, ""));
             fieldIndex++;
             monitoringMesg.SetField(new Field("Distance16", 8, 132, 1f, 0f, "100 * m"));
             fieldIndex++;
             monitoringMesg.SetField(new Field("Cycles16", 9, 132, 1f, 0f, "2 * cycles (steps)"));
             fieldIndex++;
             monitoringMesg.SetField(new Field("ActiveTime16", 10, 132, 1f, 0f, "s"));
             fieldIndex++;
             monitoringMesg.SetField(new Field("LocalTimestamp", 11, 134, 1f, 0f, ""));
             fieldIndex++;
             monitoringMesg.SetField(new Field("Temperature", 12, 131, 100f, 0f, "C"));
             fieldIndex++;
             monitoringMesg.SetField(new Field("TemperatureMin", 14, 131, 100f, 0f, "C"));
             fieldIndex++;
             monitoringMesg.SetField(new Field("TemperatureMax", 15, 131, 100f, 0f, "C"));
             fieldIndex++;
             monitoringMesg.SetField(new Field("ActivityTime", 16, 132, 1f, 0f, "minutes"));
             fieldIndex++;
             monitoringMesg.SetField(new Field("ActiveCalories", 19, 132, 1f, 0f, "kcal"));
             fieldIndex++;
             monitoringMesg.SetField(new Field("CurrentActivityTypeIntensity", 24, 13, 1f, 0f, ""));
             monitoringMesg.fields[fieldIndex].components.Add(new FieldComponent(5, false, 5, 1f, 0f)); // activity_type
             monitoringMesg.fields[fieldIndex].components.Add(new FieldComponent(28, false, 3, 1f, 0f)); // intensity
             fieldIndex++;
             monitoringMesg.SetField(new Field("TimestampMin8", 25, 2, 1f, 0f, "min"));
             fieldIndex++;
             monitoringMesg.SetField(new Field("Timestamp16", 26, 132, 1f, 0f, "s"));
             fieldIndex++;
             monitoringMesg.SetField(new Field("HeartRate", 27, 2, 1f, 0f, "bpm"));
             fieldIndex++;
             monitoringMesg.SetField(new Field("Intensity", 28, 2, 10f, 0f, ""));
             fieldIndex++;
             monitoringMesg.SetField(new Field("DurationMin", 29, 132, 1f, 0f, "min"));
             fieldIndex++;
             monitoringMesg.SetField(new Field("Duration", 30, 134, 1f, 0f, "s"));
             fieldIndex++;
             mesgs.Add(monitoringMesg);
             MonitoringIndex = mesgIndex;
             mesgIndex++;

             // MemoGlob
             Mesg memoGlobMesg = new Mesg("MemoGlob", MesgNum.MemoGlob);
             fieldIndex = 0;
             memoGlobMesg.SetField(new Field("PartIndex", 250, 134, 1f, 0f, ""));
             fieldIndex++;
             memoGlobMesg.SetField(new Field("Memo", 0, 13, 1f, 0f, ""));
             fieldIndex++;
             memoGlobMesg.SetField(new Field("MessageNumber", 1, 132, 1f, 0f, ""));
             fieldIndex++;
             memoGlobMesg.SetField(new Field("MessageIndex", 2, 132, 1f, 0f, ""));
             fieldIndex++;
             mesgs.Add(memoGlobMesg);
             MemoGlobIndex = mesgIndex;
             mesgIndex++;

             // Pad
             Mesg padMesg = new Mesg("Pad", MesgNum.Pad);
             fieldIndex = 0;
             mesgs.Add(padMesg);
             PadIndex = mesgIndex;
             mesgIndex++;

             //InvalidIndex; = FitTypeInvalid.uint16;
        }