Ejemplo n.º 1
0
        public bool Import(string strRulesetFile)
        {
            this.Clear();
            bool Result = false;
            this.RulesetParameters.Clear();
            this.ByteOrders.Clear();
            this.VBFCreationDatas.Clear();
            
            XmlDocument Ruleset = new XmlDocument();

            try
            {
                Ruleset.Load(strRulesetFile);

                XmlNamespaceManager XmlNSMgr = new XmlNamespaceManager(Ruleset.NameTable);
                XmlNSMgr.AddNamespace("Namespace", Ruleset.SelectSingleNode(" * ").NamespaceURI);

                #region Ruleset Page
                XmlNodeList RowsList = Ruleset.SelectSingleNode("Namespace:Workbook/Namespace:Worksheet[@Namespace:Name = 'Ruleset']", XmlNSMgr).SelectSingleNode("Namespace:Table", XmlNSMgr).SelectNodes("Namespace:Row", XmlNSMgr);
                
                int RowsNumber = RowsList.Count;
                //Title
                if (RowsList[0].ChildNodes[0].InnerText.Trim() == "Version")
                    this.Version = RowsList[0].ChildNodes[0].InnerText.Trim();
                if (RowsList[1].ChildNodes[0].InnerText.Trim() == "Partnumber")
                    this.Partnumber = RowsList[1].ChildNodes[0].InnerText.Trim();


                RulesetParameter mParameter = new RulesetParameter();
                RulesetParameter mParameterBackup = new RulesetParameter();
                RulesetOption mRulesetOption = new RulesetOption();
                bool ParameterBackupFlag = false;

                for (int i = RulesetDefaultStartLine -1;i<(RowsNumber); i++)
                {
                    Test = RowsList[i].OuterXml;

 
                    
                    //Remark
                    if (RowsList[i].SelectNodes("*/Namespace:Data", XmlNSMgr).Count == 0)
                    {
                        //Skip Do nothing
                    }
                    else if (RowsList[i].SelectNodes("*/Namespace:Data", XmlNSMgr).Count != 5)
                    {
                        if (!ParameterBackupFlag)
                        {
                            ParameterBackupFlag = true;
                            mParameterBackup = new RulesetParameter();
                            string Statement = RowsList[i].InnerText;
                            string[] StatementList = Statement.Split(new char[] { '[', ']' });
                            if (StatementList.Length == 3)
                            {
                                try
                                {
                                    mParameterBackup.MDF = Convert.ToInt32(StatementList[1], 16);
                                    mParameterBackup.Remark = StatementList[2];
                                }
                                catch
                                {
                                    try
                                    {
                                        mParameterBackup.MDF = Convert.ToInt32(StatementList[1], 2);
                                        mParameterBackup.Remark = StatementList[2];
                                    }
                                    catch
                                    {
                                        mParameterBackup.Remark = Statement;
                                    }

                                }
                            }
                            else
                            {
                                mParameterBackup.Remark = Statement;
                            }
                        }
                    }
                    //Parameter
                    else
                    {
                        if (!ParameterBackupFlag)
                        {
                            RulesetOption t = new RulesetOption();
                            t.Statement = RowsList[i].ChildNodes[4].InnerText.Trim();
                            t.Value = ConvertNum(RowsList[i].ChildNodes[3].InnerText.Trim());
                            if (mParameter.MDF == 0)
                                mParameter.MDF = Convert.ToInt32(RowsList[i].ChildNodes[0].InnerText.Trim() + RowsList[i].ChildNodes[1].InnerText.Trim() + RowsList[i].ChildNodes[2].InnerText.Trim()[0], 16);

                            mParameter.RulesetOptions.Add(t);
                        }
                        else
                        {

                            //New Parameter
                            if (mParameter.BlockID != Convert.ToInt32(RowsList[i].ChildNodes[0].InnerText.Trim(), 16)
                                || mParameter.Byte != Convert.ToInt32(RowsList[i].ChildNodes[1].InnerText.Trim(), 16)
                                || mParameter.Bit != Convert.ToInt32(RowsList[i].ChildNodes[2].InnerText.Trim().Substring(0,1), 16)
                                )
                            {
                                if (mParameter.BlockID == 0 && mParameter.Byte == 0 && mParameter.Bit == 0 && mParameter.BitLength == 0)
                                {
                                    //Don't Save Old
                                }
                                else
                                    //Save Old Parameter
                                    this.RulesetParameters.Add(mParameter);

                                //Format New Parameter
                                mParameter = mParameterBackup;
                                if (mParameter.MDF == 0)
                                    mParameter.MDF = Convert.ToInt32(RowsList[i].ChildNodes[0].InnerText.Trim() + RowsList[i].ChildNodes[1].InnerText.Trim() + RowsList[i].ChildNodes[2].InnerText.Trim()[0], 16);
                                mParameter.BlockID = Convert.ToInt32(RowsList[i].ChildNodes[0].InnerText.Trim(), 16);
                                mParameter.Byte = Convert.ToInt32(RowsList[i].ChildNodes[1].InnerText.Trim(), 16);
                                string BitString = RowsList[i].ChildNodes[2].InnerText.Trim();
                                string[] BitStringList = BitString.Split('-');
                                if (BitStringList.Length == 2)
                                {
                                    mParameter.Bit = Convert.ToInt32(BitStringList[0], 16);
                                    mParameter.BitLength = mParameter.Bit - Convert.ToInt32(BitStringList[1], 16) + 1;
                                }
                                else if (BitStringList.Length == 1)
                                {
                                    mParameter.Bit = Convert.ToInt32(BitStringList[0], 16);
                                    mParameter.BitLength = 1;
                                }
                                else
                                {
                                    throw new Exception();
                                }

                                //Add Option
                                RulesetOption t = new RulesetOption();
                                t.Statement = RowsList[i].ChildNodes[4].InnerText.Trim();
                                t.Value = ConvertNum(RowsList[i].ChildNodes[3].InnerText.Trim());
                                mParameter.RulesetOptions.Add(t);

                            }
                            // Old Parameter
                            else
                            {
                                RulesetOption t = new RulesetOption();
                                t.Statement = RowsList[i].ChildNodes[4].InnerText.Trim();
                                t.Value = ConvertNum(RowsList[i].ChildNodes[3].InnerText.Trim());
                                mParameter.RulesetOptions.Add(t);
                            }
                            ParameterBackupFlag = false;
                        }
                    }

                }

                RulesetParameters.Add(mParameter);
                #endregion

                #region Byte Ordage Page
                RowsList = Ruleset.SelectSingleNode("Namespace:Workbook/Namespace:Worksheet[@Namespace:Name = 'Block Order']", XmlNSMgr).SelectSingleNode("Namespace:Table", XmlNSMgr).SelectNodes("Namespace:Row", XmlNSMgr);
                for (int i = BlockOrderDefaultStartLine - 1; i < RowsList.Count; i++)
                    this.ByteOrders.Add(Convert.ToInt32(RowsList[i].ChildNodes[0].InnerText, 16));
                #endregion

                #region VBFCreationData
                RowsList = Ruleset.SelectSingleNode("Namespace:Workbook/Namespace:Worksheet[@Namespace:Name = 'VBF Creation Data']", XmlNSMgr).SelectSingleNode("Namespace:Table", XmlNSMgr).SelectNodes("Namespace:Row", XmlNSMgr);
                for (int i=1;i<RowsList.Count;i++)
                {
                    VBFCreationData t = new VBFCreationData();
                    if (t.Import(RowsList[i]))
                        this.VBFCreationDatas.Add(t);
                }
                #endregion
                Result = true;
            }
            catch
            {
                
                Result = false;
            }

            return Result;
        }
