diff --git a/executablecode/Makefile.src b/executablecode/Makefile.src index fa78915f9679b5cabeae6bffa822fe34d4b875bb..c3bde51c3ed45769343d8ad0785ed0a26f538609 100755 --- a/executablecode/Makefile.src +++ b/executablecode/Makefile.src @@ -1 +1 @@ -SRCS = generated_src/main.c generated_src/Wallet.c generated_src/CoffeeMachine.c generated_src/TeaButton.c generated_src/CoffeeButton.c \ No newline at end of file +SRCS = generated_src/main.c generated_src/Block0.c \ No newline at end of file diff --git a/src/avatartranslator/AvatarBlock.java b/src/avatartranslator/AvatarBlock.java index d43c4102e81983441476b681abea8c0b9419d067..e31ce9682c45700542ddd559cb67c656cdae7c21 100644 --- a/src/avatartranslator/AvatarBlock.java +++ b/src/avatartranslator/AvatarBlock.java @@ -440,6 +440,36 @@ public class AvatarBlock extends AvatarElement { return true; } + public int getMaxNbOfParams() { + if (asm == null) { + return 0; + } + + int cpt = 0; + + for(AvatarStateMachineElement asme :asm.getListOfElements()) { + if (asme instanceof AvatarActionOnSignal) { + cpt = Math.max(cpt, ((AvatarActionOnSignal)asme).getNbOfValues()); + } + } + return cpt; + } + + public int getMaxNbOfMultipleBranches() { + if (asm == null) { + return 0; + } + + int cpt = 1; + + for(AvatarStateMachineElement asme :asm.getListOfElements()) { + if (asme instanceof AvatarState) { + cpt = Math.max(cpt, asme.nbOfNexts()); + } + } + return cpt; + } + } \ No newline at end of file diff --git a/src/avatartranslator/toexecutable/AVATAR2CPOSIX.java b/src/avatartranslator/toexecutable/AVATAR2CPOSIX.java index 7d1e719bf432a461fdff28040a4d2ae88d8aab79..01c2af3120cc5927586cedc58ae8e5feaba14b33 100755 --- a/src/avatartranslator/toexecutable/AVATAR2CPOSIX.java +++ b/src/avatartranslator/toexecutable/AVATAR2CPOSIX.java @@ -227,6 +227,11 @@ public class AVATAR2CPOSIX { s += makeAttributesDeclaration(_block, _taskFile); s+= CR + "int __currentState = STATE__START__STATE;" + CR; + s+= "request *__req0, *__req1;" + CR; + int nbOfMaxParams = _block.getMaxNbOfParams(); + for(int i=0; i<_block.getMaxNbOfMultipleBranches(); i++) { + s+= "int *__params0[" + nbOfMaxParams + "];" + CR; + } s+= CR + "char * __myname = (char *)arg;" + CR; @@ -299,6 +304,22 @@ public class AVATAR2CPOSIX { if (_asme instanceof AvatarActionOnSignal) { AvatarActionOnSignal aaos = (AvatarActionOnSignal)_asme; + AvatarSignal as = aaos.getSignal(); + AvatarRelation ar = avspec.getAvatarRelationWithSignal(as); + + if (ar != null) { + if (aaos.isSending()) { + // Putting params + for(i=0; i<aaos.getNbOfValues() ;i++) { + ret += "__params0[" + i + "] = &" + aaos.getValue(i) + ";" + CR; + } + if (ar.isAsynchronous()) { + ret += "__req0 = getNewRequest(SEND_ASYNC_REQUEST, 0, 0, 0, " + aaos.getNbOfValues() + ", __params0);" + CR; + } else { + ret += "__req0 = getNewRequest(SEND_SYNC_REQUEST, 0, 0, 0, " + aaos.getNbOfValues() + ", __params0);" + CR; + } + } + } } @@ -316,7 +337,7 @@ public class AVATAR2CPOSIX { } public void makeThreadsInMain(boolean _debug) { - mainFile.appendToMainCode("/* Threads of tasks */" + CR); + mainFile.appendToMainCode(CR + "/* Threads of tasks */" + CR); for(TaskFile taskFile: taskFiles) { mainFile.appendToMainCode("pthread_t thread__" + taskFile.getName() + ";" + CR); }