Ejemplo n.º 1
0
 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;
 }
Ejemplo n.º 2
0
        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;
                        }
                    }
                }
            }
        }