diff options
Diffstat (limited to 'plugins/org.eclipse.etrice.generator.c/src/org/eclipse/etrice')
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; |