public static String GenerateSenderReceiverInterfaceArguments(SenderReceiverInterfaceField field, PortType portType, Boolean MultipleInstantiation = false) { String result = "("; if (MultipleInstantiation) { result += RteFunctionsGenerator.ComponentInstancePointerDatatype + " instance, "; } String dataTypeName = AutosarApplication.GetInstance().GetDataTypeName(field.BaseDataTypeGUID); if (!field.IsPointer) { if (portType == PortType.Receiver) { result += dataTypeName + " * const " + field.Name; } else { result += "const " + dataTypeName + " * const " + field.Name; } } else { if (portType == PortType.Receiver) { result += dataTypeName + " ** const " + field.Name; } else { result += "const " + dataTypeName + "** const " + field.Name; } } return(result + ")"); }
void WriteZeroDefaultValueForSenderPort(StreamWriter writer, PortDefenition portDef, SenderReceiverInterface srInterface) { for (int j = 0; j < srInterface.Fields.Count; j++) { SenderReceiverInterfaceField field = srInterface.Fields[j]; writer.Write(" ." + RteFunctionsGenerator.GenerateRteWriteFieldInComponentDefenitionStruct(portDef, field) + " = "); WriteZeroDefaultValue(writer, field.DataType); if (j < srInterface.Fields.Count - 1) { writer.WriteLine(","); } } }
public static String GenerateReadWriteFunctionName(PortDefenition port, SenderReceiverInterfaceField field) { String res = "Rte_"; if (port.PortType == PortType.Sender) { res += "Write_"; } else { res += "Read_"; } res += port.Name + "_" + field.Name; return(res); }
void GenerateRteReadPortFieldFunction(StreamWriter writer, ComponentDefenition compDef, PortDefenition port, SenderReceiverInterfaceField field) { String returnValue = Properties.Resources.STD_RETURN_TYPE; String RteFuncName = RteFunctionsGenerator.GenerateReadWriteConnectionFunctionName(port, field); String fieldVariable = RteFunctionsGenerator.GenerateSenderReceiverInterfaceArguments(field, port.PortType, compDef.MultipleInstantiation); writer.WriteLine(returnValue + RteFuncName + fieldVariable); writer.WriteLine("{"); if (!compDef.MultipleInstantiation) //single instantiation component { ComponentInstancesList components = AutosarApplication.GetInstance().GetComponentInstanceByDefenition(compDef); if (components.Count > 0) { /* At least one component exists at this step */ ComponentInstance compInstance = components[0]; PortPainter portPainter = compInstance.Ports.FindPortByItsDefenition(port); ComponentInstance oppositCompInstance; PortPainter oppositePort; AutosarApplication.GetInstance().GetOppositePortAndComponent(portPainter, out oppositCompInstance, out oppositePort); if (oppositCompInstance != null) { String copyFromField = RteFunctionsGenerator.GenerateRteWriteFieldInComponentDefenitionStruct(oppositePort.PortDefenition, field); String oppositeCompName = RteFunctionsGenerator.GenerateComponentName(oppositCompInstance.Name); writer.WriteLine(" memcpy(" + field.Name + ", " + "&" + oppositeCompName + "." + copyFromField + ", sizeof(" + field.DataTypeName + "));"); writer.WriteLine(" return " + Properties.Resources.RTE_E_OK + ";"); } else { writer.WriteLine(" memset(" + field.Name + ", " + "0, sizeof(" + field.DataTypeName + "));"); writer.WriteLine(" return " + Properties.Resources.RTE_E_UNCONNECTED + ";"); } } } else //multiple instantiation component { ComponentInstancesList components = AutosarApplication.GetInstance().GetComponentInstanceByDefenition(compDef); if (components.Count > 0) { writer.WriteLine(" switch(((" + compDef.Name + "*)" + "instance)->index)"); writer.WriteLine(" {"); for (int i = 0; i < components.Count; i++) { ComponentInstance compInstance = components[i]; PortPainter portPainter = compInstance.Ports.FindPortByItsDefenition(port); ComponentInstance oppositCompInstance; PortPainter oppositePort; AutosarApplication.GetInstance().GetOppositePortAndComponent(portPainter, out oppositCompInstance, out oppositePort); writer.WriteLine(" case " + i.ToString() + ": "); writer.WriteLine(" {"); if (oppositCompInstance != null) { String copyFromField = RteFunctionsGenerator.GenerateRteWriteFieldInComponentDefenitionStruct(oppositePort.PortDefenition, field); String oppositeCompName = RteFunctionsGenerator.GenerateComponentName(oppositCompInstance.Name); writer.WriteLine(" memcpy(" + field.Name + ", " + "&" + oppositeCompName + "." + copyFromField + ", sizeof(" + field.DataTypeName + "));"); writer.WriteLine(" return " + Properties.Resources.RTE_E_OK + ";"); } else { writer.WriteLine(" memset(" + field.Name + ", " + "0, sizeof(" + field.DataTypeName + "));"); writer.WriteLine(" return " + Properties.Resources.RTE_E_UNCONNECTED + ";"); } writer.WriteLine(" }"); } writer.WriteLine(" }"); } writer.WriteLine(" return " + Properties.Resources.RTE_E_UNCONNECTED + ";"); } writer.WriteLine("}"); writer.WriteLine(""); }
void GenerateRteWritePortFieldFunction(StreamWriter writer, ComponentDefenition compDef, PortDefenition port, SenderReceiverInterfaceField field) { String returnValue = Properties.Resources.STD_RETURN_TYPE; String RteFuncName = RteFunctionsGenerator.GenerateReadWriteConnectionFunctionName(port, field); String fieldVariable = RteFunctionsGenerator.GenerateSenderReceiverInterfaceArguments(field, port.PortType, compDef.MultipleInstantiation); writer.WriteLine(returnValue + RteFuncName + fieldVariable); writer.WriteLine("{"); if (!compDef.MultipleInstantiation) //single instantiation component { ComponentInstancesList components = AutosarApplication.GetInstance().GetComponentInstanceByDefenition(compDef); if (components.Count > 0) { ComponentInstance compInstance = components[0]; String compName = RteFunctionsGenerator.GenerateComponentName(compInstance.Name); String fieldName = RteFunctionsGenerator.GenerateRteWriteFieldInComponentDefenitionStruct(port, field); writer.WriteLine(" " + compName + "." + fieldName + " = *" + field.Name + ";"); } } else //multiple instantiation component { String rteStructFieldName = RteFunctionsGenerator.GenerateRteWriteFieldInComponentDefenitionStruct(port, field); String instanceLine = "((" + compDef.Name + "*)instance)->" + rteStructFieldName + " = *" + field.Name + ";"; writer.WriteLine(" " + instanceLine); } writer.WriteLine(" return " + Properties.Resources.RTE_E_OK + ";"); writer.WriteLine("}"); writer.WriteLine(""); //} }
void GenerateStaticVariablesForSenderPortsWithoutMultipleInstantiation(StreamWriter writer, PortPainter port, SenderReceiverInterfaceField field) { /* Declare variable and its default value */ IElementWithPorts compInst = AutosarApplication.GetInstance().FindComponentInstanceByPortGuid(port.GUID); String staticVariableName = RteFunctionsGenerator.GenerateRte_Component_SRInterface_Name(compInst.Name, port.Name, field); if (!field.IsPointer) { writer.Write("static " + field.DataTypeName + " " + staticVariableName + " ="); writer.Write(GenerateRteComponentSenderReceiverInterfaceField_DefaultValue(compInst.Name, port.Name, field)); } else { writer.Write("static " + field.DataTypeName + "* " + staticVariableName + " = 0"); } writer.WriteLine(";"); writer.WriteLine(""); }
String GenerateRteComponentSenderReceiverInterfaceField_DefaultValue(String ComponentName, String PortName, SenderReceiverInterfaceField field) { String str = ""; if (IsDatatypeSimple(field.BaseDataTypeGUID)) { str = " 0"; } else { str = " { 0 }"; } return(str); }
public void GenerateFieldsForSenderPorts(StreamWriter writer, ComponentDefenition componentDefenition, PortDefenition portDefenition, SenderReceiverInterfaceField srInterfaceField) { writer.WriteLine(" " + srInterfaceField.DataTypeName + " " + RteFunctionsGenerator.GenerateRteWriteFieldInComponentDefenitionStruct(portDefenition, srInterfaceField) + ";"); }
public static String GenerateReadWriteConnectionFunctionName(PortDefenition port, SenderReceiverInterfaceField field) { String res = "Rte_"; if (port.PortType == PortType.Sender) { res += "Write_"; } else { res += "Read_"; } ComponentDefenition compDefenition = AutosarApplication.GetInstance().FindComponentDefenitionByPort(port); res += compDefenition.Name + "_" + port.Name + "_" + field.Name; return(res); }
public static String GenerateRte_Component_SRInterface_Name(String ComponentName, String PortName, SenderReceiverInterfaceField field) { return(ComponentName + "_" + PortName + "_" + field.Name + "_VALUE"); }
public static String GenerateRteWriteFieldInComponentDefenitionStruct(PortDefenition portDefenition, SenderReceiverInterfaceField field) { return("Rte_WriteField_" + portDefenition.Name + "_" + field.Name); }
void GenerateRteReadPortFieldFunction(StreamWriter writer, ComponentDefenition compDef, PortDefenition port, SenderReceiverInterfaceField field) { String returnValue = Properties.Resources.STD_RETURN_TYPE; String RteFuncName = RteFunctionsGenerator.GenerateReadWriteConnectionFunctionName(port, field); String fieldVariable = RteFunctionsGenerator.GenerateSenderReceiverInterfaceArguments(field, port.PortType, compDef.MultipleInstantiation); String fieldName = RteFunctionsGenerator.GenerateReadWriteFunctionName(port, field); writer.WriteLine(returnValue + RteFuncName + fieldVariable); writer.WriteLine("{"); writer.WriteLine(" " + TestArtefactsVariable + "." + fieldName + "." + CallCount + "++;"); writer.WriteLine(" memcpy(" + field.Name + ", &" + TestArtefactsVariable + "." + fieldName + ".Arguments.data, sizeof(" + field.DataTypeName + "));"); writer.WriteLine(" return " + TestArtefactsVariable + "." + fieldName + ".ReturnValue;"); writer.WriteLine("}"); writer.WriteLine(""); }