public static void ExportSchedulesFITFile(Stream exportStream, MemoryStream dataStream) { MemoryStream tempDataStream = new MemoryStream(); // Reserve size for header tempDataStream.Write(new Byte[12], 0, 12); // File id message FITMessage fileIdMessage = new FITMessage(FITGlobalMessageIds.FileId); FITMessageField fileType = new FITMessageField((Byte)FITFileIdFieldsIds.FileType); FITMessageField manufacturerId = new FITMessageField((Byte)FITFileIdFieldsIds.ManufacturerId); FITMessageField productId = new FITMessageField((Byte)FITFileIdFieldsIds.ProductId); FITMessageField serialNumber = new FITMessageField((Byte)FITFileIdFieldsIds.SerialNumber); FITMessageField exportDate = new FITMessageField((Byte)FITFileIdFieldsIds.ExportDate); FITMessageField number = new FITMessageField((Byte)FITFileIdFieldsIds.Number); manufacturerId.SetUInt16(1); fileType.SetEnum((Byte)FITFileTypes.Schedules); // Invalid fields productId.SetUInt16(0xFFFF); serialNumber.SetUInt32z(0); exportDate.SetUInt32(0xFFFFFFFF); number.SetUInt16(0xFFFF); fileIdMessage.AddField(serialNumber); fileIdMessage.AddField(exportDate); fileIdMessage.AddField(manufacturerId); fileIdMessage.AddField(productId); fileIdMessage.AddField(number); fileIdMessage.AddField(fileType); fileIdMessage.Serialize(tempDataStream); // Write all passed in data to output stream tempDataStream.Write(dataStream.GetBuffer(), 0, (int)dataStream.Length); // Write FIT header at the start of the stream GarminFitnessByteRange headerSize = new GarminFitnessByteRange(12); GarminFitnessByteRange protocolVersion = new GarminFitnessByteRange((Byte)((FITConstants.FITProtocolMajorVersion << 4) | FITConstants.FITProtocolMinorVersion)); GarminFitnessUInt16Range profileVersion = new GarminFitnessUInt16Range((UInt16)((FITConstants.FITProfileMajorVersion * FITConstants.FITProfileMajorVersionMultiplier) + FITConstants.FITProfileMinorVersion)); GarminFitnessInt32Range dataSize = new GarminFitnessInt32Range(0); tempDataStream.Seek(0, SeekOrigin.Begin); dataSize.Value = (int)tempDataStream.Length - 12; headerSize.Serialize(tempDataStream); protocolVersion.Serialize(tempDataStream); profileVersion.Serialize(tempDataStream); dataSize.Serialize(tempDataStream); tempDataStream.Write(Encoding.UTF8.GetBytes(FITConstants.FITFileDescriptor), 0, 4); // Write CRC GarminFitnessUInt16Range crc = new GarminFitnessUInt16Range(FITUtils.ComputeStreamCRC(tempDataStream)); tempDataStream.Seek(0, SeekOrigin.End); crc.Serialize(tempDataStream); // Write all data to output stream exportStream.Write(tempDataStream.GetBuffer(), 0, (int)tempDataStream.Length); }
public override void Serialize(Stream stream) { base.Serialize(stream); IZoneCategory zones = Options.Instance.PowerZoneCategory; String zoneRefID = zones.ReferenceId; GarminFitnessString categoryRefID = new GarminFitnessString(zoneRefID); categoryRefID.Serialize(stream); GarminFitnessInt32Range zoneIndex = new GarminFitnessInt32Range(zones.Zones.IndexOf(Zone)); zoneIndex.Serialize(stream); GarminFitnessBool dirty = new GarminFitnessBool(IsDirty); dirty.Serialize(stream); }
public static void ExportWorkoutToFIT(IWorkout workout, Stream exportStream, bool updateExportDate) { MemoryStream dataStream = new MemoryStream(); // Reserve size for header dataStream.Write(new Byte[12], 0, 12); // File id message FITMessage fileIdMessage = new FITMessage(FITGlobalMessageIds.FileId); FITMessageField fileType = new FITMessageField((Byte)FITFileIdFieldsIds.FileType); FITMessageField manufacturerId = new FITMessageField((Byte)FITFileIdFieldsIds.ManufacturerId); FITMessageField productId = new FITMessageField((Byte)FITFileIdFieldsIds.ProductId); FITMessageField serialNumber = new FITMessageField((Byte)FITFileIdFieldsIds.SerialNumber); FITMessageField exportDate = new FITMessageField((Byte)FITFileIdFieldsIds.ExportDate); FITMessageField number = new FITMessageField((Byte)FITFileIdFieldsIds.Number); fileType.SetEnum((Byte)FITFileTypes.Workout); manufacturerId.SetUInt16(1); productId.SetUInt16(20119); serialNumber.SetUInt32z(0); exportDate.SetUInt32(workout.CreationTimestamp); number.SetUInt16(0xFFFF); fileIdMessage.AddField(serialNumber); fileIdMessage.AddField(exportDate); fileIdMessage.AddField(manufacturerId); fileIdMessage.AddField(productId); fileIdMessage.AddField(number); fileIdMessage.AddField(fileType); fileIdMessage.Serialize(dataStream); // File creator message FITMessage fileCreatorMessage = new FITMessage(FITGlobalMessageIds.FileCreator); FITMessageField software = new FITMessageField((Byte)FITFileCreatorFieldsIds.SoftwareVersion); FITMessageField hardware = new FITMessageField((Byte)FITFileCreatorFieldsIds.HardwareVersion); software.SetUInt16(3605); hardware.SetUInt8(0); fileCreatorMessage.AddField(software); fileCreatorMessage.AddField(hardware); fileCreatorMessage.Serialize(dataStream); // Write workout workout.SerializeToFIT(dataStream); // Write FIT header at the start of the stream GarminFitnessByteRange headerSize = new GarminFitnessByteRange(12); GarminFitnessByteRange protocolVersion = new GarminFitnessByteRange((Byte)((FITConstants.FITProtocolMajorVersion << 4) | FITConstants.FITProtocolMinorVersion)); GarminFitnessUInt16Range profileVersion = new GarminFitnessUInt16Range((UInt16)((FITConstants.FITProfileMajorVersion * FITConstants.FITProfileMajorVersionMultiplier) + FITConstants.FITProfileMinorVersion)); GarminFitnessInt32Range dataSize = new GarminFitnessInt32Range(0); dataStream.Seek(0, SeekOrigin.Begin); dataSize.Value = (int)dataStream.Length - 12; headerSize.Serialize(dataStream); protocolVersion.Serialize(dataStream); profileVersion.Serialize(dataStream); dataSize.Serialize(dataStream); dataStream.Write(Encoding.UTF8.GetBytes(FITConstants.FITFileDescriptor), 0, 4); // Write CRC GarminFitnessUInt16Range crc = new GarminFitnessUInt16Range(FITUtils.ComputeStreamCRC(dataStream)); dataStream.Seek(0, SeekOrigin.End); crc.Serialize(dataStream); // Write all data to output stream exportStream.Write(dataStream.GetBuffer(), 0, (int)dataStream.Length); if (updateExportDate) { workout.LastExportDate = DateTime.Now; } }
public override void Serialize(Stream stream) { base.Serialize(stream); IZoneCategory zones = BaseTarget.ParentStep.ParentConcreteWorkout.Category.HeartRateZone; String zoneRefID = zones.ReferenceId; GarminFitnessString categoryRefID = new GarminFitnessString(zoneRefID); categoryRefID.Serialize(stream); GarminFitnessInt32Range zoneIndex = new GarminFitnessInt32Range(zones.Zones.IndexOf(Zone)); zoneIndex.Serialize(stream); GarminFitnessBool dirty = new GarminFitnessBool(IsDirty); dirty.Serialize(stream); }
public void SerializeData(Stream stream) { switch (m_Type) { case DataType.Enum: case DataType.UInt8: case DataType.UInt8z: { for (int i = 0; i < ArraySize; ++i) { GarminFitnessByteRange data = new GarminFitnessByteRange(m_ByteValues[i]); data.Serialize(stream); } break; } case DataType.SInt8: { for (int i = 0; i < ArraySize; ++i) { GarminFitnessSByteRange data = new GarminFitnessSByteRange(m_SByteValues[i]); data.Serialize(stream); } break; } case DataType.UInt16: case DataType.UInt16z: { for (int i = 0; i < ArraySize; ++i) { GarminFitnessUInt16Range data = new GarminFitnessUInt16Range(m_UInt16Values[i]); data.Serialize(stream); } break; } case DataType.SInt16: { for (int i = 0; i < ArraySize; ++i) { GarminFitnessInt16Range data = new GarminFitnessInt16Range(m_Int16Values[i]); data.Serialize(stream); } break; } case DataType.UInt32: case DataType.UInt32z: { for (int i = 0; i < ArraySize; ++i) { GarminFitnessUInt32Range data = new GarminFitnessUInt32Range(m_UInt32Values[i]); data.Serialize(stream); } break; } case DataType.SInt32: { for (int i = 0; i < ArraySize; ++i) { GarminFitnessInt32Range data = new GarminFitnessInt32Range(m_Int32Values[i]); data.Serialize(stream); } break; } case DataType.Float32: { for (int i = 0; i < ArraySize; ++i) { GarminFitnessFloatRange data = new GarminFitnessFloatRange(m_SingleValues[i]); data.Serialize(stream); } break; } case DataType.Float64: { for (int i = 0; i < ArraySize; ++i) { GarminFitnessDoubleRange data = new GarminFitnessDoubleRange(m_DoubleValues[i]); data.Serialize(stream); } break; } case DataType.String: { Byte[] valueStored = new Byte[FieldSize]; for(int i = 0; i < valueStored.Length; ++i) { if (i < m_ByteValues.Length) { valueStored[i] = m_ByteValues[i]; } else { valueStored[i] = 0; } } stream.Write(valueStored, 0, valueStored.Length); break; } case DataType.Byte: { stream.Write(m_ByteValues, 0, m_ByteValues.Length); break; } default: { Debug.Assert(false); break; } } }
public static void SerializeSTZoneInfoXML(IStep step, IZoneCategory categoryZones, INamedLowHighZone zone, XmlDocument document) { int index = categoryZones.Zones.IndexOf(zone); if (index != -1) { XmlNode extensionNode; XmlNode categoryNode; XmlNode valueNode; extensionNode = document.CreateElement("TargetOverride"); // Step Id node valueNode = document.CreateElement("StepId"); extensionNode.AppendChild(valueNode); valueNode.AppendChild(document.CreateTextNode(step.ParentWorkout.GetStepExportId(step).ToString())); // Category node categoryNode = document.CreateElement("Category"); extensionNode.AppendChild(categoryNode); // RefId GarminFitnessString categoryRefID = new GarminFitnessString(categoryZones.ReferenceId); categoryRefID.Serialize(categoryNode, "Id", document); // Zone index GarminFitnessInt32Range zoneIndex = new GarminFitnessInt32Range(index); zoneIndex.Serialize(categoryNode, "Index", document); step.ParentWorkout.AddSportTracksExtension(extensionNode); } }