Ejemplo n.º 2
0
        public List<VBFCreationData> getDataByProject(string Input)
        {
            string[] Condition = Input.Split(' ');
            if (Condition.Length == 1)
            {
                return null;
            }
            else
            {
                string Model = Condition[0];
                string ModelYear = Condition[1].Replace("MY", "");
                string Command = "Cartype/Model[@Name='" + Model + "' and @MY='" + ModelYear + "']";
                XmlNode Target = CarTypeDoc.SelectSingleNode(Command);
                if (Target == null)
                {
                    return null;
                }
                List<VBFCreationData> Result = new List<VBFCreationData>();
                try
                {
                    for (int i = 0; i < Target.ChildNodes.Count; i++)
                    {
                        VBFCreationData t = new VBFCreationData(Target.ChildNodes[i].Attributes["NodeName"].Value
                                         , Target.ChildNodes[i].Attributes["sw_part_type"].Value
                                         , Target.ChildNodes[i].Attributes["network"].Value
                                         , Convert.ToUInt32(Target.ChildNodes[i].Attributes["ecu_address"].Value, 16)
                                         , Convert.ToUInt32(Target.ChildNodes[i].Attributes["parameter_start_address"].Value, 16)
                                         , Convert.ToUInt32(Target.ChildNodes[i].Attributes["parameter_erase_length"].Value, 16)
                                         , Target.ChildNodes[i].Attributes["archive"].Value
                                         , Target.ChildNodes[i].Attributes["ccf_type"].Value
                                         , Target.ChildNodes[i].Attributes["SBL"].Value
                                         , Target.ChildNodes[i].Attributes["Security"].Value
                                         , Target.ChildNodes[i].Attributes["SWDL"].Value);
                        Result.Add(t);

                    }
                }
                catch
                {
                    return null;
                }
 
                return Result;
            }
            
        }