Exemple #1
0
        String GenerateComplexDatatypeDefaultValue(ComplexDataType datatype, int indent)
        {
            String strIndent = RteFunctionsGenerator.FillStringForCount("", ' ', indent);
            String str       = "{" + Environment.NewLine;

            for (int i = 0; i < datatype.Fields.Count; i++)
            {
                ComplexDataTypeField field = datatype.Fields[i];
                if (IsDatatypeSimple(field.DataTypeGUID))
                {
                    str += RteFunctionsGenerator.GenerateDefaultValueForSimpleDataTypeField(field.Name, indent + 4);
                }
                else
                {
                    ComplexDataType complexDt = AutosarApplication.GetInstance().ComplexDataTypes.FindObject(field.DataTypeGUID);
                    str += RteFunctionsGenerator.FillStringForCount("", ' ', indent + 4) + "." + field.Name + " = " + Environment.NewLine;
                    str += RteFunctionsGenerator.FillStringForCount("", ' ', indent + 4) + GenerateComplexDatatypeDefaultValue(complexDt, indent + 4);
                }
                if (i != datatype.Fields.Count - 1)
                {
                    str += "," + Environment.NewLine;
                }
            }
            str += Environment.NewLine + strIndent + "}";
            return(str);
        }
        public void WriteSimpleDataType(StreamWriter writer, SimpleDataType datatype)
        {
            writer.WriteLine("/* Datatype : " + datatype.Name + " */");

            /* Write limits */
            String upperLimit = datatype.Name + "_UPPER_LIMIT";
            string maxValue = datatype.MaxValue;
            string minValue = datatype.MinValue;
            if (datatype.GetBaseDataType() == AutosarApplication.GetInstance().BaseDataTypes.float32)
            {
                minValue = acceptFloatValue(datatype.MinValue);
                maxValue = acceptFloatValue(datatype.MaxValue);
            }
            writer.WriteLine(RteFunctionsGenerator.CreateDefine(upperLimit, maxValue));

            String lowerLimit = datatype.Name + "_LOWER_LIMIT";
            writer.WriteLine(RteFunctionsGenerator.CreateDefine(lowerLimit, minValue));

            /* Write datatype */
            String dataTypeName = AutosarApplication.GetInstance().GetDataTypeName(datatype.BaseDataTypeGUID);
            string typedef = RteFunctionsGenerator.FillStringForCount("typedef  " + dataTypeName, ' ', 24);
            writer.WriteLine(typedef + datatype.Name + ";");
            writer.WriteLine("");

            /* Generate an array if it existis*/
            ArrayDataTypeGenerator.GenerateArrayForDataType(writer, datatype);
        }
Exemple #3
0
        void GenerateComponentInstance(StreamWriter writer, ComponentInstance component)
        {
            ComponentDefenition compDefenition = component.ComponentDefenition;

            int elementsCount = compDefenition.Ports.PortsWithSenderInterface().Count + compDefenition.CDataDefenitions.Count + compDefenition.PerInstanceMemoryList.Count;

            if ((elementsCount == 0) && (compDefenition.MultipleInstantiation == false))
            {
                return; // because nothing to generate.
            }

            writer.WriteLine("/* Component instance :" + component.Name + "  */");

            String compDefString = RteFunctionsGenerator.FillStringForCount(compDefenition.Name, ' ', 50);
            String compName      = RteFunctionsGenerator.GenerateComponentName(component.Name);

            writer.WriteLine(compDefString + compName + " = ");
            writer.WriteLine("{");
            /* Fill variables */

            /* Component index */
            if (compDefenition.MultipleInstantiation)
            {
                ComponentInstancesList compInstances = AutosarApplication.GetInstance().GetComponentInstanceByDefenition(compDefenition);
                int compIndex = compInstances.IndexOf(component);
                writer.WriteLine("    .index = " + compIndex.ToString() + ", ");
            }

            /* Pim*/
            int count = 0;

            for (int i = 0; i < compDefenition.PerInstanceMemoryList.Count; i++)
            {
                PimDefenition pimDef = compDefenition.PerInstanceMemoryList[i];
                count++;

                PimInstance pimInstance = component.PerInstanceMemories.GetPim(pimDef.GUID);

                writer.Write("    ." + RteFunctionsGenerator.GenerateRtePimFieldInComponentDefenitionStruct(component.ComponentDefenition, pimDef) + " = ");

                IGUID datatype = pimDef.DataType;
                if ((datatype is BaseDataType) || (datatype is SimpleDataType) || (datatype is EnumDataType))
                {
                    RteFunctionsGenerator.WriteDefaultValueForPimDefenition(writer, component, pimInstance);
                }
                else if (datatype is ArrayDataType)
                {
                    writer.Write(" {{ ");
                    if (!((datatype as ArrayDataType).DataType is PlainDataType))
                    {
                        writer.Write("{ ");
                    }
                    writer.Write(" 0 ");

                    if (!((datatype as ArrayDataType).DataType is PlainDataType))
                    {
                        writer.Write("} ");
                    }

                    writer.Write(" }}");
                }
                else if (datatype is ComplexDataType)
                {
                    writer.Write("{ 0 }");
                }
                if ((i != compDefenition.PerInstanceMemoryList.Count - 1) || ((compDefenition.CDataDefenitions.Count > 0) || (compDefenition.Ports.PortsWithSenderInterface().Count > 0)))
                {
                    writer.WriteLine(",");
                }
            }

            /* CData */
            for (int i = 0; i < compDefenition.CDataDefenitions.Count; i++)
            {
                count++;
                CDataDefenition cdataDef = compDefenition.CDataDefenitions[i];

                CDataInstance cdataInstance = component.CDataInstances.GetCData(cdataDef.GUID);

                writer.Write("    ." + RteFunctionsGenerator.GenerateRteCDataFieldInComponentDefenitionStruct(component.ComponentDefenition, cdataDef) + " = ");

                IGUID datatype = cdataDef.DataType;
                if ((datatype is BaseDataType) || (datatype is SimpleDataType) || (datatype is EnumDataType))
                {
                    RteFunctionsGenerator.WriteDefaultValueForCDataDefenition(writer, component, cdataInstance);
                }
                else if (datatype is ArrayDataType)
                {
                    writer.Write(" {{ ");
                    if (!((datatype as ArrayDataType).DataType is PlainDataType))
                    {
                        writer.Write("{ ");
                    }
                    writer.Write(" 0 ");

                    if (!((datatype as ArrayDataType).DataType is PlainDataType))
                    {
                        writer.Write("} ");
                    }

                    writer.Write(" }}");
                }
                else if (datatype is ComplexDataType)
                {
                    writer.WriteLine(" { 0 }");
                }

                if ((i != compDefenition.CDataDefenitions.Count - 1) || (compDefenition.Ports.PortsWithSenderInterface().Count > 0))
                {
                    writer.WriteLine(",");
                }
            }

            /* Port */
            PortDefenitionsList senderPorts = component.ComponentDefenition.Ports.PortsWithSenderInterface();

            for (int i = 0; i < senderPorts.Count; i++)
            {
                SenderReceiverInterface srInterface = (SenderReceiverInterface)senderPorts[i].InterfaceDatatype;
                WriteZeroDefaultValueForSenderPort(writer, senderPorts[i], srInterface);

                if (i < senderPorts.Count - 1)
                {
                    writer.WriteLine(",");
                }
            }
            writer.WriteLine();
            writer.WriteLine("};");
            writer.WriteLine("");
        }