예제 #1
0
            /// <summary>
            ///
            /// </summary>
            /// <param name="input">
            /// "\"NodeLayerModules\" STRING ;"
            /// "\"GenSigStartValue\" INT -2147483648 2147483647;"
            /// "\"ModeTransmission\" ENUM  \"P\",\"E\",\"P+E\";"
            /// </param>
            /// <returns></returns>
            public AttributeDefinitionObjectItem Parse(string input)
            {
                string temp = input.Trim(';', ' ');

                string[] array = temp.Split('"');
                Name = array[1];

                if (temp.Contains("STRING"))
                {
                    AttributeType = new AttributeStringDefinition();
                }
                else if (temp.Contains("INT"))
                {
                    temp          = array[2].Trim();
                    array         = temp.Split(' ');
                    AttributeType = new AttributeIntegerDefinition(DbcDatabase.ParseStringToInt32(array[1]), DbcDatabase.ParseStringToInt32(array[2]));
                }
                else if (temp.Contains("ENUM"))
                {
                    AttributeType = new AttributeEnumDefinition();

                    for (int i = 3;
                         i < array.Length;
                         i += 2)
                    {
                        (AttributeType as AttributeEnumDefinition).Items.Add(array[i]);
                    }
                }
                return(this);
            }
예제 #2
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="input">"CM_ SG_ 4 EM_State_Signal \"Jel megjegyzés\";"</param>
 /// <returns></returns>
 public DbcSignalCommentItem Parse(string input)
 {
     string[] array = input.Split(' ');
     ArbitrationId = DbcDatabase.ParseStringToInt32(array[2]);
     Name          = array[3];
     Comment       = input.Substring(input.IndexOf('"')).Trim(new char[] { ';', ' ', '"' });
     return(this);
 }
예제 #3
0
            /// <summary>
            ///
            /// </summary>
            /// <param name="input">CM_ BO_ 2 "Single Line Comment";</param>
            /// <returns></returns>
            public DbcMessageCommentItem Parse(string input)
            {
                string remain = input.Substring("CM_ BO_".Length).Trim(' ');

                ArbitrationId = DbcDatabase.ParseStringToInt32(remain.Substring(0, remain.IndexOf('"')).Trim(' '));
                Comment       = remain.Substring(remain.IndexOf('"')).Trim(new char[] { '"', ';' });
                return(this);
            }
예제 #4
0
            /// <summary>
            ///
            /// </summary>
            /// <param name="input">"BA_ \"GenSigStartValue\" SG_ 31 REVCCEN_SER 1;"</param>
            /// <returns></returns>
            public SignalAttributeValueObjectItem Parse(string input)
            {
                string temp = input.Substring("BA_".Length).Trim(' ', ';');

                string[] array = temp.Split('"');
                Name = array[1];

                temp       = array[2];
                array      = temp.Split(' ');
                ID         = DbcDatabase.ParseStringToInt32(array[2]);
                SignalName = array[3];
                Value      = array[4];
                return(this);
            }
