/// <summary> /// Demonstrates encoding a 'MonitoringB File' of a made up device which counts steps and reports the battery status of the device. /// </summary> static void EncodeMonitoringFile() { System.DateTime systemStartTime = System.DateTime.Now; System.DateTime systemTimeNow = systemStartTime; FileStream fitDest = new FileStream("ExampleMonitoringFile.fit", FileMode.Create, FileAccess.ReadWrite, FileShare.Read); // Create file encode object Encode encodeDemo = new Encode(); // Write our header encodeDemo.Open(fitDest); // Generate some FIT messages FileIdMesg fileIdMesg = new FileIdMesg(); // Every FIT file MUST contain a 'File ID' message as the first message fileIdMesg.SetType(Dynastream.Fit.File.MonitoringB); // See the 'FIT FIle Types Description' document for more information about this file type. fileIdMesg.SetManufacturer(Manufacturer.Dynastream); fileIdMesg.SetProduct(1001); fileIdMesg.SetSerialNumber(54321); fileIdMesg.SetTimeCreated(new Dynastream.Fit.DateTime(systemTimeNow)); fileIdMesg.SetNumber(0); encodeDemo.Write(fileIdMesg); // Write the 'File ID Message' DeviceInfoMesg deviceInfoMesg = new DeviceInfoMesg(); deviceInfoMesg.SetTimestamp(new Dynastream.Fit.DateTime(systemTimeNow)); deviceInfoMesg.SetBatteryStatus(Dynastream.Fit.BatteryStatus.Good); encodeDemo.Write(deviceInfoMesg); MonitoringMesg monitoringMesg = new MonitoringMesg(); // By default, each time a new message is written the Local Message Type 0 will be redefined to match the new message. // In this case,to avoid having a definition message each time there is a DeviceInfoMesg, we can manually set the Local Message Type of the MonitoringMessage to '1'. // By doing this we avoid an additional 7 definition messages in our FIT file. monitoringMesg.LocalNum = 1; // Simulate some data Random numberOfCycles = new Random(); // Fake a number of cycles for (int i = 0; i < 4; i++) // Each of these loops represent a quarter of a day { for (int j = 0; j < 6; j++) // Each of these loops represent 1 hour { monitoringMesg.SetTimestamp(new Dynastream.Fit.DateTime(systemTimeNow)); monitoringMesg.SetActivityType(Dynastream.Fit.ActivityType.Walking); // Setting this to walking will cause Cycles to be interpretted as steps. monitoringMesg.SetCycles(monitoringMesg.GetCycles() + numberOfCycles.Next(0, 1000)); // Cycles are accumulated (i.e. must be increasing) encodeDemo.Write(monitoringMesg); systemTimeNow = systemTimeNow.AddHours(1); // Add an hour to our contrieved timestamp } deviceInfoMesg.SetTimestamp(new Dynastream.Fit.DateTime(systemTimeNow)); deviceInfoMesg.SetBatteryStatus(Dynastream.Fit.BatteryStatus.Good); // Report the battery status every quarter day encodeDemo.Write(deviceInfoMesg); } // Update header datasize and file CRC encodeDemo.Close(); fitDest.Close(); Console.WriteLine("Encoded FIT file ExampleMonitoringFile.fit"); }
/// <summary> /// Demonstrate the encoding of a 'Settings File' by writing a 'Settings File' containing a 'User Profile' Message. /// This example is simpler than the 'Monitoring File' example. /// </summary> static void EncodeSettingsFile() { // Generate some FIT messages FileIdMesg fileIdMesg = new FileIdMesg(); // Every FIT file MUST contain a 'File ID' message as the first message fileIdMesg.SetType(Dynastream.Fit.File.Settings); fileIdMesg.SetManufacturer(Manufacturer.Dynastream); // Types defined in the profile are available fileIdMesg.SetProduct(1000); fileIdMesg.SetSerialNumber(12345); UserProfileMesg myUserProfile = new UserProfileMesg(); myUserProfile.SetGender(Gender.Female); float myWeight = 63.1F; myUserProfile.SetWeight(myWeight); myUserProfile.SetAge(99); myUserProfile.SetFriendlyName(Encoding.UTF8.GetBytes("TestUser")); FileStream fitDest = new FileStream("ExampleSettings.fit", FileMode.Create, FileAccess.ReadWrite, FileShare.Read); // Create file encode object Encode encodeDemo = new Encode(); // Write our header encodeDemo.Open(fitDest); // Encode each message, a definition message is automatically generated and output if necessary encodeDemo.Write(fileIdMesg); encodeDemo.Write(myUserProfile); // Update header datasize and file CRC encodeDemo.Close(); fitDest.Close(); Console.WriteLine("Encoded FIT file ExampleSettings.fit"); return; }