Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/org.eclipse.etrice.generator.c/src/org/eclipse/etrice/generator/c/gen/ActorClassGen.xtend')
-rw-r--r--plugins/org.eclipse.etrice.generator.c/src/org/eclipse/etrice/generator/c/gen/ActorClassGen.xtend240
1 files changed, 135 insertions, 105 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 44fe509a8..f9583c2fa 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
@@ -56,22 +56,17 @@ class ActorClassGen {
}
def generateHeaderFile(Root root, ExpandedActorClass xpac, ActorClass ac) {'''
- #ifndef _«xpac.name»_H_
- #define _«xpac.name»_H_
+ /**
+ * @author generated by eTrice
+ *
+ * Header File of ActorClass «xpac.name»
+ *
+ */
+
+ «generateIncludeGuardBegin(xpac.name)»
#include "etDatatypes.h"
- package «ac.getPackage»;
-
-««« import org.eclipse.etrice.runtime.java.messaging.Address;
-««« import org.eclipse.etrice.runtime.java.messaging.IRTObject;
-««« import org.eclipse.etrice.runtime.java.messaging.IMessageReceiver;
-««« import org.eclipse.etrice.runtime.java.modelbase.ActorClassBase;
-««« import org.eclipse.etrice.runtime.java.modelbase.SubSystemClassBase;
-««« import org.eclipse.etrice.runtime.java.modelbase.InterfaceItemBase;
-««« import org.eclipse.etrice.runtime.java.debugging.DebuggingService;
-
-
«FOR dataClass : root.getReferencedDataClasses(ac)»#include "«dataClass.name».h"
«ENDFOR»
@@ -80,110 +75,145 @@ class ActorClassGen {
«helpers.UserCode(ac.userCode1)»
+ typedef struct «xpac.name» «xpac.name»;
- public «IF ac.abstract»abstract «ENDIF»class «ac.name» extends «IF ac.base!=null»«ac.base.name»«ELSE»ActorClassBase«ENDIF» {
-
- «helpers.UserCode(ac.userCode2)»
-
- //--------------------- ports
- «FOR ep : ac.getEndPorts()»
- protected «ep.getPortClassName()» «ep.name» = null;
- «ENDFOR»
- //--------------------- saps
- «FOR sap : ac.strSAPs»
- protected «sap.getPortClassName()» «sap.name» = null;
- «ENDFOR»
- //--------------------- services
- «FOR svc : ac.serviceImplementations»
- protected «svc.getPortClassName()» «svc.spp.name» = null;
- «ENDFOR»
-
- //--------------------- interface item IDs
+ /* const part of ActorClass (ROM) */
+ typedef struct «xpac.name»_const {
+ const «xpac.name»* actor;
+ /* Ports */
«FOR ep : ac.getEndPorts()»
- protected static final int IFITEM_«ep.name» = «xpac.getInterfaceItemLocalId(ep)+1»;
- «ENDFOR»
- «FOR sap : ac.strSAPs»
- protected static final int IFITEM_«sap.name» = «xpac.getInterfaceItemLocalId(sap)+1»;
+ const «ep.getPortClassName()» «ep.name»;
«ENDFOR»
- «FOR svc : ac.serviceImplementations»
- protected static final int IFITEM_«svc.spp.name» = «xpac.getInterfaceItemLocalId(svc.spp)+1»;
- «ENDFOR»
-
- «helpers.Attributes(ac.attributes)»
- «helpers.OperationsDeclaration(ac.operations, ac.name)»
-
- //--------------------- construction
- public «ac.name»(IRTObject parent, String name, Address[][] port_addr, Address[][] peer_addr){
- «IF ac.base==null»
- super(parent, name, port_addr[0][0], peer_addr[0][0]);
- «ELSE»
- super(parent, name, port_addr, peer_addr);
- «ENDIF»
- setClassName("«ac.name»");
-
- «ac.attributes.attributeInitialization»
-
- // own ports
- «FOR ep : ac.getEndPorts()»
- «ep.name» = new «ep.getPortClassName()»(this, "«ep.name»", IFITEM_«ep.name», «IF ep.multiplicity==1»0, «ENDIF»port_addr[IFITEM_«ep.name»]«IF ep.multiplicity==1»[0]«ENDIF», peer_addr[IFITEM_«ep.name»]«IF ep.multiplicity==1»[0]«ENDIF»);
- «ENDFOR»
- // own saps
- «FOR sap : ac.strSAPs»
- «sap.name» = new «sap.getPortClassName()»(this, "«sap.name»", IFITEM_«sap.name», 0, port_addr[IFITEM_«sap.name»][0], peer_addr[IFITEM_«sap.name»][0]);
- «ENDFOR»
- // own service implementations
- «FOR svc : ac.serviceImplementations»
- «svc.spp.name» = new «svc.getPortClassName()»(this, "«svc.spp.name»", IFITEM_«svc.spp.name», port_addr[IFITEM_«svc.spp.name»], peer_addr[IFITEM_«svc.spp.name»]);
- «ENDFOR»
- }
+ } «xpac.name»_const;
- //--------------------- lifecycle functions
- public void init(){
- initUser();
- }
-
- public void start(){
- startUser();
- }
-
- «IF !ac.overridesStop()»
- public void stop(){
- stopUser();
- }
- «ENDIF»
-
- public void destroy(){
- destroyUser();
- }
-
- «IF ac.stateMachine != null»
- «stateMachineGen.genStateMachine(xpac, ac)»
- «ELSEIF !xpac.hasStateMachine()»
- //--------------------- no state machine
- @Override
- public void receiveEvent(InterfaceItemBase ifitem, int evt, Object data) {
- handleSystemEvent(ifitem, evt, data);
- }
-
- @Override
- public void executeInitTransition(){
- }
- «ENDIF»
+ /* variable part of ActorClass (RAM) */
+ struct «xpac.name» {
+ const «xpac.name»_const* constData;
};
+
+ void «xpac.name»_ReceiveMessage(void* self, etInt16 localId, const etMessage*);
+
+
+««« public «IF ac.abstract»abstract «ENDIF»class «ac.name» extends «IF ac.base!=null»«ac.base.name»«ELSE»ActorClassBase«ENDIF» {
+«««
+«««
+««« //--------------------- ports
+««« «FOR ep : ac.getEndPorts()»
+««« protected «ep.getPortClassName()» «ep.name» = null;
+««« «ENDFOR»
+««« //--------------------- saps
+««« «FOR sap : ac.strSAPs»
+««« protected «sap.getPortClassName()» «sap.name» = null;
+««« «ENDFOR»
+««« //--------------------- services
+««« «FOR svc : ac.serviceImplementations»
+««« protected «svc.getPortClassName()» «svc.spp.name» = null;
+««« «ENDFOR»
+«««
+««« //--------------------- interface item IDs
+««« «FOR ep : ac.getEndPorts()»
+««« protected static final int IFITEM_«ep.name» = «xpac.getInterfaceItemLocalId(ep)+1»;
+««« «ENDFOR»
+««« «FOR sap : ac.strSAPs»
+««« protected static final int IFITEM_«sap.name» = «xpac.getInterfaceItemLocalId(sap)+1»;
+««« «ENDFOR»
+««« «FOR svc : ac.serviceImplementations»
+««« protected static final int IFITEM_«svc.spp.name» = «xpac.getInterfaceItemLocalId(svc.spp)+1»;
+««« «ENDFOR»
+«««
+««« «helpers.Attributes(ac.attributes)»
+««« «helpers.OperationsDeclaration(ac.operations, ac.name)»
+«««
+««« //--------------------- construction
+««« public «ac.name»(IRTObject parent, String name, Address[][] port_addr, Address[][] peer_addr){
+««« «IF ac.base==null»
+««« super(parent, name, port_addr[0][0], peer_addr[0][0]);
+««« «ELSE»
+««« super(parent, name, port_addr, peer_addr);
+««« «ENDIF»
+««« setClassName("«ac.name»");
+«««
+««« «ac.attributes.attributeInitialization»
+«««
+««« // own ports
+««« «FOR ep : ac.getEndPorts()»
+««« «ep.name» = new «ep.getPortClassName()»(this, "«ep.name»", IFITEM_«ep.name», «IF ep.multiplicity==1»0, «ENDIF»port_addr[IFITEM_«ep.name»]«IF ep.multiplicity==1»[0]«ENDIF», peer_addr[IFITEM_«ep.name»]«IF ep.multiplicity==1»[0]«ENDIF»);
+««« «ENDFOR»
+««« // own saps
+««« «FOR sap : ac.strSAPs»
+««« «sap.name» = new «sap.getPortClassName()»(this, "«sap.name»", IFITEM_«sap.name», 0, port_addr[IFITEM_«sap.name»][0], peer_addr[IFITEM_«sap.name»][0]);
+««« «ENDFOR»
+««« // own service implementations
+««« «FOR svc : ac.serviceImplementations»
+««« «svc.spp.name» = new «svc.getPortClassName()»(this, "«svc.spp.name»", IFITEM_«svc.spp.name», port_addr[IFITEM_«svc.spp.name»], peer_addr[IFITEM_«svc.spp.name»]);
+««« «ENDFOR»
+««« }
+«««
+«««
+««« //--------------------- lifecycle functions
+««« public void init(){
+««« initUser();
+««« }
+«««
+««« public void start(){
+««« startUser();
+««« }
+«««
+««« «IF !ac.overridesStop()»
+««« public void stop(){
+««« stopUser();
+««« }
+««« «ENDIF»
+«««
+««« public void destroy(){
+««« destroyUser();
+««« }
+«««
+«««
+«««
+««« «IF ac.stateMachine != null»
+««« «stateMachineGen.genStateMachine(xpac, ac)»
+««« «ELSEIF !xpac.hasStateMachine()»
+««« //--------------------- no state machine
+««« @Override
+««« public void receiveEvent(InterfaceItemBase ifitem, int evt, Object data) {
+««« handleSystemEvent(ifitem, evt, data);
+««« }
+«««
+««« @Override
+««« public void executeInitTransition(){
+««« }
+««« «ENDIF»
+««« };
+
+ «helpers.UserCode(ac.userCode2)»
- #endif /* _«xpac.name»_H_ */
+ «generateIncludeGuardEnd(xpac.name)»
'''
}
def generateSourceFile(Root root, ExpandedActorClass xpac, ActorClass ac) {'''
- #include "«xpac.getCHeaderFileName»"
-
- '''
+ /**
+ * @author generated by eTrice
+ *
+ * Source File of ActorClass «xpac.name»
+ *
+ */
+
+ #include "«xpac.getCHeaderFileName»"
+
+ «helpers.UserCode(xpac.userCode3)»
+
+ void «xpac.name»_ReceiveMessage(void* self, etInt16 localId, const etMessage*){
+ etLogger_logInfoF("«xpac.name»_ReceiveMessage");
+ }
+
+ '''
}
- def msgArgs(Message msg) {
- '''«IF msg.data!=null»«msg.data.defaultValue()»«ENDIF»'''
- }
+// def msgArgs(Message msg) {
+// '''«IF msg.data!=null»«msg.data.defaultValue()»«ENDIF»'''
+// }
} \ No newline at end of file

Back to the top