/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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) { }
/// <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; }
/// <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) { }