Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/org.eclipse.etrice.generator.c/src/org/eclipse/etrice')
-rw-r--r--plugins/org.eclipse.etrice.generator.c/src/org/eclipse/etrice/generator/c/gen/ActorClassGen.xtend42
-rw-r--r--plugins/org.eclipse.etrice.generator.c/src/org/eclipse/etrice/generator/c/gen/ProtocolClassGen.xtend46
-rw-r--r--plugins/org.eclipse.etrice.generator.c/src/org/eclipse/etrice/generator/c/gen/SubSystemClassGen.xtend25
-rw-r--r--plugins/org.eclipse.etrice.generator.c/src/org/eclipse/etrice/generator/c/gen/SubSystemRunnerGen.xtend4
4 files changed, 110 insertions, 7 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 3a874e4fd..ab0300045 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
@@ -48,11 +48,22 @@ class ActorClassGen {
fileAccess.setOutputPath(path)
fileAccess.generateFile(xpac.actorClass.getCHeaderFileName, root.generateHeaderFile(xpac, xpac.actorClass))
- // header file
- logger.logInfo("generating ActorClass header '"+xpac.actorClass.getCSourceFileName +"' in '"+path+"'")
- fileAccess.setOutputPath(path)
- fileAccess.generateFile(xpac.actorClass.getCSourceFileName , root.generateSourceFile(xpac, xpac.actorClass))
+ // source file
+ if(hasBehaviorAnnotation(xpac, "BehaviorManual") == false){
+ logger.logInfo("generating ActorClass header '"+xpac.actorClass.getCSourceFileName +"' in '"+path+"'")
+ fileAccess.setOutputPath(path)
+ fileAccess.generateFile(xpac.actorClass.getCSourceFileName , root.generateSourceFile(xpac, xpac.actorClass))
+ }
+ }
+ }
+
+ def hasBehaviorAnnotation(ExpandedActorClass xpac, String annotation) {
+ if (xpac.actorClass.annotations != null){
+ if(xpac.actorClass.annotations.findFirst(e|e.name == annotation) != null){
+ return true;
+ }
}
+ return false;
}
def generateHeaderFile(Root root, ExpandedActorClass xpac, ActorClass ac) {'''
@@ -92,6 +103,8 @@ class ActorClassGen {
const «xpac.name»_const* constData;
};
+ void «xpac.name»_init(«xpac.name»* self);
+
void «xpac.name»_ReceiveMessage(void* self, etInt16 localId, const etMessage* msg);
@@ -205,11 +218,30 @@ class ActorClassGen {
#include "«xpac.getCHeaderFileName»"
#include "etLogger.h"
+
+ #include "etMSCLogger.h"
«helpers.UserCode(xpac.userCode3)»
+ void «xpac.name»_init(«xpac.name»* self){
+ ET_MSC_LOGGER_SYNC_ENTRY("«xpac.name»", "init")
+ «FOR port : xpac.actorClass.endPorts.filter(e|e.conjugated)»
+ «FOR message : port.protocol.incomingMessages»
+ «port.getPortClassName()»_«message.name»(&self->constData->«port.name»);
+ «ENDFOR»
+ «ENDFOR»
+ «FOR port : xpac.actorClass.endPorts.filter(e| !e.conjugated)»
+ «FOR message : port.protocol.outgoingMessages»
+ «port.getPortClassName()»_«message.name»(&self->constData->«port.name»);
+ «ENDFOR»
+ «ENDFOR»
+ ET_MSC_LOGGER_SYNC_EXIT
+ }
+
+
void «xpac.name»_ReceiveMessage(void* self, etInt16 localId, const etMessage* msg){
- etLogger_logInfoF("«xpac.name»_ReceiveMessage");
+ ET_MSC_LOGGER_SYNC_ENTRY("«xpac.name»", "ReceiveMessage")
+ ET_MSC_LOGGER_SYNC_EXIT
}
'''
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 21165613e..acbba5822 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
@@ -112,6 +112,8 @@ class ProtocolClassGen {
#include "«pc.getCHeaderFileName»"
+ #include "etMSCLogger.h"
+
/*--------------------- port classes */
«portClassSource(pc, false)»
«portClassSource(pc, true)»
@@ -246,6 +248,19 @@ class ProtocolClassGen {
typedef etPort «portClassName»;
+ «IF !conj»
+««« send functions for outgoing messages
+ «FOR message : pc.getAllOutgoingMessages()»
+ void «portClassName»_«message.name»(const «portClassName»* self);
+ «ENDFOR»
+ «ELSE»
+««« send functions for incoming messages
+ «FOR message : pc.getAllIncomingMessages()»
+ void «portClassName»_«message.name»(const «portClassName»* self);
+ «ENDFOR»
+ «ENDIF»
+
+
««« «ClassOperationSignature(portClassName, "MyOperation1", "int a, int b", "void", true)»
««« «ClassOperationSignature(portClassName, "MyOperation2", "", "int", false)»
@@ -255,8 +270,35 @@ class ProtocolClassGen {
def portClassSource(ProtocolClass pc, Boolean conj){
'''
- «var name = pc.getPortClassName(conj)»
- «var pclass = pc.getPortClass(conj)»
+ «var portClassName = pc.getPortClassName(conj)»
+ «var pClass = pc.getPortClass(conj)»
+
+ «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 = «outMessageId(pc.name, message.name)»;
+ etMessageService_pushMessage(self->msgService, msg);
+ ET_MSC_LOGGER_SYNC_EXIT
+ }
+ «ENDFOR»
+ «ELSE»
+««« send functions for incoming messages
+ «FOR message : pc.getAllIncomingMessages()»
+ 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 = «inMessageId(pc.name, 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 96edd5de1..969211abc 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
@@ -100,6 +100,8 @@ class SubSystemClassGen {
#include "«ssc.getInstSourceFileName»"
#include "etLogger.h"
+ #include "etMSCLogger.h"
+
/* data for SubSysten «ssc.name» */
typedef struct «ssc.name» {
@@ -108,33 +110,56 @@ class SubSystemClassGen {
static «ssc.name» «ssc.name»Inst = {"«ssc.name»"};
+ void «ssc.name»_initActorInstances(void);
+
void «ssc.name»_init(void){
+ ET_MSC_LOGGER_SYNC_ENTRY("SubSys", "init")
etLogger_logInfoF("%s_init", «ssc.name»Inst.name);
/* initialization of all message services */
etMessageService_init(&msgService_Thread1, msgBuffer_Thread1, MESSAGE_POOL_MAX, MESSAGE_BLOCK_SIZE);
+ /* init all actors */
+ «ssc.name»_initActorInstances();
+
+ ET_MSC_LOGGER_SYNC_EXIT
}
void «ssc.name»_start(void){
+ ET_MSC_LOGGER_SYNC_ENTRY("SubSys", "start")
etLogger_logInfoF("%s_start", «ssc.name»Inst.name);
+ ET_MSC_LOGGER_SYNC_EXIT
}
void «ssc.name»_run(void){
+ ET_MSC_LOGGER_SYNC_ENTRY("SubSys", "run")
int32 i;
for (i=0; i<100; i++){
etLogger_logInfoF("%s Scheduler tick %d", «ssc.name»Inst.name, i);
+ etMessageService_execute(&msgService_Thread1);
}
+ ET_MSC_LOGGER_SYNC_EXIT
}
void «ssc.name»_stop(void){
+ ET_MSC_LOGGER_SYNC_ENTRY("SubSys", "stop")
etLogger_logInfoF("%s_stop", «ssc.name»Inst.name);
+ ET_MSC_LOGGER_SYNC_EXIT
}
void «ssc.name»_destroy(void){
+ ET_MSC_LOGGER_SYNC_ENTRY("SubSys", "destroy")
etLogger_logInfoF("%s_destroy", «ssc.name»Inst.name);
+ ET_MSC_LOGGER_SYNC_EXIT
}
+ void «ssc.name»_initActorInstances(void){
+ ET_MSC_LOGGER_SYNC_ENTRY("«ssc.name»", "initActorInstances")
+ «FOR ai : ssi.allContainedInstances»
+ «ai.actorClass.name»_init(&«ai.path.getPathName()»);
+ «ENDFOR»
+ ET_MSC_LOGGER_SYNC_EXIT
+ }
'''
}
diff --git a/plugins/org.eclipse.etrice.generator.c/src/org/eclipse/etrice/generator/c/gen/SubSystemRunnerGen.xtend b/plugins/org.eclipse.etrice.generator.c/src/org/eclipse/etrice/generator/c/gen/SubSystemRunnerGen.xtend
index f6323b81d..347a45a62 100644
--- a/plugins/org.eclipse.etrice.generator.c/src/org/eclipse/etrice/generator/c/gen/SubSystemRunnerGen.xtend
+++ b/plugins/org.eclipse.etrice.generator.c/src/org/eclipse/etrice/generator/c/gen/SubSystemRunnerGen.xtend
@@ -46,6 +46,8 @@ class SubSystemRunnerGen {
#include "«ssi.name».h"
#include "etLogger.h"
+ #include "etMSCLogger.h"
+
/**
* main function
@@ -55,6 +57,7 @@ class SubSystemRunnerGen {
int main(void) {
etLogger_logInfo("*** T H E B E G I N ***");
+ ET_MSC_LOGGER_OPEN("main");
/* startup sequence of lifecycle */
«ssi.name»_init(); /* lifecycle init */
@@ -67,6 +70,7 @@ class SubSystemRunnerGen {
«ssi.name»_stop(); /* lifecycle stop */
«ssi.name»_destroy(); /* lifecycle destroy */
+ ET_MSC_LOGGER_CLOSE
etLogger_logInfo("*** T H E E N D ***");
return 0;

Back to the top