private static void parseChannel(Tag tag, SmcChannel channel, string name, SmcChannelSettings cs, List <string> warnings) { if (assertChild(tag, name, warnings)) { Tag channelTag = tag.children[name]; parseBool(channelTag, "Invert", ref cs.invert, warnings); if (assertValue(channelTag, "AlternateUse", warnings)) { try { cs.alternateUse = (SmcChannelAlternateUse)Enum.Parse(typeof(SmcChannelAlternateUse), channelTag.values["AlternateUse"]); } catch { warnings.Add("Invalid AlternateUse value \"" + channelTag.values["AlternateUse"] + "\"."); } } if (channel.type() == SmcChannelType.Analog && assertValue(channelTag, "PinMode", warnings)) { try { cs.pinMode = (SmcPinMode)Enum.Parse(typeof(SmcPinMode), channelTag.values["PinMode"]); } catch { warnings.Add("Invalid PinMode value \"" + channelTag.values["PinMode"] + "\"."); } } parseU8(channelTag, "ScalingDegree", ref cs.scalingDegree, warnings); parseRange(channelTag, "Error", ref cs.errorMin, ref cs.errorMax, warnings); parseRange(channelTag, "Input", ref cs.inputMin, ref cs.inputMax, warnings); parseRange(channelTag, "InputNeutral", ref cs.inputNeutralMin, ref cs.inputNeutralMax, warnings); } }
/// <summary> /// Converts the Raw Value (or Unlimited Raw Value) of a channel in to a user /// friendly string that expresses the value in standard units. /// For example: "1501 us" or "1452 mV". It uses a non-ascii character to /// encode the Greek letter mu in microseconds. /// </summary> public static String rawValueToStandardUnitsString(this SmcChannel channel, UInt16 rawValue) { switch (channel.type()) { case SmcChannelType.RC: return(((rawValue + 2) / 4).ToString() + " \u03BCs"); case SmcChannelType.Analog: return((rawValue * 3300 / 4095).ToString() + " mV"); default: return(rawValue.ToString()); // should not happen } }
/// <summary> /// Returns the default settings for the given channel. /// </summary> /// <param name="channel"></param> /// <returns></returns> public static SmcChannelSettings defaults(SmcChannel channel) { if (channel.type() == SmcChannelType.Analog) { return(SmcChannelSettings.defaultAnalogSettings()); } else { return(SmcChannelSettings.defaultRCSettings()); } }
private static void WriteElementChannelSettings(this XmlWriter writer, SmcChannel channel, SmcChannelSettings cs) { writer.WriteStartElement(channel.ToString()); writer.WriteElementString("AlternateUse", cs.alternateUse.ToString()); if (channel.type() == SmcChannelType.Analog) { writer.WriteElementString("PinMode", cs.pinMode.ToString()); } writer.WriteElementBool("Invert", cs.invert); writer.WriteElementU32("ScalingDegree", cs.scalingDegree); writer.WriteElementRange("Error", cs.errorMin, cs.errorMax); writer.WriteElementRange("Input", cs.inputMin, cs.inputMax); writer.WriteElementRange("InputNeutral", cs.inputNeutralMin, cs.inputNeutralMax); writer.WriteEndElement(); }
private static void WriteElementChannelSettings(this XmlWriter writer, SmcChannel channel, SmcChannelSettings cs) { writer.WriteStartElement(channel.ToString()); writer.WriteElementString("AlternateUse", cs.alternateUse.ToString()); if (channel.type() == SmcChannelType.Analog) { writer.WriteElementString("PinMode", cs.pinMode.ToString()); } writer.WriteElementBool("Invert", cs.invert); writer.WriteElementU32("ScalingDegree", cs.scalingDegree); writer.WriteElementRange("Error", cs.errorMin, cs.errorMax); writer.WriteElementRange("Input", cs.inputMin, cs.inputMax); writer.WriteElementRange("InputNeutral", cs.inputNeutralMin, cs.inputNeutralMax); writer.WriteEndElement(); }
private static void parseChannel(Tag tag, SmcChannel channel, string name, SmcChannelSettings cs, List<string> warnings) { if (assertChild(tag, name, warnings)) { Tag channelTag = tag.children[name]; parseBool(channelTag, "Invert", ref cs.invert, warnings); if (assertValue(channelTag, "AlternateUse", warnings)) { try { cs.alternateUse = (SmcChannelAlternateUse)Enum.Parse(typeof(SmcChannelAlternateUse), channelTag.values["AlternateUse"]); } catch { warnings.Add("Invalid AlternateUse value \"" + channelTag.values["AlternateUse"] + "\"."); } } if (channel.type() == SmcChannelType.Analog && assertValue(channelTag, "PinMode", warnings)) { try { cs.pinMode = (SmcPinMode)Enum.Parse(typeof(SmcPinMode), channelTag.values["PinMode"]); } catch { warnings.Add("Invalid PinMode value \"" + channelTag.values["PinMode"] + "\"."); } } parseU8(channelTag, "ScalingDegree", ref cs.scalingDegree, warnings); parseRange(channelTag, "Error", ref cs.errorMin, ref cs.errorMax, warnings); parseRange(channelTag, "Input", ref cs.inputMin, ref cs.inputMax, warnings); parseRange(channelTag, "InputNeutral", ref cs.inputNeutralMin, ref cs.inputNeutralMax, warnings); } }
/// <summary> /// Returns the default settings for the given channel. /// </summary> /// <param name="channel"></param> /// <returns></returns> public static SmcChannelSettings defaults(SmcChannel channel) { if (channel.type() == SmcChannelType.Analog) { return SmcChannelSettings.defaultAnalogSettings(); } else { return SmcChannelSettings.defaultRCSettings(); } }