From 2198aabaeb3769cd84f43441b327a761e2d55b0b Mon Sep 17 00:00:00 2001
From: Torsten Merz <mer114@moon-ph.nexus.csiro.au>
Date: Tue, 24 Sep 2019 18:37:26 +1000
Subject: [PATCH] added one shot function for NRT tasks

---
 smi/src/smi.c          | 2 ++
 smi/src/smi_def.h      | 2 +-
 smi/src/taskdisp_nrt.c | 6 +++---
 3 files changed, 6 insertions(+), 4 deletions(-)

diff --git a/smi/src/smi.c b/smi/src/smi.c
index 93155ef..fd53aaa 100644
--- a/smi/src/smi.c
+++ b/smi/src/smi.c
@@ -498,6 +498,8 @@ printf("transition\n");
     shm->taskStateSysVar[atomicStateVariables[i].taskStateVar].flags&=~(TASK_EXIT);    
 //    shm->taskStateSysVar[atomicStateVariables[i].taskStateVar].exclusive=        
 //      taskData[atomicStateVariables[i].taskID].exclusive;  
+    shm->taskStateSysVar[atomicStateVariables[i].taskStateVar].oneShot=        
+      taskData[atomicStateVariables[i].taskID].oneShot;  
     shm->taskState[atomicStateVariables[i].taskStateVar].duration=
      taskData[atomicStateVariables[i].taskID].duration;      
 //    shm->taskStateSysVar[atomicStateVariables[i].taskStateVar].oneShot=
diff --git a/smi/src/smi_def.h b/smi/src/smi_def.h
index fb0b0a5..da9d547 100644
--- a/smi/src/smi_def.h
+++ b/smi/src/smi_def.h
@@ -68,7 +68,7 @@ typedef volatile struct {
   taskIDType taskID;
   processType process;
   signed char nrt;
-//  signed char oneShot; // no longer required for NRT as dispatcher waits for SMI
+  signed char oneShot; 
   unsigned char numberOfDataPorts;
   dataPathIDType dataPort[MAX_NUMBER_OF_DATA_PORTS_PER_STATE];
 } taskStateSysVarStruct;
diff --git a/smi/src/taskdisp_nrt.c b/smi/src/taskdisp_nrt.c
index 64e4199..c2f26db 100644
--- a/smi/src/taskdisp_nrt.c
+++ b/smi/src/taskdisp_nrt.c
@@ -193,10 +193,10 @@ usleep(10000);
 	  n=shm->taskStateSysVar[i].process;
 	  if (n==nrtProcessID) {
 	   if ((shm->taskStateSysVar[i].flags&TASK_EXEC)!=0
-/*	    && ((shm->taskStateSysVar[i].oneShot==0
-	      || (shm->taskStateSysVar[i].flags&TASK_ACTIVE)==0
+	    && ((shm->taskStateSysVar[i].oneShot==0
+	      || (shm->taskStateSysVar[i].flags&TASK_EXIT)==0
 	     )
-	    ) */
+	    ) 
 	   ) {
 	    shm->taskStateSysVar[i].flags|=TASK_ACTIVE;
 	    shm->taskStateSysVar[i].flags&=~(TASK_BUSY);        
-- 
GitLab