示例#1
0
        protected static void ParseDbcAttributeDefinition(string line, CanDatabaseType canDatabaseType)
        {
            var segments = line.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);

            switch (segments[1])
            {
            case "BU_":
                break;

            case "BO_":
                if (segments[2] == "\"Bus\"" && segments[3] == "ENUM")
                {
                    var buses = segments[4].Replace(";", "")                                       // Filter semi-colons
                                .Replace("\"", "")                                                 // Filter quoute marks
                                .Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); // Split on comma
                    foreach (var bus in buses)
                    {
                        canDatabaseType.Buses.Add(bus);
                    }
                }
                break;

            case "SG_":
                break;

            case "EV_":
                break;

            case "":
                break;
            }
        }
示例#2
0
        /// <summary>
        /// Use this function to read a .dbc CAN database file.
        /// </summary>
        /// <param name="fullFilePath">Fulle path to the .dbc file</param>
        /// <returns>CanDataBasType object with all the relevant information from the .dbc file</returns>
        public static CanDatabaseType OpenCanDB(string fullFilePath)
        {
            CanDatabaseType canDatabaseType = new CanDatabaseType();

            canDatabaseType.Name = Path.GetFileNameWithoutExtension(fullFilePath);

            // Read the file line by line.
            //System.IO.StreamReader file = new System.IO.StreamReader(fullFilePath);
            var canDbFile = File.ReadAllLines(fullFilePath).ToList();

            List <String> .Enumerator enumerator = canDbFile.GetEnumerator();
            while (enumerator.MoveNext())
            {
                if (enumerator.Current.StartsWith("BU_"))
                {
                    var nodes = ParseDbcNodeDefinition(enumerator.Current);
                    foreach (var node in nodes)
                    {
                        canDatabaseType.Nodes.Add(node);
                    }
                }

                if (enumerator.Current.StartsWith("BO_"))
                {
                    CanMessageType temp = ParseDbcMessageDefinition(enumerator);
                    canDatabaseType.CanMessageTypes.Add(temp.Id, temp);
                }
                if (enumerator.Current.StartsWith("CM_"))
                {
                    ParseDbcCommentField(enumerator.Current, canDatabaseType.CanMessageTypes);
                }
                if (enumerator.Current.StartsWith("BA_DEF_"))
                {
                    ParseDbcAttributeDefinition(enumerator.Current, canDatabaseType);
                }
                if (enumerator.Current.StartsWith("SIG_VALTYPE_"))
                {
                    ParseDbcTypeDefinition(enumerator.Current, canDatabaseType.CanMessageTypes);
                }
            }

            foreach (var message in canDatabaseType.CanMessageTypes.Values)
            {
                message.QualifiedName = message.Name;
                //message.QualifiedName = canDatabaseType.Name + "." + message.Name;
                foreach (var signal in message.Signals.Values)
                {
                    //signal.QualifiedName = canDatabaseType.Name + "." + signal.QualifiedName;
                }
            }

            return(canDatabaseType);
        }