/* ... 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;
* 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
*/
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.