chiark / gitweb /
data structure for features
authorian <ian>
Sat, 12 Apr 2008 12:48:35 +0000 (12:48 +0000)
committerian <ian>
Sat, 12 Apr 2008 12:48:35 +0000 (12:48 +0000)
hostside/realtime.h
hostside/record.c
hostside/safety.h

index c5c152635c1efa7b07eda1242de4cbcc3ac679f0..15007c9204ddc839572eaf3f215f600cfc8970ab 100644 (file)
@@ -73,6 +73,31 @@ void retransmit_urgent_cancel(RetransmitUrgentNode *rn);
   /* ... NB: these are NOT idempotent.  Use _requeue it's queued;
    * _requeue is just _cancel followed by queue. */
 
+/*---------- features, filled in by record, used by features.c ----------*/
+
+typedef struct {
+  int addr, cbitmap;
+  RetransmitRelaxedNode rn[4]; /* nmra feat setting cmds and speed cmd */
+} FeaturesAddr;
+
+typedef struct {
+  FeaturesAddr *a;
+  int bitval; /* may have no or several bits set */
+  int speedstep; /* -ve means backwards; 0 means not to use motor for feat */
+} FeaturesFeature;
+
+typedef struct {
+  char *pname;
+  char *featchs; /* null-terminated for convenience; _ means unused */
+  FeaturesFeature *feats; /* same order as featchs */
+} FeaturesTarget;
+
+extern int n_trains;
+extern Train *trains;
+extern Segment *segments;
+extern int n_feattargs;
+extern FeaturesTarget *feattargs;
+
 /*---------- global variables, in realtime.c ----------*/
 
 extern CommandInput cmdi;
index e247e2fddfa2688cac9128b6cf36c936f4832a39..b3b508f86e6856feed5967ae5c31f347e41ed695 100644 (file)
@@ -10,6 +10,8 @@
  *  train <trainpn> home [-]<segpn> [-]<segpn> [-]<segpn>
  *  seg <segpn> has [-]<ownerpn>
  *  seg <segpn> at <movposcomb>
+ *  feature <trainorfeatpn> <letter> is <addr> <nmranum>
+ *  feature <trainorfeatpn> <letter> is <addr> step [-]<nmranum>
  *
  * speed is in um/s, upwait and downwait are in us
  */
index 82caacf389ed165f93e748c2e86c743e40516b56..518a54bb26ed42a370c00c2f15e29982c55dcc29 100644 (file)
@@ -86,10 +86,6 @@ struct Segment {
   const SegmentInfo *i;
 };
 
-extern int n_trains;
-extern Train *trains;
-extern Segment *segments;
-
 /*========== embed.c ==========*/
 /* surrounds the algorithms and machinery in a program: logging, error
  * handling, arg parsing, etc.