chiark / gitweb /
WIP for new board object numbering scheme
authorian <ian>
Sat, 7 May 2005 14:15:47 +0000 (14:15 +0000)
committerian <ian>
Sat, 7 May 2005 14:15:47 +0000 (14:15 +0000)
layout/data2safety
layout/layout-data.h
layout/ours.wiring

index b8488487452af2b19cf32b8ac8c07d00a3d44b4a..d3b5f712b823c30c7be1a3d87efb4ee4197a6071 100755 (executable)
@@ -12,7 +12,7 @@ our (%segs);
 # $segs{$seg}{Feats}{$pt}{Kind}       Point or Fixed
 # $segs{$seg}{Feats}{$pt}{Weight}     ) for Point only
 # $segs{$seg}{Feats}{$pt}{Posns}      ) for Point only
-# $segs{$seg}{Feats}{$pt}{BoOb}       ) for Point only
+# $segs{$seg}{Feats}{$pt}{BoOb}[]     ) for Point only
 # $segs{$seg}{Feats}{$pt}{Fixed}      position, for Fixed only
 
 # $segs{$seg}{Num}
@@ -170,12 +170,18 @@ sub pa_boob ($) {
        mistake("invalid board object $boob");
        return [ 0,0 ];
     }
-    return sprintf "%d,%2d", $1,$2;
+    return [ $1,$2 ];
 }
 
-sub so_oboob ($) {
-    my ($obj) = @_;
-    return $obj->{BoOb};
+sub so_boob ($$) {
+    my ($k,$bo) = @_;
+    return sprintf "%5d /* %d.%-2d*/", $bo->[0] * 1000 + $bo->[1],
+        $bo->[0], $bo->[1];
+}
+
+sub so_oboob ($$) {
+    my ($k,$obj) = @_;
+    return so_boob($k,$obj->{BoOb});
 }
 
 sub mainread () {
@@ -206,7 +212,7 @@ sub nummap ($) {
 
 sub writeout () {
     my (@segs,$segn,$seg,$segr,$pt,$ptv, $delim);
-    my ($comb,$pi,$feat,$featr,$end);
+    my ($comb,$pi,$feat,$featr,$end,$boob);
     my ($node,$side,$otherend,$nodeotherside,$otherseg,$otherbackrelus);
     o("/* autogenerated - do not edit */\n\n");
     @segs=();
@@ -263,13 +269,27 @@ sub writeout () {
 
        next unless $segr->{FeatCount};
 
+       for $pt (keys %{ $segr->{Feats} }) {
+           $ptv= $segr->{Feats}{$pt};
+           next if exists $ptv->{Fixed};
+           o("static const BoardObject mfbo_${seg}_${pt}[]= {");
+           $delim=' ';
+           foreach $boob (@{ $ptv->{BoOb} }) {
+               o($delim);
+               o(so_boob('pt',$boob));
+               $delim= ', ';
+           }
+           o(" };\n");
+       }
+           
        o("static const MovFeatInfo mfi_${seg}[]= {");
        $delim='';
        for $pt (keys %{ $segr->{Feats} }) {
            $ptv= $segr->{Feats}{$pt};
            next if exists $ptv->{Fixed};
            o("$delim\n");
-           o("  { \"$seg/$pt\", $ptv->{Posns}, $ptv->{Weight} }");
+           o("  { \"$seg/$pt\", mfk_".lc($ptv->{Kind}).",".
+             " $ptv->{Posns}, $ptv->{Weight}, mfbo_${seg}_$pt }");
            $delim=',';
        }
        o("\n};\n");
@@ -284,7 +304,7 @@ sub writeout () {
          "\"$seg\",", $segr->{Inv},
          $segr->{FeatCount}, ($segr->{FeatCount} ? "mfi_$seg," : '0,'),
          $segr->{Posns}, "spci_$seg,",
-         so_oboob($segr));
+         so_oboob('sense',$segr), so_oboob('reverse',$segr));
        $delim= ',';
     }
     o("\n};\n");
index 65fc803115369371e764d340a8d8143f3a94fd03..38c262d437541d3ca9052945332bf6c8db4b4626 100644 (file)
@@ -17,6 +17,7 @@
 typedef unsigned short TrainNum;
 typedef unsigned short SegmentNum;
 typedef unsigned short MovPosComb;
+typedef unsigned short BoardObject;
 
 typedef unsigned char Small;
 
@@ -24,6 +25,11 @@ typedef short Distance;
 typedef char Speed;
   /* for units, see safety.h */
 
+typedef enum {
+  mfk_none,
+  mfk_point
+} MovFeatKind;
+
 /*========== data from config files and layout cad/cam ==========*/
 
 typedef struct {
@@ -33,8 +39,10 @@ typedef struct {
 
 typedef struct {
   const char *pname;
+  MovFeatKind kind;
   Small posns;
   MovPosComb weight;
+  const BoardObject *boob;
 } MovFeatInfo;
 
 typedef struct {
@@ -50,7 +58,7 @@ typedef struct {
   const MovFeatInfo *movfeats;
   MovPosComb n_poscombs;
   const SegPosCombInfo *poscombs;
-  Small board, object;
+  BoardObject sense, invert;
 } SegmentInfo;
 
 typedef struct {
index fd839a58740736d17053265203145e3cf13eec1e..b0db1e94a6e3de8d9a9e304732a1fb4e0ff22c9c 100644 (file)
@@ -1,3 +1,8 @@
+boards
+       0       reversers
+       1       reversers
+       2       detectors
+
 invertible
 #      segment board.invert&sense
        X1      0.3
@@ -33,4 +38,20 @@ fixed
        A5/J0
        A2/P0
 
+pinoutmap
+       # 1..20
+       -
+       A 01 02 04 08 10 20
+       E 01 02 04
+       - - -
+       A 40
+       C 01 02 04 08
+       D 01 02
+       # 21..40
+       D 04 08
+       C 10 20 40 80
+       D 10 20 40 80
+       - -
+       B 01 02 04 08 10 20 40 80
+
 endwiring