Example #1
0
        /// <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);
        }
Example #2
0
        /// <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;
        }
Example #3
0
        /// <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);
        }