public static LED7DisplaysDictionary Load(XmlNode xml) { __instance = new LED7DisplaysDictionary(); __instance._default = (byte)(int.Parse(xml.Attributes["default"].Value) & 0xff); __instance._dot = (byte)(int.Parse(xml.Attributes["dot"].Value) & 0xff); XmlNodeList nodes = xml.SelectNodes("dotChars/char"); foreach (XmlNode node in nodes) { char c = node.Attributes["chr"].Value[0]; if (!__instance._charsForDots.Contains(c)) { __instance._charsForDots.Add(c); } } nodes = xml.SelectNodes("char"); foreach (XmlNode node in nodes) { byte v = (byte)(int.Parse(node.Attributes["value"].Value) & 0xff); char c = node.Attributes["chr"].Value[0]; if (!__instance._charDictionary.ContainsKey(c)) { __instance._charDictionary.Add(c, v); } } return(__instance); }
public static ModulesConfiguration Load() { if (__instance == null) { if (!File.Exists(ConfigurationFilePath)) { throw new FileNotFoundException(ConfigurationFilePath); } ModulesConfiguration c = new ModulesConfiguration(); XmlDocument xml = new XmlDocument(); xml.Load(ConfigurationFilePath); // zmienna pomocnicza Device f = null; // wczytanie urządzeń List <Device> devices = new List <Device>(); XmlNodeList nodes = xml.SelectNodes("configuration/devices/device"); foreach (XmlNode node in nodes) { Device d = Device.Load(node); f = devices.Find(delegate(Device o) { return(o.Id == d.Id); }); if (f == null) { devices.Add(Device.Load(node)); } else { throw new Exception("Istnieje już urządzenie o identyfikatorze '" + d.Id + "'."); } } c.Devices = devices.ToArray(); // wczytanie konfiguracji wyjść cyfrowych List <DigitalOutput> outputs = new List <DigitalOutput>(); nodes = xml.SelectNodes("configuration/digitalOutputs/output"); foreach (XmlNode node in nodes) { DigitalOutput output = DigitalOutput.Load(node); // znalezienie urządzenia f = devices.Find(delegate(Device o) { return(o.Id == output.DeviceId); }); if (f == null) { throw new Exception("Konfiguracja nie zawiera informacji o urządzeniu z identyfikatorem '" + output.DeviceId + "'."); } output.Device = f; outputs.Add(output); } c.DigitalOutputs = outputs.ToArray(); // wczytanie konfiguracji zbiorów wyjść cyfrowych nodes = xml.SelectNodes("configuration/digitalOutputs/outputSet"); foreach (XmlNode node in nodes) { DigitalOutputSet dos = DigitalOutputSet.Load(c.DigitalOutputs, node); outputs.Add(dos); } c.DigitalOutputs = outputs.ToArray(); // wczytanie konfiguracji wejść cyfrowych List <DigitalInput> inputs = new List <DigitalInput>(); nodes = xml.SelectNodes("configuration/digitalInputs/input"); foreach (XmlNode node in nodes) { DigitalInput input = DigitalInput.Load(node); // znalezienie urządzenia f = devices.Find(delegate(Device o) { return(o.Id == input.DeviceId); }); if (f == null) { throw new Exception("Konfiguracja nie zawiera informacji o urządzeniu z identyfikatorem '" + input.DeviceId + "'."); } input.Device = f; inputs.Add(input); } c.DigitalInputs = inputs.ToArray(); // wczytanie konfiguracji enkoderów List <Encoder> encoders = new List <Encoder>(); nodes = xml.SelectNodes("configuration/encoders/encoder"); foreach (XmlNode node in nodes) { Encoder e = Encoder.Load(c.DigitalInputs, node); encoders.Add(e); } c.Encoders = encoders.ToArray(); // wczytanie konfiguracji wyświetlaczy 7-led List <LED7DisplayOutput> ledOutputs = new List <LED7DisplayOutput>(); nodes = xml.SelectNodes("configuration/displays7LED/display"); foreach (XmlNode node in nodes) { LED7DisplayOutput output = LED7DisplayOutput.Load(node); // znalezienie urządzenia f = devices.Find(delegate(Device o) { return(o.Id == output.DeviceId); }); if (f == null) { throw new Exception("Konfiguracja nie zawiera informacji o urządzeniu z identyfikatorem '" + output.DeviceId + "'."); } output.Device = f; ledOutputs.Add(output); } // sprawdzenie czy jakaś nazwa się nie powtarza foreach (DigitalOutput digo in outputs) { int index = ledOutputs.Count; while (index-- > 0) { if (ledOutputs[index].ID == digo.ID) { ledOutputs.RemoveAt(index); } } } c.LED7DisplayOutputs = ledOutputs.ToArray(); // wczytanie konfiguracji zbiorów wyświetlaczy nodes = xml.SelectNodes("configuration/displays7LED/displaySet"); foreach (XmlNode node in nodes) { LED7DisplayOutputSet dos = LED7DisplayOutputSet.Load(c.LED7DisplayOutputs, node); ledOutputs.Add(dos); } c.LED7DisplayOutputs = ledOutputs.ToArray(); // wczytanie słownika dla wyświetlaczy 7-led LED7DisplaysDictionary.Load(xml.SelectSingleNode("configuration/displays7LEDDictionary")); CreateOrDeletePeripherals(c); __instance = c; } return(__instance); }