public ArrayList GetInputMsgStructureReadOnly(int mid, int sid, string protocol) { ArrayList list = new ArrayList(); OutputMsg msg = new OutputMsg(); int num = 0; XmlDocument document = new XmlDocument(); document.Load(this.m_XmlFile); XmlNodeList list2 = document.SelectNodes(string.Concat(new object[] { "/protocols/protocol[@name='", protocol, "']/input/message[@mid='", mid, "'][@subid = '']/field" })); if (list2.Count == 0) { list2 = document.SelectNodes(string.Concat(new object[] { "/protocols/protocol[@name='", protocol, "']/input/message[@mid='", mid, "'][@subid = '", sid, "']/field" })); } try { msg.messageID = mid; int num2 = 0; foreach (XmlNode node in list2) { msg.fieldNumber = ++num2; msg.fieldName = node.Attributes["name"].Value; msg.bytes = int.Parse(node.Attributes["bytes"].Value); msg.datatype = node.Attributes["datatype"].Value; msg.units = node.Attributes["units"].Value; if (node.Attributes["scale"].Value == "") { msg.scale = 1.0; } else { msg.scale = double.Parse(node.Attributes["scale"].Value); } msg.startByte = ((4 + this.m_MsgChannelSize) + 1) + num; msg.endByte = (msg.startByte + msg.bytes) - 1; msg.referenceField = (node.Attributes["referenceField"] != null) ? node.Attributes["referenceField"].Value : (msg.referenceField = ""); num += msg.bytes; list.Add(msg); } this.m_MsgLength = num; } catch (Exception exception) { throw exception; } return list; }
public void MsgFactoryInit(string xmlFile) { this.m_msgHash.Clear(); XmlDocument document = new XmlDocument(); document.Load(xmlFile); foreach (XmlNode node in document.DocumentElement) { int num = 0; string str = node.Attributes["name"].Value; switch (str) { case "F": case "AI3": num = 1; break; } foreach (XmlElement element2 in node.ChildNodes) { string name = element2.Name; switch (name) { case "output": { OutputMsg msg = new OutputMsg(); foreach (XmlElement element3 in element2.ChildNodes) { string attribute = element3.GetAttribute("mid"); string str4 = element3.GetAttribute("subid"); element3.GetAttribute("name"); int num2 = 0; int num3 = 0; int num4 = 0; try { msg.messageID = Convert.ToInt32(attribute); int messageID = 0; if (msg.messageID == 0x45) { messageID = msg.messageID; msg.fieldNumber = messageID; } int num6 = 0; ArrayList list = new ArrayList(); int count = element3.ChildNodes.Count; for (int i = 0; i < count; i++) { if (element3.ChildNodes[i].NodeType != XmlNodeType.Comment) { XmlElement element4 = (XmlElement) element3.ChildNodes[i]; if (element4.GetAttribute("name").Contains("LOOP")) { num2 = int.Parse(element4.GetAttribute("numloops")); num3 = int.Parse(element4.GetAttribute("numlines")); int num9 = i + 1; for (int j = 0; j < num2; j++) { for (int k = 0; k < num3; k++) { element4 = (XmlElement) element3.ChildNodes[num9 + k]; msg.fieldNumber = ++num6; msg.fieldName = element4.GetAttribute("name") + string.Format("{0}", j + 1); msg.bytes = int.Parse(element4.GetAttribute("bytes")); msg.datatype = element4.GetAttribute("datatype"); msg.units = element4.GetAttribute("units"); try { msg.scale = (element4.GetAttribute("scale") == "") ? (msg.scale = 1.0) : (msg.scale = double.Parse(element4.GetAttribute("scale"))); } catch { msg.scale = 1.0; } msg.startByte = ((4 + num) + 1) + num4; msg.endByte = (msg.startByte + msg.bytes) - 1; if (element4.Attributes["referenceField"] != null) { msg.referenceField = element4.GetAttribute("referenceField"); } else { msg.referenceField = ""; } num4 += msg.bytes; list.Add(msg); } } i += num3; } else { msg.fieldNumber = ++num6; msg.fieldName = element4.GetAttribute("name"); msg.bytes = int.Parse(element4.GetAttribute("bytes")); msg.datatype = element4.GetAttribute("datatype"); msg.units = element4.GetAttribute("units"); try { msg.scale = (element4.GetAttribute("scale") == "") ? (msg.scale = 1.0) : (msg.scale = double.Parse(element4.GetAttribute("scale"))); } catch { msg.scale = 1.0; } msg.startByte = ((4 + num) + 1) + num4; msg.endByte = (msg.startByte + msg.bytes) - 1; if (element4.Attributes["referenceField"] != null) { msg.referenceField = element4.GetAttribute("referenceField"); } else { msg.referenceField = ""; } num4 += msg.bytes; list.Add(msg); } } } if (str4 == string.Empty) { str4 = "NA"; } list.Add(num4); string key = str + "_" + name + "_" + attribute + "_" + str4; this.m_msgHash.Add(key, list); } catch { } } break; } case "input": { InputMsg msg2 = new InputMsg(); foreach (XmlElement element5 in element2.ChildNodes) { string str7 = element5.GetAttribute("mid"); string str8 = element5.GetAttribute("subid"); string str9 = element5.GetAttribute("name"); int num12 = 0; int num13 = 0; int num14 = 0; try { msg2.messageID = Convert.ToInt32(str7); int num15 = 0; ArrayList list2 = new ArrayList(); int num16 = element5.ChildNodes.Count; for (int m = 0; m < num16; m++) { if (element5.ChildNodes[m].NodeType == XmlNodeType.Comment) { continue; } XmlElement element6 = (XmlElement) element5.ChildNodes[m]; if (element6.GetAttribute("name").Contains("LOOP")) { num12 = int.Parse(element6.GetAttribute("numloops")); num13 = int.Parse(element6.GetAttribute("numlines")); int num18 = m + 1; for (int n = 0; n < num12; n++) { for (int num20 = 0; num20 < num13; num20++) { element6 = (XmlElement) element5.ChildNodes[num18 + num20]; msg2.fieldNumber = ++num15; msg2.fieldName = element6.GetAttribute("name"); msg2.bytes = int.Parse(element6.GetAttribute("bytes")); msg2.datatype = element6.GetAttribute("datatype"); msg2.units = element6.GetAttribute("units"); if (element6.GetAttribute("scale") == "") { msg2.scale = 1.0; } else { msg2.scale = double.Parse(element6.GetAttribute("scale")); } switch (str) { case "NMEA": case "LPL": msg2.defaultValue = element6.GetAttribute("default"); break; default: if (element6.GetAttribute("default") != null) { if (msg2.datatype != "RAW") { msg2.defaultValue = ConvertHexToDecimal(element6.GetAttribute("default"), msg2.datatype, msg2.scale); } else { msg2.defaultValue = element6.GetAttribute("default"); } } else { msg2.defaultValue = "0"; } break; } if (element6.GetAttribute("savedValue") != null) { msg2.savedValue = element6.GetAttribute("savedValue"); } else { msg2.savedValue = "0"; } num14 += msg2.bytes; list2.Add(msg2); } } m += num13; continue; } msg2.fieldNumber = ++num15; msg2.fieldName = element6.GetAttribute("name"); msg2.bytes = int.Parse(element6.GetAttribute("bytes")); msg2.datatype = element6.GetAttribute("datatype"); msg2.units = element6.GetAttribute("units"); if (element6.GetAttribute("scale") == "") { msg2.scale = 1.0; } else { msg2.scale = double.Parse(element6.GetAttribute("scale")); } switch (str) { case "NMEA": case "LPL": msg2.defaultValue = element6.GetAttribute("default"); break; default: if (element6.GetAttribute("default") != null) { if (msg2.datatype != "RAW") { msg2.defaultValue = ConvertHexToDecimal(element6.GetAttribute("default"), msg2.datatype, msg2.scale); } else { msg2.defaultValue = element6.GetAttribute("default"); } } else { msg2.defaultValue = "0"; } break; } if (element6.GetAttribute("savedValue") != null) { msg2.savedValue = element6.GetAttribute("savedValue"); } else { msg2.savedValue = "0"; } num14 += msg2.bytes; list2.Add(msg2); } if (str8 == string.Empty) { str8 = "NA"; } list2.Add(num14); string str11 = string.Format(clsGlobal.MyCulture, "{0}_{1}_{2}_{3}_{4}", new object[] { str, name, str7, str8, str9 }); this.m_msgHash.Add(str11, list2); } catch { } } break; } } } } }