Example #1
0
        /// <summary>
        /// Writes a SmcSettings object as text to the specified streamwriter.
        /// </summary>
        /// <param name="settings">The settings to read from.</param>
        /// <param name="sw">The file to write to.</param>
        /// <param name="device">The device that these settings came from (optional!).  Adds extra comments to the file.</param>
        public static void save(SmcSettings settings, StreamWriter sw, Smc device)
        {
            XmlTextWriter writer = new XmlTextWriter(sw);
            writer.Formatting = Formatting.Indented;
            writer.WriteComment("Pololu Simple Motor Controller settings file. http://www.pololu.com/docs/0J44");
            writer.WriteComment("Created on: " + DateTime.Now.ToString("u").TrimEnd('Z')); // save local time in a sortable format
            if (device != null)
            {
                writer.WriteComment("Device model: " + Smc.productIdToLongModelString(device.productId));
                writer.WriteComment("Device serial number: " + device.getSerialNumber());
                writer.WriteComment("Device firmware version: " + device.getFirmwareVersionString());
            }
            writer.WriteStartElement("SmcSettings");

            // XML file version, so that we can parse old XML types in the future and old versions of the
            // configuration utility don't try to read newer settings files that have a different format.
            writer.WriteAttributeString("version", "1");

            // [Add-new-settings-here]

            writer.WriteElementString("InputMode", settings.inputMode.ToString());
            writer.WriteElementString("MixingMode", settings.mixingMode.ToString());

            writer.WriteElementBool("DisableSafeStart", settings.disableSafeStart);
            writer.WriteElementBool("IgnorePotDisconnect", settings.ignorePotDisconnect);
            writer.WriteElementBool("IgnoreErrLineHigh", settings.ignoreErrLineHigh);
            writer.WriteElementBool("NeverSuspend", settings.neverSuspend);

            writer.WriteElementBool("TempLimitGradual", settings.tempLimitGradual);
            writer.WriteElementRange("OverTemp", settings.overTempMin, settings.overTempMax);
            writer.WriteElementU32("LowVinShutoffTimeout", settings.lowVinShutoffTimeout);
            writer.WriteElementU32("LowVinShutoffMv", settings.lowVinShutoffMv);
            writer.WriteElementU32("LowVinStartupMv", settings.lowVinStartupMv);
            writer.WriteElementU32("HighVinShutoffMv", settings.highVinShutoffMv);

            writer.WriteElementString("SerialMode", settings.serialMode.ToString());
            writer.WriteElementU32("SerialDeviceNumber", settings.serialDeviceNumber);
            writer.WriteElementU32("CommandTimeout", settings.commandTimeout);
            writer.WriteElementString("CrcMode", settings.crcMode.ToString());
            writer.WriteElementBool("UartResponseDelay", settings.uartResponseDelay);
            writer.WriteElementBool("UseFixedBaudRate", settings.useFixedBaudRate);
            writer.WriteElementU32("FixedBaudRate", settings.fixedBaudRateBps);

            writer.WriteComment("Input Settings");
            writer.WriteElementChannelSettings(SmcChannel.Rc1, settings.rc1);
            writer.WriteElementChannelSettings(SmcChannel.Rc2, settings.rc2);
            writer.WriteElementChannelSettings(SmcChannel.Analog1, settings.analog1);
            writer.WriteElementChannelSettings(SmcChannel.Analog2, settings.analog2);

            writer.WriteComment("Motor Settings");
            writer.WriteElementU32("PwmPeriodFactor", settings.pwmPeriodFactor);
            writer.WriteElementBool("MotorInvert", settings.motorInvert);
            writer.WriteElementU32("SpeedZeroBrakeAmount", settings.speedZeroBrakeAmount);
            writer.WriteElementU32("SpeedUpdatePeriod", settings.speedUpdatePeriod);
            writer.WriteElementMotorLimits("ForwardLimits", settings.forwardLimits);
            writer.WriteElementMotorLimits("ReverseLimits", settings.reverseLimits);

            writer.WriteComment("Advanced Settings");
            writer.WriteElementRange("PulsePeriod", settings.minPulsePeriod, settings.maxPulsePeriod);
            writer.WriteElementU32("RcTimeout", settings.rcTimeout);
            writer.WriteElementU32("ConsecGoodPulses", settings.consecGoodPulses);
            writer.WriteElementS32("VinMultiplierOffset", settings.vinMultiplierOffset);

            writer.WriteEndElement(); // End SmcSettings tag.
        }