예제 #5
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="input">
        /// "BO_ 143 ERROR_INDICATORS_1: 8 DGT"
        /// </param>
        /// <returns></returns>
        public MessageObjectItem Parse(string input)
        {
            string reamin = string.Empty;

            string[] array  = input.Split(' ');
            int      offset = 0;

            if (array[offset++] == "BO_")
            {
                ArbitrationId = DbcDatabase.ParseStringToInt32(array[offset++]);
                Name          = array[offset++].Trim(new char[] { ' ', ':' });
                Size          = DbcDatabase.ParseStringToInt32(array[offset++]);
                for (; offset < array.Length; offset++)
                {
                    TransmitterNodes.Names.Add(array[offset]);
                }
            }
            return(this);
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="input">Sample: "BO_TX_BU_ 1 : DEMO_NODE,OMRON_NODE,PC_NODE;"</param>
        /// <returns></returns>
        public MessageTransmittersObject Parse(string input)
        {
            input = input.Trim(';');
            string[] array = null;
            if (input.Contains("BO_TX_BU_"))
            {
                /*left*/
                array         = input.Split(':');
                ArbitrationId = DbcDatabase.ParseStringToInt32(array[0].Split(' ')[1]);

                /*right*/
                array[1] = array[1].Trim(' ');
                foreach (string name in array[1].Split(','))
                {
                    TransmitterNames.Add(name);
                }
            }
            return(this);
        }
예제 #7
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="input">
        /// "VAL_TABLE_ ValueTableItem1 3 \"Érték leírása 0x03\" 2 \"Érték leírása 0x02\" 1 \"Érték leírása 0x01\" 0 \"Érték leírása\" ;"
        /// </param>
        /// <returns></returns>
        public ValueTableObjectItem Parse(string input)
        {
            string remain = string.Empty;

            string[] array = input.Split(' ');
            if ("VAL_TABLE_" == array[0])
            {
                remain = input.Substring("VAL_TABLE_".Length);
                Name   = remain.Split(' ')[1];
                remain = remain.Substring(Name.Length + 1).Trim(' ');
                array  = remain.Split('"');
                for (int i = 0;
                     i < (array.Length - 1);
                     i += 2)
                {
                    Descriptions.Add(new ValueDescriptionItem(DbcDatabase.ParseStringToInt32(array[i]), array[i + 1]));
                }
            }
            return(this);
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="input">Sample: "VAL_ 31 DMD_DARK 0 "pas de demande" 1 "Dark 0 demandé" 2 "Dark 2 demandé" 3 "Invalide" ;"</param>
        /// <returns></returns>
        public SignalValueDescriptionsItem Parse(string input)
        {
            string remain = string.Empty;

            string[] array = input.Split(' ');
            if ("VAL_" == array[0])
            {
                remain = input.Substring("VAL_".Length);
                string arbIdStr = remain.Split(' ')[1];
                ArbitrationId = DbcDatabase.ParseStringToInt32(arbIdStr);
                Name          = remain.Split(' ')[2];
                remain        = remain.Substring(Name.Length + arbIdStr.Length + 2).Trim(new char[] { ' ', ';' });
                array         = remain.Split('"');
                for (int i = 0;
                     i < ((array.Length - 1));
                     i += 2)
                {
                    Descriptions.Add(new ValueDescriptionItem(DbcDatabase.ParseStringToInt32(array[i]), array[i + 1]));
                }
            }
            return(this);
        }
예제 #9
0
        void Parse(string[] lines)
        {
            string currentKeyword = "VERSION";

            string multiLineTemp = string.Empty;
            string keyword       = string.Empty;
            bool   complete      = true;

            var messageTemp = new MessageObjectItem();

            int    lineIndex = 0;
            string nextLine  = string.Empty;

            for (lineIndex = 0;
                 lineIndex < lines.Length;
                 lineIndex++)
            {
                string line = lines[lineIndex];

                if (complete)
                {
                    currentKeyword = DbcDatabase.GetKeyword(line);
                }


                switch (currentKeyword)
                {
                case  "VERSION":
                {
                    Dbc.Version.Parse(line);
                    complete = true;
                    break;
                }

                case "NS_":     /*Version and New Symbol Specification*/
                {
                    multiLineTemp += line;
                    if (string.IsNullOrEmpty(line))
                    {
                        multiLineTemp = string.Empty;
                        complete      = true;
                    }
                    else
                    {
                        complete = false;
                    }
                    break;
                }

                case "BS_:":     /*Bit Timing Definition*/
                {
                    Dbc.Timing.Parse(line);
                    complete = true;
                    break;
                }

                case "BU_:":     /*Node Definitions*/
                {
                    Dbc.Nodes.Parse(line);
                    complete = true;
                    break;
                }

                case "VAL_TABLE_":     /*Value Table Definitions*/
                {
                    Dbc.ValueTable.Add(new ValueTableObjectItem().Parse(line));
                    complete = true;
                    break;
                }

                case "VAL_":      /*Signal Value Descriptions (Value Encodings)*/
                {
                    Dbc.SignalsDescriptions.Add(new SignalValueDescriptionsItem().Parse(line));
                    complete = true;
                    break;
                }

                case "BO_":     /*Message*/
                {
                    messageTemp = new MessageObjectItem().Parse(line);
                    Dbc.Messages.Add(messageTemp);
                    complete = true;
                    break;
                }

                case "SG_":     /*Definition of Message Transmitters*/
                {
                    messageTemp.Signals.Add(new SignalItemObject().Parse(line));
                    complete = true;
                    break;
                }

                case "CM_":     /*Comment Definitions*/
                {
                    multiLineTemp += line;
                    if (line.EndsWith(";", StringComparison.InvariantCulture))
                    {
                        Dbc.Comment.Parse(multiLineTemp);
                        multiLineTemp = string.Empty;
                        complete      = true;
                    }
                    else
                    {
                        multiLineTemp += "\r\n";
                        complete       = false;
                    }
                    break;
                }

                case "BA_DEF_":
                {
                    multiLineTemp += line;
                    if (line.EndsWith(";", StringComparison.InvariantCulture))
                    {
                        Dbc.AttributeDefinition.Parse(multiLineTemp);
                        multiLineTemp = string.Empty;
                        complete      = true;
                    }
                    else
                    {
                        multiLineTemp += "\r\n";
                        complete       = false;
                    }
                    break;
                }

                case "BA_":     /*Attribute Values*/
                {
                    Dbc.AttributeValue.Parse(line);
                    complete = true;

                    break;
                }

                default:
                {
                    complete = true;
                    break;
                }
                }
            }
        }
예제 #10
0
 public void LoadFile(string path)
 {
     string[] line = DbcDatabase.ReadFileToStringArray(path);
     Parse(line);
 }
예제 #11
0
 public DbcImporter()
 {
     Dbc = new DbcDatabase();
 }
예제 #12
0
        /// <summary>http://www.thewindowsclub.com/enable-old-windows-clock-calendar-windows-10
        ///
        /// </summary>
        /// <param name="input">
        /// "SG_ COUNT_LINE_FAULT_ERRORS_MAX M : 55|16@0+ (1,0) [0|65535] \"ms\"  PC"
        /// "SG_ DATATION_APPUI_3 : 39|16@0+ (0.1,0) [0|6553.5] \"ms 1\"  PC"
        /// </param>
        /// <returns></returns>
        public SignalItemObject Parse(string input)
        {
            int offset = 0;

            string[] array;

            if (input.Contains("SG_"))
            {
                /*LEFT:*/
                /*Name,MultiplesxerIndicator*/
                string left = input.Substring(0, input.IndexOf(':')).Trim(' ');
                array = left.Split(' ');
                Name  = array[++offset];
                if (array.Length >= offset + 2)
                {
                    MultiplesxerIndicator = array[++offset];
                }
                else
                {
                    MultiplesxerIndicator = string.Empty;
                }

                /*:RIGHT*/
                string right = input.Substring(input.IndexOf(':') + 1).Trim(' ');
                /*Unit*/
                offset = 0;
                array  = null;
                string temp = string.Empty;
                temp = right.Substring(right.IndexOf('"') + 1);
                if (temp.Contains('"'))
                {
                    Unit = temp.Substring(0, temp.IndexOf('"'));
                }
                else
                {
                    Unit = string.Empty;
                }

                /*Minimum, Maximum*/
                offset  = 0;
                array   = null;
                temp    = string.Empty;
                temp    = right.Substring(right.IndexOf('[') + 1, right.IndexOf(']') - right.IndexOf('[') - 1);
                array   = temp.Split('|');
                Minimum = DbcDatabase.ParseStringToDouble(array[offset++]);
                Maximum = DbcDatabase.ParseStringToDouble(array[offset++]);

                /*Factor, Offset*/
                offset = 0;
                array  = null;
                temp   = string.Empty;
                temp   = right.Substring(right.IndexOf('(') + 1, right.IndexOf(')') - right.IndexOf('(') - 1);
                array  = temp.Split(',');
                Factor = DbcDatabase.ParseStringToDouble(array[offset++]);
                Offset = DbcDatabase.ParseStringToDouble(array[offset++]);

                /*StartBit, SignalSize, ByteOrder, ValueType*/
                StartBit   = DbcDatabase.ParseStringToInt32(right.Substring(0, right.IndexOf('|')));
                SignalSize = DbcDatabase.ParseStringToInt32(right.Substring(right.IndexOf('|') + 1, input.IndexOf('@') - input.IndexOf('|') - 1));
                ByteOrder  = right.Substring(right.IndexOf('@') + 1, 1).ToCharArray()[0];
                ValueType  = right.Substring(right.IndexOf('@') + 2, 1).ToCharArray()[0];

                /*Receiver node_name*/
                ReceiverNodeName = right.Split(' ')[right.Split(' ').Length - 1];
            }
            return(this);
        }