/// <summary>
        /// Clones and returns the setting object.
        /// </summary>
        /// <param name="parentCategory">The parent category where the cloned setting should be placed.</param>
        /// <param name="ownerFirmware">The owner firmware of the cloned setting.</param>
        /// <returns>The cloned setting object.</returns>
        /// <seealso cref="AbstractXBeeSetting"/>
        public new AbstractXBeeSetting CloneSetting(XBeeCategory parentCategory, XBeeFirmware ownerFirmware)
        {
            XBeeSettingButton clonedSetting = (XBeeSettingButton)base.CloneSetting(parentCategory, ownerFirmware);

            // Clone the attributes of this object.
            clonedSetting.FunctionNumber = FunctionNumber;

            return(clonedSetting);
        }
예제 #2
0
        /// <summary>
        /// Clones and returns the setting object.
        /// </summary>
        /// <param name="parentCategory">The parent category where the cloned setting should be placed.</param>
        /// <param name="ownerFirmware">The owner firmware of the cloned setting.</param>
        /// <returns>The cloned setting object.</returns>
        /// <seealso cref="AbstractXBeeSetting"/>
        public new AbstractXBeeSetting CloneSetting(XBeeCategory parentCategory, XBeeFirmware ownerFirmware)
        {
            XBeeSettingNoControl clonedSetting = (XBeeSettingNoControl)base.CloneSetting(parentCategory, ownerFirmware);

            // Clone the attributes of this object.
            clonedSetting.Format = Format;

            return(clonedSetting);
        }
예제 #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);
        }
예제 #4
0
        /// <summary>
        /// Parses the given XML element returning a list with the XBee settings found.
        /// </summary>
        /// <param name="settingsElement">The XML element to parse.</param>
        /// <param name="parentCategory">The XBee category where the settings should be located.</param>
        /// <param name="ownerFirmware">The owner firmware of the settings to parse.</param>
        /// <returns>A list with the XBee settings found.</returns>
        private static List <AbstractXBeeSetting> ParseSettings(XElement settingsElement, XBeeCategory parentCategory,
                                                                XBeeFirmware ownerFirmware)
        {
            List <AbstractXBeeSetting> xbeeSettings = new List <AbstractXBeeSetting>();

            List <XElement> atSettingsList = new List <XElement>();

            foreach (XElement element in settingsElement.Elements())
            {
                if (element.Name.ToString().Equals(XMLFirmwareConstants.ITEM_SETTING))
                {
                    atSettingsList.Add(element);
                }
            }
            List <XElement> bufferSettingsList = new List <XElement>();

            foreach (XElement element in settingsElement.Elements())
            {
                if (element.Name.ToString().Equals(XMLFirmwareConstants.ITEM_BUFFER_SETTING))
                {
                    bufferSettingsList.Add(element);
                }
            }


            if ((atSettingsList == null || atSettingsList.Count == 0) &&
                (bufferSettingsList == null || bufferSettingsList.Count == 0))
            {
                return(null);
            }

            // We do not know if the AT and buffer settings can live in the same category, so suppose YES so
            // do it the hard way.
            // Parse all the AT settings.
            foreach (XElement settingElement in atSettingsList)
            {
                AbstractXBeeSetting xbeeSetting = ParseATSetting(settingElement, parentCategory, ownerFirmware);
                if (xbeeSetting != null)
                {
                    xbeeSettings.Add(xbeeSetting);
                }
            }

            return(xbeeSettings);
        }
