/// <summary> /// Adds a new range to the list of ranges of the numeric setting. /// </summary> /// <param name="numberSetting">The XBee number setting to add the range to.</param> /// <param name="rangeMinValue">The minimum valid value of the range.</param> /// <param name="rangeMaxValue">The maximum valid value of the range.</param> private static void AddRange(XBeeSettingNumber numberSetting, string rangeMinValue, string rangeMaxValue) { Range range = new Range(rangeMinValue, rangeMaxValue); if (!range.RangeMin.ToLower().StartsWith("0x")) { // [XCTUNG-1180] Range may contain a reference to another AT command. if (ParsingUtils.IsHexadecimal(range.RangeMin)) { range.RangeMin = "0x" + range.RangeMin; } else { // The min range depends on another AT command, so add the dependency. numberSetting.OwnerFirmware.AddDependency(range.RangeMin, numberSetting.AtCommand); } } if (!range.RangeMax.ToLower().StartsWith("0x")) { // [XCTUNG-1180] Range may contain a reference to another AT command. if (ParsingUtils.IsHexadecimal(range.RangeMax)) { range.RangeMax = "0x" + range.RangeMax; } else { // The max range depends on another AT command, so add the dependency. numberSetting.OwnerFirmware.AddDependency(range.RangeMax, numberSetting.AtCommand); } } numberSetting.AddRange(range); }
/// <summary> /// Reads the number setting specific parameters from the XML element and fills the given /// number setting with them. /// </summary> /// <param name="settingElement">The XML element to read the specific parameters from.</param> /// <param name="numberSetting">The number setting to be filled.</param> private static void FillNumberSetting(XElement settingElement, XBeeSettingNumber numberSetting) { if (settingElement.Element(XMLFirmwareConstants.ITEM_RANGE_MIN) != null && settingElement.Element(XMLFirmwareConstants.ITEM_RANGE_MAX) != null) { string rangeMinValue = settingElement.Element(XMLFirmwareConstants.ITEM_RANGE_MIN).Value.Trim(); string rangeMaxValue = settingElement.Element(XMLFirmwareConstants.ITEM_RANGE_MAX).Value.Trim(); AddRange(numberSetting, rangeMinValue, rangeMaxValue); } if (settingElement.Element(XMLFirmwareConstants.ITEM_RANGES) != null) { XElement rangesElement = settingElement.Element(XMLFirmwareConstants.ITEM_RANGES); List <XElement> rangesList = new List <XElement>(); foreach (XElement element in rangesElement.Elements()) { if (element.Name.ToString().Equals(XMLFirmwareConstants.ITEM_RANGE)) { rangesList.Add(element); } } foreach (XElement rangeElement in rangesList) { if (rangeElement.Element(XMLFirmwareConstants.ITEM_RANGE_MIN) == null || rangeElement.Element(XMLFirmwareConstants.ITEM_RANGE_MAX) == null) { continue; } string rangeMinValue = rangeElement.Element(XMLFirmwareConstants.ITEM_RANGE_MIN).Value.Trim(); string rangeMaxValue = rangeElement.Element(XMLFirmwareConstants.ITEM_RANGE_MAX).Value.Trim(); AddRange(numberSetting, rangeMinValue, rangeMaxValue); } } if (settingElement.Element(XMLFirmwareConstants.ITEM_UNITS) != null) { numberSetting.Units = settingElement.Element(XMLFirmwareConstants.ITEM_UNITS).Value.Trim(); } List <string> additionalValues = new List <string>(); XElement additionalValuesElement = settingElement.Element(XMLFirmwareConstants.ITEM_ADDITIONAL_VALUES); if (additionalValuesElement == null) { return; } List <XElement> additionalValuesList = new List <XElement>(); foreach (XElement element in additionalValuesElement.Elements()) { if (element.Name.ToString().Equals(XMLFirmwareConstants.ITEM_ADDITIONAL_VALUE)) { additionalValuesList.Add(element); } } if (additionalValuesList == null || additionalValuesList.Count == 0) { return; } foreach (XElement additionalValue in additionalValuesList) { additionalValues.Add(additionalValue.Value); } numberSetting.AdditionalValues = additionalValues; }
/// <summary> /// Parse the given setting element assuming it is an AT setting. Return the setting object /// corresponding to the XML element. /// </summary> /// <param name="settingElement">The XML element to parse.</param> /// <param name="parentCategory">The parent category (where the setting will be placed).</param> /// <param name="ownerFirmware">The owner firmware of the settings to parse.</param> /// <returns>The setting object corresponding to the given XML element.</returns> private static AbstractXBeeSetting ParseATSetting(XElement settingElement, XBeeCategory parentCategory, XBeeFirmware ownerFirmware) { AbstractXBeeSetting xbeeSetting = null; // As this is an AT command setting, read the AT command. string atCommand = null; if (settingElement.Attribute(XMLFirmwareConstants.ATTRIBUTE_COMMAND) != null) { atCommand = settingElement.Attribute(XMLFirmwareConstants.ATTRIBUTE_COMMAND).Value; } string name = null; string description = null; string defaultValue = null; string controlType = null; int numNetworks = 1; // Necessary items to parse and create an AT setting, if they are not defined, return a // null setting. if (settingElement.Element(XMLFirmwareConstants.ITEM_NAME) == null || settingElement.Element(XMLFirmwareConstants.ITEM_DESCRIPTION) == null || settingElement.Element(XMLFirmwareConstants.ITEM_CONTROL_TYPE) == null) { return(null); } name = settingElement.Element(XMLFirmwareConstants.ITEM_NAME).Value.Trim(); description = settingElement.Element(XMLFirmwareConstants.ITEM_DESCRIPTION).Value.Trim(); controlType = settingElement.Element(XMLFirmwareConstants.ITEM_CONTROL_TYPE).Value.Trim(); // Check if the setting has the number of networks field. if (settingElement.Element(XMLFirmwareConstants.ITEM_NETWORKS) != null) { int.TryParse(settingElement.Element(XMLFirmwareConstants.ITEM_NETWORKS).Value.Trim(), out numNetworks); } // There are settings that may not have a default value defined. if (settingElement.Element(XMLFirmwareConstants.ITEM_DEFAULT_VALUE) != null) { defaultValue = settingElement.Element(XMLFirmwareConstants.ITEM_DEFAULT_VALUE).Value; if (defaultValue.ToLower().StartsWith("0x")) { defaultValue = defaultValue.Substring(2); } } // Only the button setting is allowed to not have an AT command associated, so // if the read AT command is <c>null</c>, return null. if (!controlType.Equals(XMLFirmwareConstants.SETTING_TYPE_BUTTON) && atCommand == null) { return(null); } // Generate the setting object and fill it depending on the control type. if (controlType.Equals(XMLFirmwareConstants.SETTING_TYPE_BUTTON)) { xbeeSetting = new XBeeSettingButton(name, description, parentCategory, ownerFirmware, numNetworks); FillButtonSetting(settingElement, (XBeeSettingButton)xbeeSetting); } else if (controlType.Equals(XMLFirmwareConstants.SETTING_TYPE_COMBO)) { xbeeSetting = new XBeeSettingCombo(atCommand, name, description, defaultValue, parentCategory, ownerFirmware, numNetworks); FillComboSetting(settingElement, (XBeeSettingCombo)xbeeSetting); } else if (controlType.Equals(XMLFirmwareConstants.SETTING_TYPE_NONE)) { xbeeSetting = new XBeeSettingNoControl(atCommand, name, description, defaultValue, parentCategory, ownerFirmware, numNetworks); FillNoControlSetting(settingElement, (XBeeSettingNoControl)xbeeSetting); } else if (controlType.Equals(XMLFirmwareConstants.SETTING_TYPE_NON_EDITABLE_STRING)) { xbeeSetting = new XBeeSettingNoControl(atCommand, name, description, defaultValue, parentCategory, ownerFirmware, numNetworks); FillNoControlSetting(settingElement, (XBeeSettingNoControl)xbeeSetting); ((XBeeSettingNoControl)xbeeSetting).Format = Format.ASCII; } else if (controlType.Equals(XMLFirmwareConstants.SETTING_TYPE_NUMBER)) { xbeeSetting = new XBeeSettingNumber(atCommand, name, description, defaultValue, parentCategory, ownerFirmware, numNetworks); FillNumberSetting(settingElement, (XBeeSettingNumber)xbeeSetting); } else if (controlType.Equals(XMLFirmwareConstants.SETTING_TYPE_TEXT)) { xbeeSetting = new XBeeSettingText(atCommand, name, description, defaultValue, parentCategory, ownerFirmware, numNetworks); FillTextSetting(settingElement, (XBeeSettingText)xbeeSetting); } return(xbeeSetting); }