diff options
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.xtend | 240 |
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 |