예제 #5
0
        /// <summary>
        /// Parses the given XML element returning a list with the XBee categories found.
        /// </summary>
        /// <param name="categoriesElement">The XML element to parse.</param>
        /// <param name="parentCategory">The XBee category where the categories should be located,
        /// <c>null</c> if they are root categories.</param>
        /// <param name="ownerFirmware">The owner firmware of the categories to parse.</param>
        /// <returns>A list with the XBee categories found.</returns>
        private static List <XBeeCategory> ParseCategories(XElement categoriesElement, XBeeCategory parentCategory,
                                                           XBeeFirmware ownerFirmware)
        {
            List <XBeeCategory> xbeeCategories = new List <XBeeCategory>();

            List <XElement> categoriesList = new List <XElement>();

            foreach (XElement element in categoriesElement.Elements())
            {
                if (element.Name.ToString().Equals(XMLFirmwareConstants.ITEM_CATEGORY))
                {
                    categoriesList.Add(element);
                }
            }
            if (categoriesList == null || categoriesList.Count == 0)
            {
                return(null);
            }

            foreach (XElement categoryElement in categoriesList)
            {
                string name        = categoryElement.Attribute(XMLFirmwareConstants.ATTRIBUTE_NAME).Value;
                string description = null;

                // Necessary items to parse and create an XBee category, if they are not defined
                // continue the parsing process.
                if (name == null || categoryElement.Element(XMLFirmwareConstants.ITEM_DESCRIPTION) == null)
                {
                    continue;
                }

                // Parse the possible categories inside a category.
                description = categoryElement.Element(XMLFirmwareConstants.ITEM_DESCRIPTION).Value;
                XBeeCategory xbeeCategory = new XBeeCategory(name, description, parentCategory, ownerFirmware);

                if (categoryElement.Element(XMLFirmwareConstants.ITEM_SETTINGS) != null)
                {
                    List <AbstractXBeeSetting> settings = ParseSettings(categoryElement.Element(XMLFirmwareConstants.ITEM_SETTINGS),
                                                                        xbeeCategory, ownerFirmware);
                    if (settings != null && settings.Count > 0)
                    {
                        xbeeCategory.Settings = settings;
                    }
                }
                // Parse the possible settings inside a category.
                if (categoryElement.Element(XMLFirmwareConstants.ITEM_CATEGORIES) != null)
                {
                    List <XBeeCategory> parsedCategories = ParseCategories(categoryElement.Element(XMLFirmwareConstants.ITEM_CATEGORIES),
                                                                           xbeeCategory, ownerFirmware);
                    if (parsedCategories != null && parsedCategories.Count > 0)
                    {
                        xbeeCategory.Categories = parsedCategories;
                    }
                }

                xbeeCategories.Add(xbeeCategory);
            }

            // Sort the categories list to put in first place the Special category (if the
            // list contains it).
            xbeeCategories.Sort(new XBeeCategoriesSorter());

            return(xbeeCategories);
        }
 /// <summary>
 /// Class constructor. Instantiates a new <see cref="XBeeSettingButton"/> object with the
 /// provided parameters.
 /// </summary>
 /// <param name="atCommand">The AT command corresponding to the setting.</param>
 /// <param name="name">Name of the setting.</param>
 /// <param name="description">Description of the setting.</param>
 /// <param name="defaultValue">Default value of the setting.</param>
 /// <param name="category">Parent category of the setting.</param>
 /// <param name="ownerFirmware">XBee firmware the setting belongs to.</param>
 /// <param name="numNetworks">The number of networks the setting can be configured for.</param>
 /// <seealso cref="XBeeCategory"/>
 /// <seealso cref="XBeeFirmware"/>
 public XBeeSettingButton(string atCommand, string name, string description,
                          string defaultValue, XBeeCategory category, XBeeFirmware ownerFirmware, int numNetworks)
     : base(atCommand, name, description, defaultValue, category, ownerFirmware, numNetworks)
 {
     Type = TYPE_BUTTON;
 }
 /// <summary>
 /// Class constructor. Instantiates a new <see cref="XBeeSettingButton"/> object with the
 /// provided parameters.
 /// </summary>
 /// <param name="atCommand">The AT command corresponding to the setting.</param>
 /// <param name="name">Name of the setting.</param>
 /// <param name="description">Description of the setting.</param>
 /// <param name="defaultValue">Default value of the setting.</param>
 /// <param name="category">Parent category of the setting.</param>
 /// <param name="ownerFirmware">XBee firmware the setting belongs to.</param>
 /// <seealso cref="XBeeCategory"/>
 /// <seealso cref="XBeeFirmware"/>
 public XBeeSettingButton(string atCommand, string name, string description,
                          string defaultValue, XBeeCategory category, XBeeFirmware ownerFirmware)
     : this(atCommand, name, description, defaultValue, category, ownerFirmware, 1)
 {
 }
 /// <summary>
 /// Class constructor. Instantiates a new <see cref="XBeeSettingButton"/> object with the
 /// provided parameters.
 /// </summary>
 /// <param name="name">Name of the setting.</param>
 /// <param name="description">Description of the setting.</param>
 /// <param name="category">Parent category of the setting.</param>
 /// <param name="ownerFirmware">XBee firmware the setting belongs to.</param>
 /// <param name="numNetworks">The number of networks the setting can be configured for.</param>
 /// <seealso cref="XBeeCategory"/>
 /// <seealso cref="XBeeFirmware"/>
 public XBeeSettingButton(string name, string description, XBeeCategory category,
                          XBeeFirmware ownerFirmware, int numNetworks)
     : this(null, name, description, null, category, ownerFirmware, numNetworks)
 {
 }
예제 #9
0
 /// <summary>
 /// Class constructor. Instantiates a new <see cref="XBeeSettingNoControl"/> object with the
 /// provided parameters.
 /// </summary>
 /// <param name="atCommand">The AT command corresponding to the setting.</param>
 /// <param name="name">Name of the setting.</param>
 /// <param name="description">Description of the setting.</param>
 /// <param name="defaultValue">Default value of the setting.</param>
 /// <param name="category">Parent category of the setting.</param>
 /// <param name="ownerFirmware">XBee firmware the setting belongs to.</param>
 /// <param name="numNetworks">The number of networks the setting can be configured for.</param>
 /// <seealso cref="XBeeCategory"/>
 /// <seealso cref="XBeeFirmware"/>
 public XBeeSettingNoControl(string atCommand, string name, string description,
                             string defaultValue, XBeeCategory category, XBeeFirmware ownerFirmware, int numNetworks)
     : base(atCommand, name, description, defaultValue, category, ownerFirmware, numNetworks)
 {
     Type = TYPE_NO_CONTROL;
 }
예제 #10
0
 /// <summary>
 /// Class constructor. Instantiates a new <see cref="XBeeSettingNoControl"/> object with the
 /// provided parameters.
 /// </summary>
 /// <param name="name">Name of the setting.</param>
 /// <param name="description">Description of the setting.</param>
 /// <param name="defaultValue">Default value of the setting.</param>
 /// <param name="category">Parent category of the setting.</param>
 /// <param name="ownerFirmware">XBee firmware the setting belongs to.</param>
 /// <seealso cref="XBeeCategory"/>
 /// <seealso cref="XBeeFirmware"/>
 public XBeeSettingNoControl(string name, string description,
                             string defaultValue, XBeeCategory category, XBeeFirmware ownerFirmware)
     : this(name, description, defaultValue, category, ownerFirmware, 1)
 {
 }