예제 #1
0
        private static string GenerateCanMessageTypesBody(IEnumerable <CanMessageType> canMessageTypes)
        {
            int           n = 4;
            int           o = 2;
            StringBuilder canMessageTypesBody = new StringBuilder();

            canMessageTypesBody.AppendLine(n * (0 + o), $"// Generated by GenerateCanMessageTypesBody()");
            canMessageTypesBody.AppendLine(n * (0 + o), $"");
            canMessageTypesBody.AppendLine(n * (0 + o), $"static CanMessageTypes()");
            canMessageTypesBody.AppendLine(n * (0 + o), $"{{");
            foreach (var canMessageType in canMessageTypes)
            {
                canMessageTypesBody.AppendLine(n * (1 + o), $"AllCanMessageTypes.Add({canMessageType.Id}, {canMessageType.Name});");
            }
            canMessageTypesBody.AppendLine(n * (0 + o), $"}}");
            canMessageTypesBody.AppendLine(n * (0 + o), $"");
            canMessageTypesBody.AppendLine(n * (0 + o), $"public static Dictionary<UInt32, CanMessageType> AllCanMessageTypes = new Dictionary<UInt32, CanMessageType>();");
            canMessageTypesBody.AppendLine(n * (0 + o), $"");


            foreach (var canMessageType in canMessageTypes)
            {
                canMessageTypesBody.Append(CanDbCSharpCodeGeneration.GenerateCanMessageTypeCode(canMessageType, 2, 4));
            }
            return(canMessageTypesBody.ToString());
        }
예제 #2
0
        private static string GenerateCanExtractionAndInsertionCode(IEnumerable <CanMessageType> canMessageTypes)
        {
            StringBuilder stringBuilder = new StringBuilder();

            foreach (var CanMessageType in canMessageTypes)
            {
                stringBuilder.Append(CanDbCSharpCodeGeneration.GenerateMessageCode(CanMessageType, 1));
            }

            return(stringBuilder.ToString());
        }
예제 #3
0
        // TODO: Modify code such that the CanMessageReceiver class is not static.
        // The constructor should enforce setting the event listener
        // TODO: Make generated classes partial such that they can be extended
        private static string GenerateCanMessageTypesCode(IEnumerable <CanMessageType> canMessageTypes, string namespaceName)
        {
            const int     n             = 4;
            int           o             = 0;
            StringBuilder stringBuilder = new StringBuilder();

            stringBuilder.Append($@"
// This file was generated automatically by the program {Assembly.GetExecutingAssembly().GetName().Name}
// Manual modification is certanly possible, but is disencouraged.
// For manual additions to the database it is better to use the fact the all 
// classes are defined as partial to extend them.

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using CanDefinitions;

");

            string canMessageReceiverBody  = GenerateMessageReceiverBody(canMessageTypes);
            string canMessageReceiverClass = CanDbCSharpCodeGeneration.GenerateClass("public static partial", "CanMessageReceiver", canMessageReceiverBody);

            string canMessageTypesBody  = GenerateCanMessageTypesBody(canMessageTypes);
            string canMessageTypesClass = CanDbCSharpCodeGeneration.GenerateClass("public static partial", "CanMessageTypes", canMessageTypesBody);

            IEnumerable <CanSignalType> allSignals = canMessageTypes.SelectMany(x => x.Signals.Values);
            string canSignalTypesBody  = GenerateCanSignalTypesTypesBody(allSignals);
            string canSignalTypesClass = CanDbCSharpCodeGeneration.GenerateClass("public static partial", "CanSignalTypes", canSignalTypesBody);

            var classes = new List <string>
            {
                canMessageReceiverClass,
                canMessageTypesClass,
                canSignalTypesClass,
            };
            string nameSpaceBase     = CanDbCSharpCodeGeneration.GenerateNameSpace(namespaceName, classes);
            string nameSpaceMessages = CanDbCSharpCodeGeneration.GenerateNameSpace(namespaceName + ".Messages",
                                                                                   new List <string> {
                GenerateCanExtractionAndInsertionCode(canMessageTypes)
            });


            stringBuilder.Append(nameSpaceBase);
            stringBuilder.Append(nameSpaceMessages);


            return(stringBuilder.ToString());
        }