Scicos: add a public function to force a simulation time 63/13863/2
Clément DAVID [Fri, 28 Feb 2014 10:12:15 +0000 (11:12 +0100)]
This function can be used by code-generator to call some blocks from the
standard library using a time in the future. This does not modify the
current simulation time (used by the solver).

Change-Id: I9c41645ab9f03c45b23e021064b051d260090d55

scilab/modules/scicos/includes/scicos.h
scilab/modules/scicos/src/c/Scicos_Export.def
scilab/modules/scicos/src/c/cli/scicos-cli_Export.def
scilab/modules/scicos/src/c/scicos.c

index ab1bf21..18fb28b 100644 (file)
@@ -210,6 +210,11 @@ double get_scicos_time(void);
 /**
 *
 */
+void set_scicos_time(double t);
+
+/**
+*
+*/
 void set_pointer_xproperty(int *pointer);
 
 /**
index 1496158..3ccd230 100644 (file)
@@ -11,6 +11,7 @@ callf
 get_phase_simulation
 set_block_error
 get_scicos_time
+set_scicos_time
 set_pointer_xproperty
 do_cold_restart
 get_block_number
index d24d26e..ab78440 100644 (file)
@@ -11,6 +11,7 @@ callf
 get_phase_simulation
 set_block_error
 get_scicos_time
+set_scicos_time
 set_pointer_xproperty
 do_cold_restart
 get_block_number
index 493a247..4efc122 100644 (file)
@@ -3623,9 +3623,9 @@ void callf(double *t, scicos_block *block, scicos_flag *flag)
     //sciprint("callf type=%d flag=%d\n",block->type,flagi);
     switch (block->type)
     {
-            /*******************/
-            /* function type 0 */
-            /*******************/
+        /*******************/
+        /* function type 0 */
+        /*******************/
         case 0 :
         {
             /* This is for compatibility */
@@ -6152,6 +6152,17 @@ double get_scicos_time(void)
     return scicos_time;
 }
 /*--------------------------------------------------------------------------*/
+/*! \brief set the current simulation time before calling blocks
+ *
+ * As some of the blocks call get_scicos_time(), this is the only way to force
+ * a local time for these blocks. This call does not modify the Xcos solver
+ * time but is only used to step to a future point while calling blocks.
+ */
+void set_scicos_time(double t)
+{
+    scicos_time = t;
+}
+/*--------------------------------------------------------------------------*/
 /* get_block_number : return the current
 * block number
 */