Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHenrik Rentz-Reichert2012-02-21 17:57:50 +0000
committerHenrik Rentz-Reichert2012-02-21 17:57:50 +0000
commit3b74849b3e734c85d747bd65bc3ef6f84360c38f (patch)
treec7973a68b1abb7e9cc9cf06a0f46d648ea1ed0ed /plugins
parent9ecf44556c3d950ec4b227786ee9d6fa78e8227a (diff)
downloadorg.eclipse.etrice-3b74849b3e734c85d747bd65bc3ef6f84360c38f.tar.gz
org.eclipse.etrice-3b74849b3e734c85d747bd65bc3ef6f84360c38f.tar.xz
org.eclipse.etrice-3b74849b3e734c85d747bd65bc3ef6f84360c38f.zip
[generator, generator.c] local port id initialized and safe against unconnected ports
Diffstat (limited to 'plugins')
-rw-r--r--plugins/org.eclipse.etrice.generator.c/src/org/eclipse/etrice/generator/c/gen/ActorClassGen.xtend2
-rw-r--r--plugins/org.eclipse.etrice.generator.c/src/org/eclipse/etrice/generator/c/gen/ProtocolClassGen.xtend38
-rw-r--r--plugins/org.eclipse.etrice.generator.c/src/org/eclipse/etrice/generator/c/gen/SubSystemClassGen.xtend30
-rw-r--r--plugins/org.eclipse.etrice.generator.c/xtend-gen/org/eclipse/etrice/generator/c/gen/ActorClassGen.java36
-rw-r--r--plugins/org.eclipse.etrice.generator.c/xtend-gen/org/eclipse/etrice/generator/c/gen/ProtocolClassGen.java174
-rw-r--r--plugins/org.eclipse.etrice.generator.c/xtend-gen/org/eclipse/etrice/generator/c/gen/SubSystemClassGen.java105
-rw-r--r--plugins/org.eclipse.etrice.generator/model/etricegen.ecore3
-rw-r--r--plugins/org.eclipse.etrice.generator/src/org/eclipse/etrice/generator/etricegen/ETriceGenPackage.java9
-rw-r--r--plugins/org.eclipse.etrice.generator/src/org/eclipse/etrice/generator/etricegen/Root.java8
-rw-r--r--plugins/org.eclipse.etrice.generator/src/org/eclipse/etrice/generator/etricegen/impl/ETriceGenPackageImpl.java3
-rw-r--r--plugins/org.eclipse.etrice.generator/src/org/eclipse/etrice/generator/etricegen/impl/RootImpl.java13
11 files changed, 231 insertions, 190 deletions
diff --git a/plugins/org.eclipse.etrice.generator.c/src/org/eclipse/etrice/generator/c/gen/ActorClassGen.xtend b/plugins/org.eclipse.etrice.generator.c/src/org/eclipse/etrice/generator/c/gen/ActorClassGen.xtend
index 592d13477..608f61ab1 100644
--- a/plugins/org.eclipse.etrice.generator.c/src/org/eclipse/etrice/generator/c/gen/ActorClassGen.xtend
+++ b/plugins/org.eclipse.etrice.generator.c/src/org/eclipse/etrice/generator/c/gen/ActorClassGen.xtend
@@ -95,7 +95,7 @@ class ActorClassGen extends GenericActorClassGenerator {
/* const part of ActorClass (ROM) */
typedef struct «xpac.name»_const {
- const «xpac.name»* actor;
+««« TODO: needed? const «xpac.name»* actor;
/* Ports */
«FOR ep : ac.getEndPorts()»
const «ep.getPortClassName()» «ep.name»;
diff --git a/plugins/org.eclipse.etrice.generator.c/src/org/eclipse/etrice/generator/c/gen/ProtocolClassGen.xtend b/plugins/org.eclipse.etrice.generator.c/src/org/eclipse/etrice/generator/c/gen/ProtocolClassGen.xtend
index ec18a957b..d3b0dfd12 100644
--- a/plugins/org.eclipse.etrice.generator.c/src/org/eclipse/etrice/generator/c/gen/ProtocolClassGen.xtend
+++ b/plugins/org.eclipse.etrice.generator.c/src/org/eclipse/etrice/generator/c/gen/ProtocolClassGen.xtend
@@ -260,37 +260,25 @@ class ProtocolClassGen extends GenericProtocolClassGenerator {
}
def portClassSource(ProtocolClass pc, Boolean conj){
- '''
- «var portClassName = pc.getPortClassName(conj)»
- «var pClass = pc.getPortClass(conj)»
+ var portClassName = pc.getPortClassName(conj)
+ var pClass = pc.getPortClass(conj)
+ var messages = if (conj) pc.allIncomingMessages else pc.allOutgoingMessages
+ var dir = if (conj) "IN_" else "OUT_"
- «IF !conj»
-««« send functions for outgoing messages
- «FOR message : pc.getAllOutgoingMessages()»
- void «portClassName»_«message.name»(const «portClassName»* self){
- ET_MSC_LOGGER_SYNC_ENTRY("«portClassName»", "«message.name»")
- etMessage* msg = etMessageService_getMessageBuffer(self->msgService, sizeof(etMessage));
- msg->address = self->peerAddress;
- msg->evtID = «memberInUse(pc.name, "OUT_"+message.name)»;
- etMessageService_pushMessage(self->msgService, msg);
- ET_MSC_LOGGER_SYNC_EXIT
- }
- «ENDFOR»
- «ELSE»
-««« send functions for incoming messages
- «FOR message : pc.getAllIncomingMessages()»
+ '''
+ «FOR message : messages»
void «portClassName»_«message.name»(const «portClassName»* self){
ET_MSC_LOGGER_SYNC_ENTRY("«portClassName»", "«message.name»")
- etMessage* msg = etMessageService_getMessageBuffer(self->msgService, sizeof(etMessage));
- msg->address = self->peerAddress;
- msg->evtID = «memberInUse(pc.name, "IN_"+message.name)»;
- etMessageService_pushMessage(self->msgService, msg);
+ if (self->receiveMessageFunc!=NULL) {
+ etMessage* msg = etMessageService_getMessageBuffer(self->msgService, sizeof(etMessage));
+ msg->address = self->peerAddress;
+ msg->evtID = «memberInUse(pc.name, dir+message.name)»;
+ etMessageService_pushMessage(self->msgService, msg);
+ }
ET_MSC_LOGGER_SYNC_EXIT
}
+
«ENDFOR»
- «ENDIF»
-
-
'''
}
diff --git a/plugins/org.eclipse.etrice.generator.c/src/org/eclipse/etrice/generator/c/gen/SubSystemClassGen.xtend b/plugins/org.eclipse.etrice.generator.c/src/org/eclipse/etrice/generator/c/gen/SubSystemClassGen.xtend
index d731297f4..c8ae1a94d 100644
--- a/plugins/org.eclipse.etrice.generator.c/src/org/eclipse/etrice/generator/c/gen/SubSystemClassGen.xtend
+++ b/plugins/org.eclipse.etrice.generator.c/src/org/eclipse/etrice/generator/c/gen/SubSystemClassGen.xtend
@@ -18,6 +18,8 @@ import com.google.inject.Singleton
import org.eclipse.etrice.core.room.SubSystemClass
import org.eclipse.etrice.generator.base.ILogger
import org.eclipse.etrice.generator.etricegen.Root
+import org.eclipse.etrice.generator.etricegen.ActorInstance
+import org.eclipse.etrice.generator.etricegen.PortInstance
import org.eclipse.etrice.generator.etricegen.SubSystemInstance
import org.eclipse.xtext.generator.JavaIoFileSystemAccess
import org.eclipse.etrice.generator.extensions.RoomExtensions
@@ -186,15 +188,17 @@ class SubSystemClassGen {
#include "etMessageService.h"
/* instantiation of message services */
+
+ /* pool and block size */
#define MESSAGE_POOL_MAX 10
#define MESSAGE_BLOCK_SIZE 32
+
/* MessageService for Thread1 */
- uint8 msgBuffer_Thread1[MESSAGE_POOL_MAX*MESSAGE_BLOCK_SIZE];
- etMessageService msgService_Thread1;
+ static uint8 msgBuffer_Thread1[MESSAGE_POOL_MAX*MESSAGE_BLOCK_SIZE];
+ static etMessageService msgService_Thread1;
/* include all used ActorClasses */
-««« TODO: only include used Actor Classes for current SubSystem
«FOR actorClass : root.getUsedActorClasses()»#include "«actorClass.name».h"
«ENDFOR»
@@ -214,11 +218,10 @@ class SubSystemClassGen {
/* instance «ai.path.getPathName()» */
static const «ai.actorClass.name»_const «ai.path.getPathName()»_const = {
- &«ai.path.getPathName()»,
+««« TODO: needed? &«ai.path.getPathName()»,
/* Ports: {myActor, etReceiveMessage, msgService, peerAddress, localId} */
«FOR pi : ai.ports»
-««« TODO: not robust if not connected and not implemented for replication
- {&«ai.path.getPathName()», «ai.actorClass.name»_ReceiveMessage, &msgService_Thread1, «pi.peers.get(0).objId», 123} /* Port «pi.name» */
+ «genPortInitializer(root, ai, pi)»
«ENDFOR»
};
@@ -247,6 +250,21 @@ class SubSystemClassGen {
'''
}
+
+ def private String genPortInitializer(Root root, ActorInstance ai, PortInstance pi) {
+ var recvMsg = if (pi.peers.empty) "NULL" else ai.actorClass.name+"_ReceiveMessage"
+ var objId = if (pi.peers.empty) 0 else pi.peers.get(0).objId
+
+ // TODO: no replicated ports yet
+
+ "{&"+ai.path.getPathName()+", "
+ +recvMsg+", "
+ +"&msgService_Thread1, "
+ +objId+", "
+ +(root.getExpandedActorClass(ai).getInterfaceItemLocalId(pi.port)+1)
+ +"} /* Port "+pi.name+" */"
+ }
+
def generateDispatcherFile(Root root, SubSystemInstance ssi, SubSystemClass ssc) {'''
/**
* @author generated by eTrice
diff --git a/plugins/org.eclipse.etrice.generator.c/xtend-gen/org/eclipse/etrice/generator/c/gen/ActorClassGen.java b/plugins/org.eclipse.etrice.generator.c/xtend-gen/org/eclipse/etrice/generator/c/gen/ActorClassGen.java
index 050c49f82..1d4ff0462 100644
--- a/plugins/org.eclipse.etrice.generator.c/xtend-gen/org/eclipse/etrice/generator/c/gen/ActorClassGen.java
+++ b/plugins/org.eclipse.etrice.generator.c/xtend-gen/org/eclipse/etrice/generator/c/gen/ActorClassGen.java
@@ -201,12 +201,6 @@ public class ActorClassGen extends GenericActorClassGenerator {
_builder.append("_const {");
_builder.newLineIfNotEmpty();
_builder.append("\t");
- _builder.append("const ");
- String _name_7 = xpac.getName();
- _builder.append(_name_7, " ");
- _builder.append("* actor;");
- _builder.newLineIfNotEmpty();
- _builder.append("\t");
_builder.append("/* Ports */");
_builder.newLine();
{
@@ -217,29 +211,29 @@ public class ActorClassGen extends GenericActorClassGenerator {
String _portClassName = this.roomExt.getPortClassName(ep);
_builder.append(_portClassName, " ");
_builder.append(" ");
- String _name_8 = ep.getName();
- _builder.append(_name_8, " ");
+ String _name_7 = ep.getName();
+ _builder.append(_name_7, " ");
_builder.append(";");
_builder.newLineIfNotEmpty();
}
}
_builder.append("} ");
- String _name_9 = xpac.getName();
- _builder.append(_name_9, "");
+ String _name_8 = xpac.getName();
+ _builder.append(_name_8, "");
_builder.append("_const;");
_builder.newLineIfNotEmpty();
_builder.newLine();
_builder.append("/* variable part of ActorClass (RAM) */");
_builder.newLine();
_builder.append("struct ");
- String _name_10 = xpac.getName();
- _builder.append(_name_10, "");
+ String _name_9 = xpac.getName();
+ _builder.append(_name_9, "");
_builder.append(" {");
_builder.newLineIfNotEmpty();
_builder.append("\t");
_builder.append("const ");
- String _name_11 = xpac.getName();
- _builder.append(_name_11, " ");
+ String _name_10 = xpac.getName();
+ _builder.append(_name_10, " ");
_builder.append("_const* constData;");
_builder.newLineIfNotEmpty();
_builder.append("\t");
@@ -260,17 +254,17 @@ public class ActorClassGen extends GenericActorClassGenerator {
_builder.newLine();
_builder.newLine();
_builder.append("void ");
+ String _name_11 = xpac.getName();
+ _builder.append(_name_11, "");
+ _builder.append("_init(");
String _name_12 = xpac.getName();
_builder.append(_name_12, "");
- _builder.append("_init(");
- String _name_13 = xpac.getName();
- _builder.append(_name_13, "");
_builder.append("* self);");
_builder.newLineIfNotEmpty();
_builder.newLine();
_builder.append("void ");
- String _name_14 = xpac.getName();
- _builder.append(_name_14, "");
+ String _name_13 = xpac.getName();
+ _builder.append(_name_13, "");
_builder.append("_ReceiveMessage(void* self, void* ifitem, const etMessage* msg);");
_builder.newLineIfNotEmpty();
_builder.newLine();
@@ -279,8 +273,8 @@ public class ActorClassGen extends GenericActorClassGenerator {
_builder.append(_userCode_1, "");
_builder.newLineIfNotEmpty();
_builder.newLine();
- String _name_15 = xpac.getName();
- StringConcatenation _generateIncludeGuardEnd = this.stdExt.generateIncludeGuardEnd(_name_15);
+ String _name_14 = xpac.getName();
+ StringConcatenation _generateIncludeGuardEnd = this.stdExt.generateIncludeGuardEnd(_name_14);
_builder.append(_generateIncludeGuardEnd, "");
_builder.newLineIfNotEmpty();
_builder.newLine();
diff --git a/plugins/org.eclipse.etrice.generator.c/xtend-gen/org/eclipse/etrice/generator/c/gen/ProtocolClassGen.java b/plugins/org.eclipse.etrice.generator.c/xtend-gen/org/eclipse/etrice/generator/c/gen/ProtocolClassGen.java
index 56fe41654..dced5185d 100644
--- a/plugins/org.eclipse.etrice.generator.c/xtend-gen/org/eclipse/etrice/generator/c/gen/ProtocolClassGen.java
+++ b/plugins/org.eclipse.etrice.generator.c/xtend-gen/org/eclipse/etrice/generator/c/gen/ProtocolClassGen.java
@@ -282,113 +282,83 @@ public class ProtocolClassGen extends GenericProtocolClassGenerator {
}
public StringConcatenation portClassSource(final ProtocolClass pc, final Boolean conj) {
- StringConcatenation _builder = new StringConcatenation();
- String _portClassName = this.roomExt.getPortClassName(pc, conj);
- String portClassName = _portClassName;
- _builder.newLineIfNotEmpty();
- PortClass _portClass = this.roomExt.getPortClass(pc, conj);
- PortClass pClass = _portClass;
- _builder.newLineIfNotEmpty();
- _builder.newLine();
+ StringConcatenation _xblockexpression = null;
{
- boolean _operator_not = BooleanExtensions.operator_not(conj);
- if (_operator_not) {
- {
- List<Message> _allOutgoingMessages = this.roomExt.getAllOutgoingMessages(pc);
- for(final Message message : _allOutgoingMessages) {
- _builder.append("void ");
- _builder.append(portClassName, "");
- _builder.append("_");
- String _name = message.getName();
- _builder.append(_name, "");
- _builder.append("(const ");
- _builder.append(portClassName, "");
- _builder.append("* self){");
- _builder.newLineIfNotEmpty();
- _builder.append("\t");
- _builder.append("ET_MSC_LOGGER_SYNC_ENTRY(\"");
- _builder.append(portClassName, " ");
- _builder.append("\", \"");
- String _name_1 = message.getName();
- _builder.append(_name_1, " ");
- _builder.append("\")");
- _builder.newLineIfNotEmpty();
- _builder.append("\t");
- _builder.append("etMessage* msg = etMessageService_getMessageBuffer(self->msgService, sizeof(etMessage));");
- _builder.newLine();
- _builder.append("\t");
- _builder.append("msg->address = self->peerAddress;");
- _builder.newLine();
- _builder.append("\t");
- _builder.append("msg->evtID = ");
- String _name_2 = pc.getName();
- String _name_3 = message.getName();
- String _operator_plus = StringExtensions.operator_plus("OUT_", _name_3);
- String _memberInUse = this.stdExt.memberInUse(_name_2, _operator_plus);
- _builder.append(_memberInUse, " ");
- _builder.append(";");
- _builder.newLineIfNotEmpty();
- _builder.append("\t");
- _builder.append("etMessageService_pushMessage(self->msgService, msg);");
- _builder.newLine();
- _builder.append("\t");
- _builder.append("ET_MSC_LOGGER_SYNC_EXIT");
- _builder.newLine();
- _builder.append("}");
- _builder.newLine();
- }
- }
+ String _portClassName = this.roomExt.getPortClassName(pc, conj);
+ String portClassName = _portClassName;
+ PortClass _portClass = this.roomExt.getPortClass(pc, conj);
+ PortClass pClass = _portClass;
+ List<Message> _xifexpression = null;
+ if (conj) {
+ List<Message> _allIncomingMessages = this.roomExt.getAllIncomingMessages(pc);
+ _xifexpression = _allIncomingMessages;
} else {
- {
- List<Message> _allIncomingMessages = this.roomExt.getAllIncomingMessages(pc);
- for(final Message message_1 : _allIncomingMessages) {
- _builder.append("void ");
- _builder.append(portClassName, "");
- _builder.append("_");
- String _name_4 = message_1.getName();
- _builder.append(_name_4, "");
- _builder.append("(const ");
- _builder.append(portClassName, "");
- _builder.append("* self){");
- _builder.newLineIfNotEmpty();
- _builder.append("\t");
- _builder.append("ET_MSC_LOGGER_SYNC_ENTRY(\"");
- _builder.append(portClassName, " ");
- _builder.append("\", \"");
- String _name_5 = message_1.getName();
- _builder.append(_name_5, " ");
- _builder.append("\")");
- _builder.newLineIfNotEmpty();
- _builder.append("\t");
- _builder.append("etMessage* msg = etMessageService_getMessageBuffer(self->msgService, sizeof(etMessage));");
- _builder.newLine();
- _builder.append("\t");
- _builder.append("msg->address = self->peerAddress;");
- _builder.newLine();
- _builder.append("\t");
- _builder.append("msg->evtID = ");
- String _name_6 = pc.getName();
- String _name_7 = message_1.getName();
- String _operator_plus_1 = StringExtensions.operator_plus("IN_", _name_7);
- String _memberInUse_1 = this.stdExt.memberInUse(_name_6, _operator_plus_1);
- _builder.append(_memberInUse_1, " ");
- _builder.append(";");
- _builder.newLineIfNotEmpty();
- _builder.append("\t");
- _builder.append("etMessageService_pushMessage(self->msgService, msg);");
- _builder.newLine();
- _builder.append("\t");
- _builder.append("ET_MSC_LOGGER_SYNC_EXIT");
- _builder.newLine();
- _builder.append("}");
- _builder.newLine();
- }
+ List<Message> _allOutgoingMessages = this.roomExt.getAllOutgoingMessages(pc);
+ _xifexpression = _allOutgoingMessages;
+ }
+ List<Message> messages = _xifexpression;
+ String _xifexpression_1 = null;
+ if (conj) {
+ _xifexpression_1 = "IN_";
+ } else {
+ _xifexpression_1 = "OUT_";
+ }
+ String dir = _xifexpression_1;
+ StringConcatenation _builder = new StringConcatenation();
+ {
+ for(final Message message : messages) {
+ _builder.append("void ");
+ _builder.append(portClassName, "");
+ _builder.append("_");
+ String _name = message.getName();
+ _builder.append(_name, "");
+ _builder.append("(const ");
+ _builder.append(portClassName, "");
+ _builder.append("* self){");
+ _builder.newLineIfNotEmpty();
+ _builder.append("\t");
+ _builder.append("ET_MSC_LOGGER_SYNC_ENTRY(\"");
+ _builder.append(portClassName, " ");
+ _builder.append("\", \"");
+ String _name_1 = message.getName();
+ _builder.append(_name_1, " ");
+ _builder.append("\")");
+ _builder.newLineIfNotEmpty();
+ _builder.append("\t");
+ _builder.append("if (self->receiveMessageFunc!=NULL) {");
+ _builder.newLine();
+ _builder.append("\t\t");
+ _builder.append("etMessage* msg = etMessageService_getMessageBuffer(self->msgService, sizeof(etMessage));");
+ _builder.newLine();
+ _builder.append("\t\t");
+ _builder.append("msg->address = self->peerAddress;");
+ _builder.newLine();
+ _builder.append("\t\t");
+ _builder.append("msg->evtID = ");
+ String _name_2 = pc.getName();
+ String _name_3 = message.getName();
+ String _operator_plus = StringExtensions.operator_plus(dir, _name_3);
+ String _memberInUse = this.stdExt.memberInUse(_name_2, _operator_plus);
+ _builder.append(_memberInUse, " ");
+ _builder.append(";");
+ _builder.newLineIfNotEmpty();
+ _builder.append("\t\t");
+ _builder.append("etMessageService_pushMessage(self->msgService, msg);");
+ _builder.newLine();
+ _builder.append("\t");
+ _builder.append("}");
+ _builder.newLine();
+ _builder.append("\t");
+ _builder.append("ET_MSC_LOGGER_SYNC_EXIT");
+ _builder.newLine();
+ _builder.append("}");
+ _builder.newLine();
+ _builder.newLine();
}
}
+ _xblockexpression = (_builder);
}
- _builder.newLine();
- _builder.newLine();
- return _builder;
+ return _xblockexpression;
}
public StringConcatenation messageSignature(final ProtocolClass pc, final Message m) {
diff --git a/plugins/org.eclipse.etrice.generator.c/xtend-gen/org/eclipse/etrice/generator/c/gen/SubSystemClassGen.java b/plugins/org.eclipse.etrice.generator.c/xtend-gen/org/eclipse/etrice/generator/c/gen/SubSystemClassGen.java
index 60339a9c9..cfb0570b5 100644
--- a/plugins/org.eclipse.etrice.generator.c/xtend-gen/org/eclipse/etrice/generator/c/gen/SubSystemClassGen.java
+++ b/plugins/org.eclipse.etrice.generator.c/xtend-gen/org/eclipse/etrice/generator/c/gen/SubSystemClassGen.java
@@ -5,11 +5,13 @@ import com.google.inject.Singleton;
import org.eclipse.emf.common.util.EList;
import org.eclipse.etrice.core.room.ActorClass;
import org.eclipse.etrice.core.room.DetailCode;
+import org.eclipse.etrice.core.room.Port;
import org.eclipse.etrice.core.room.ProtocolClass;
import org.eclipse.etrice.core.room.SubSystemClass;
import org.eclipse.etrice.generator.base.ILogger;
import org.eclipse.etrice.generator.c.gen.CExtensions;
import org.eclipse.etrice.generator.etricegen.ActorInstance;
+import org.eclipse.etrice.generator.etricegen.ExpandedActorClass;
import org.eclipse.etrice.generator.etricegen.InterfaceItemInstance;
import org.eclipse.etrice.generator.etricegen.PortInstance;
import org.eclipse.etrice.generator.etricegen.Root;
@@ -17,6 +19,7 @@ import org.eclipse.etrice.generator.etricegen.SubSystemInstance;
import org.eclipse.etrice.generator.extensions.RoomExtensions;
import org.eclipse.etrice.generator.generic.ProcedureHelpers;
import org.eclipse.xtext.generator.JavaIoFileSystemAccess;
+import org.eclipse.xtext.xbase.lib.IntegerExtensions;
import org.eclipse.xtext.xbase.lib.StringExtensions;
import org.eclipse.xtext.xtend2.lib.StringConcatenation;
@@ -470,15 +473,19 @@ public class SubSystemClassGen {
_builder.newLine();
_builder.append("/* instantiation of message services */");
_builder.newLine();
+ _builder.newLine();
+ _builder.append("/* pool and block size */");
+ _builder.newLine();
_builder.append("#define MESSAGE_POOL_MAX 10");
_builder.newLine();
_builder.append("#define MESSAGE_BLOCK_SIZE 32");
_builder.newLine();
+ _builder.newLine();
_builder.append("/* MessageService for Thread1 */");
_builder.newLine();
- _builder.append("uint8 msgBuffer_Thread1[MESSAGE_POOL_MAX*MESSAGE_BLOCK_SIZE];");
+ _builder.append("static uint8 msgBuffer_Thread1[MESSAGE_POOL_MAX*MESSAGE_BLOCK_SIZE];");
_builder.newLine();
- _builder.append("etMessageService msgService_Thread1;");
+ _builder.append("static etMessageService msgService_Thread1;");
_builder.newLine();
_builder.newLine();
_builder.newLine();
@@ -551,36 +558,14 @@ public class SubSystemClassGen {
_builder.append("_const = {");
_builder.newLineIfNotEmpty();
_builder.append("\t");
- _builder.append("&");
- String _path_3 = ai_1.getPath();
- String _pathName_3 = this.roomExt.getPathName(_path_3);
- _builder.append(_pathName_3, " ");
- _builder.append(",");
- _builder.newLineIfNotEmpty();
- _builder.append("\t");
_builder.append("/* Ports: {myActor, etReceiveMessage, msgService, peerAddress, localId} */");
_builder.newLine();
{
EList<PortInstance> _ports = ai_1.getPorts();
for(final PortInstance pi : _ports) {
_builder.append("\t");
- _builder.append("{&");
- String _path_4 = ai_1.getPath();
- String _pathName_4 = this.roomExt.getPathName(_path_4);
- _builder.append(_pathName_4, " ");
- _builder.append(", ");
- ActorClass _actorClass_2 = ai_1.getActorClass();
- String _name_5 = _actorClass_2.getName();
- _builder.append(_name_5, " ");
- _builder.append("_ReceiveMessage, &msgService_Thread1, ");
- EList<InterfaceItemInstance> _peers = pi.getPeers();
- InterfaceItemInstance _get = _peers.get(0);
- int _objId = _get.getObjId();
- _builder.append(_objId, " ");
- _builder.append(", 123} /* Port ");
- String _name_6 = pi.getName();
- _builder.append(_name_6, " ");
- _builder.append(" */");
+ String _genPortInitializer = this.genPortInitializer(root, ai_1, pi);
+ _builder.append(_genPortInitializer, " ");
_builder.newLineIfNotEmpty();
}
}
@@ -589,17 +574,17 @@ public class SubSystemClassGen {
_builder.append("};");
_builder.newLine();
_builder.append("static ");
- ActorClass _actorClass_3 = ai_1.getActorClass();
- String _name_7 = _actorClass_3.getName();
- _builder.append(_name_7, "");
+ ActorClass _actorClass_2 = ai_1.getActorClass();
+ String _name_5 = _actorClass_2.getName();
+ _builder.append(_name_5, "");
_builder.append(" ");
- String _path_5 = ai_1.getPath();
- String _pathName_5 = this.roomExt.getPathName(_path_5);
- _builder.append(_pathName_5, "");
+ String _path_3 = ai_1.getPath();
+ String _pathName_3 = this.roomExt.getPathName(_path_3);
+ _builder.append(_pathName_3, "");
_builder.append(" = {&");
- String _path_6 = ai_1.getPath();
- String _pathName_6 = this.roomExt.getPathName(_path_6);
- _builder.append(_pathName_6, "");
+ String _path_4 = ai_1.getPath();
+ String _pathName_4 = this.roomExt.getPathName(_path_4);
+ _builder.append(_pathName_4, "");
_builder.append("_const};");
_builder.newLineIfNotEmpty();
}
@@ -612,6 +597,56 @@ public class SubSystemClassGen {
return _builder;
}
+ private String genPortInitializer(final Root root, final ActorInstance ai, final PortInstance pi) {
+ String _xblockexpression = null;
+ {
+ String _xifexpression = null;
+ EList<InterfaceItemInstance> _peers = pi.getPeers();
+ boolean _isEmpty = _peers.isEmpty();
+ if (_isEmpty) {
+ _xifexpression = "NULL";
+ } else {
+ ActorClass _actorClass = ai.getActorClass();
+ String _name = _actorClass.getName();
+ String _operator_plus = StringExtensions.operator_plus(_name, "_ReceiveMessage");
+ _xifexpression = _operator_plus;
+ }
+ String recvMsg = _xifexpression;
+ int _xifexpression_1 = (int) 0;
+ EList<InterfaceItemInstance> _peers_1 = pi.getPeers();
+ boolean _isEmpty_1 = _peers_1.isEmpty();
+ if (_isEmpty_1) {
+ _xifexpression_1 = 0;
+ } else {
+ EList<InterfaceItemInstance> _peers_2 = pi.getPeers();
+ InterfaceItemInstance _get = _peers_2.get(0);
+ int _objId = _get.getObjId();
+ _xifexpression_1 = _objId;
+ }
+ int objId = _xifexpression_1;
+ String _path = ai.getPath();
+ String _pathName = this.roomExt.getPathName(_path);
+ String _operator_plus_1 = StringExtensions.operator_plus("{&", _pathName);
+ String _operator_plus_2 = StringExtensions.operator_plus(_operator_plus_1, ", ");
+ String _operator_plus_3 = StringExtensions.operator_plus(_operator_plus_2, recvMsg);
+ String _operator_plus_4 = StringExtensions.operator_plus(_operator_plus_3, ", ");
+ String _operator_plus_5 = StringExtensions.operator_plus(_operator_plus_4, "&msgService_Thread1, ");
+ String _operator_plus_6 = StringExtensions.operator_plus(_operator_plus_5, ((Integer)objId));
+ String _operator_plus_7 = StringExtensions.operator_plus(_operator_plus_6, ", ");
+ ExpandedActorClass _expandedActorClass = root.getExpandedActorClass(ai);
+ Port _port = pi.getPort();
+ int _interfaceItemLocalId = _expandedActorClass.getInterfaceItemLocalId(_port);
+ int _operator_plus_8 = IntegerExtensions.operator_plus(((Integer)_interfaceItemLocalId), ((Integer)1));
+ String _operator_plus_9 = StringExtensions.operator_plus(_operator_plus_7, ((Integer)_operator_plus_8));
+ String _operator_plus_10 = StringExtensions.operator_plus(_operator_plus_9, "} /* Port ");
+ String _name_1 = pi.getName();
+ String _operator_plus_11 = StringExtensions.operator_plus(_operator_plus_10, _name_1);
+ String _operator_plus_12 = StringExtensions.operator_plus(_operator_plus_11, " */");
+ _xblockexpression = (_operator_plus_12);
+ }
+ return _xblockexpression;
+ }
+
public StringConcatenation generateDispatcherFile(final Root root, final SubSystemInstance ssi, final SubSystemClass ssc) {
StringConcatenation _builder = new StringConcatenation();
_builder.append("/**");
diff --git a/plugins/org.eclipse.etrice.generator/model/etricegen.ecore b/plugins/org.eclipse.etrice.generator/model/etricegen.ecore
index 5aa073358..1290ec24f 100644
--- a/plugins/org.eclipse.etrice.generator/model/etricegen.ecore
+++ b/plugins/org.eclipse.etrice.generator/model/etricegen.ecore
@@ -10,6 +10,9 @@
<eOperations name="getReferencedProtocolClasses" upperBound="-1" eType="ecore:EClass ../../org.eclipse.etrice.core.room/src-gen/org/eclipse/etrice/core/Room.ecore#//ProtocolClass">
<eParameters name="cls" eType="ecore:EClass ../../org.eclipse.etrice.core.room/src-gen/org/eclipse/etrice/core/Room.ecore#//ActorClass"/>
</eOperations>
+ <eOperations name="getExpandedActorClass" eType="#//ExpandedActorClass">
+ <eParameters name="ai" eType="#//ActorInstance"/>
+ </eOperations>
<eStructuralFeatures xsi:type="ecore:EAttribute" name="library" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
<eStructuralFeatures xsi:type="ecore:EReference" name="subSystemInstances" upperBound="-1"
eType="#//SubSystemInstance" containment="true"/>
diff --git a/plugins/org.eclipse.etrice.generator/src/org/eclipse/etrice/generator/etricegen/ETriceGenPackage.java b/plugins/org.eclipse.etrice.generator/src/org/eclipse/etrice/generator/etricegen/ETriceGenPackage.java
index 9dd28e19b..2fda2ec6d 100644
--- a/plugins/org.eclipse.etrice.generator/src/org/eclipse/etrice/generator/etricegen/ETriceGenPackage.java
+++ b/plugins/org.eclipse.etrice.generator/src/org/eclipse/etrice/generator/etricegen/ETriceGenPackage.java
@@ -1430,6 +1430,15 @@ public interface ETriceGenPackage extends EPackage {
int EXPANDED_ACTOR_CLASS__ABSTRACT = RoomPackage.ACTOR_CLASS__ABSTRACT;
/**
+ * The feature id for the '<em><b>Comm Type</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int EXPANDED_ACTOR_CLASS__COMM_TYPE = RoomPackage.ACTOR_CLASS__COMM_TYPE;
+
+ /**
* The feature id for the '<em><b>Base</b></em>' reference.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
diff --git a/plugins/org.eclipse.etrice.generator/src/org/eclipse/etrice/generator/etricegen/Root.java b/plugins/org.eclipse.etrice.generator/src/org/eclipse/etrice/generator/etricegen/Root.java
index 603faaae6..6396ce724 100644
--- a/plugins/org.eclipse.etrice.generator/src/org/eclipse/etrice/generator/etricegen/Root.java
+++ b/plugins/org.eclipse.etrice.generator/src/org/eclipse/etrice/generator/etricegen/Root.java
@@ -214,6 +214,14 @@ public interface Root extends EObject {
*/
EList<ProtocolClass> getReferencedProtocolClasses(ActorClass cls);
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @model
+ * @generated
+ */
+ ExpandedActorClass getExpandedActorClass(ActorInstance ai);
+
// TODO: is this the right place ?
HashSet<DataClass> getReferencedDataClasses(DataClass cls);
HashSet<DataClass> getReferencedDataClasses(ActorClass cls);
diff --git a/plugins/org.eclipse.etrice.generator/src/org/eclipse/etrice/generator/etricegen/impl/ETriceGenPackageImpl.java b/plugins/org.eclipse.etrice.generator/src/org/eclipse/etrice/generator/etricegen/impl/ETriceGenPackageImpl.java
index ea8b8fc16..fa2e31be3 100644
--- a/plugins/org.eclipse.etrice.generator/src/org/eclipse/etrice/generator/etricegen/impl/ETriceGenPackageImpl.java
+++ b/plugins/org.eclipse.etrice.generator/src/org/eclipse/etrice/generator/etricegen/impl/ETriceGenPackageImpl.java
@@ -990,6 +990,9 @@ public class ETriceGenPackageImpl extends EPackageImpl implements ETriceGenPacka
op = addEOperation(rootEClass, theRoomPackage.getProtocolClass(), "getReferencedProtocolClasses", 0, -1, IS_UNIQUE, IS_ORDERED);
addEParameter(op, theRoomPackage.getActorClass(), "cls", 0, 1, IS_UNIQUE, IS_ORDERED);
+ op = addEOperation(rootEClass, this.getExpandedActorClass(), "getExpandedActorClass", 0, 1, IS_UNIQUE, IS_ORDERED);
+ addEParameter(op, this.getActorInstance(), "ai", 0, 1, IS_UNIQUE, IS_ORDERED);
+
initEClass(instanceBaseEClass, InstanceBase.class, "InstanceBase", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
initEAttribute(getInstanceBase_Name(), ecorePackage.getEString(), "name", null, 0, 1, InstanceBase.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
initEAttribute(getInstanceBase_Path(), ecorePackage.getEString(), "path", null, 0, 1, InstanceBase.class, IS_TRANSIENT, IS_VOLATILE, !IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, IS_DERIVED, IS_ORDERED);
diff --git a/plugins/org.eclipse.etrice.generator/src/org/eclipse/etrice/generator/etricegen/impl/RootImpl.java b/plugins/org.eclipse.etrice.generator/src/org/eclipse/etrice/generator/etricegen/impl/RootImpl.java
index 9b0b25c76..2ac38a546 100644
--- a/plugins/org.eclipse.etrice.generator/src/org/eclipse/etrice/generator/etricegen/impl/RootImpl.java
+++ b/plugins/org.eclipse.etrice.generator/src/org/eclipse/etrice/generator/etricegen/impl/RootImpl.java
@@ -364,6 +364,19 @@ public class RootImpl extends EObjectImpl implements Root {
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
+ * @generated NOT
+ */
+ public ExpandedActorClass getExpandedActorClass(ActorInstance ai) {
+ for (ExpandedActorClass xpac : getXpActorClasses()) {
+ if (xpac.getActorClass()==ai.getActorClass())
+ return xpac;
+ }
+ return null;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
* @generated
*/
@Override

Back to the top