chiark / gitweb /
prevent execution of speed and movfeat commands in < Sta_Run
authorian <ian>
Sun, 4 May 2008 19:32:17 +0000 (19:32 +0000)
committerian <ian>
Sun, 4 May 2008 19:32:17 +0000 (19:32 +0000)
hostside/commands.c
hostside/errorcodes.h.gen
hostside/realtime.c
hostside/realtime.h

index 51452617fab7b1e8e1c1ca08a416246f60b9d353..653af2359cbf6a03ca5c5f97efd1794b9f022f7a 100644 (file)
@@ -249,7 +249,7 @@ static int cmd_movpos(ParseState *ps, const CmdInfo *ci) {
 
   MUSTECR( ps_neednoargs(ps) );
 
-  if (!ci->xarg)
+  if (!(ci->xarg & CIXF_FORCE))
     MUSTECRPREDICT( safety_check_movposchange(move,CMDPPC) );
   
   MUSTECR( movpos_change(move,poscomb,ms,0) );
@@ -272,11 +272,11 @@ static int cmd_speed(ParseState *ps, const CmdInfo *ci) {
 }
 
 const CmdInfo toplevel_cmds[]= {
-  { "!pic",       cmd_pic         },
-  { "!nmra",      cmd_nmra,       },
-  { "noop",       cmd_noop        },
-  { "movpos",     cmd_movpos     },
-  { "!movpos",    cmd_movpos, 1  },
-  { "speed",      cmd_speed       },
+  { "!pic",       cmd_pic,    CIXF_ANYSTA|CIXF_FORCE   },
+  { "!nmra",      cmd_nmra,                            },
+  { "noop",       cmd_noop,   CIXF_ANYSTA              },
+  { "movpos",     cmd_movpos                           },
+  { "!movpos",    cmd_movpos, CIXF_ANYSTA|CIXF_FORCE   },
+  { "speed",      cmd_speed                            },
   { 0 }
 };
index c5d5cbcd1d7f6ad9ae6d0eaf41fb3b51b388dc06..186074461d00d5f91b66701d7e0f8dd2e539eb2f 100755 (executable)
@@ -8,6 +8,7 @@
        MovFeatRouteNotFound
        BufferFull
        BadCmd
+       InvalidState
        SignallingPredictedProblem
        SignallingHorizonReached
        );
index 9721fa5ceacbac44b482f0f25c56c0988167b3c9..7d78a0b9f54773db4fa38ec3e30146fc0b06675b 100644 (file)
@@ -207,6 +207,10 @@ static void command_doline(ParseState *ps, CommandInput *cmdi_arg) {
   ci= some_needword_lookup(ps, toplevel_cmds, "command");
   if (!ci) return;
   oprintf(UPO, "executing %s\n",ci->name);
+  if (sta_state < Sta_Run && !(ci->xarg & CIXF_ANYSTA)) {
+    oprintf(UPO,"ack %s InvalidState : layout not ready\n",ci->name);
+    return;
+  }
   r= ci->fn(ps,ci);
   switch (r) {
   case 0:  oprintf(UPO, "ack %s ok\n", ci->name);                    break;
index a261eea3f4d064751b6e72edfd1af26164d7b534..b8c8017c08cc7a50b66fc575ee49f91483f3fa6d 100644 (file)
@@ -115,6 +115,9 @@ extern int picio_send_noise;
 
 #define UPO (&(cmdi.out))
 
+#define CIXF_ANYSTA   1u
+#define CIXF_FORCE    2u
+
 /*---------- from/for startup.c ----------*/
 
 #include "stastate.h"