From 41c08b22a362dc7699ed5ed48ba5cc42153777e3 Mon Sep 17 00:00:00 2001 From: ian Date: Sat, 7 May 2005 14:15:47 +0000 Subject: [PATCH] WIP for new board object numbering scheme --- layout/data2safety | 36 ++++++++++++++++++++++++++++-------- layout/layout-data.h | 10 +++++++++- layout/ours.wiring | 21 +++++++++++++++++++++ 3 files changed, 58 insertions(+), 9 deletions(-) diff --git a/layout/data2safety b/layout/data2safety index b848848..d3b5f71 100755 --- a/layout/data2safety +++ b/layout/data2safety @@ -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"); diff --git a/layout/layout-data.h b/layout/layout-data.h index 65fc803..38c262d 100644 --- a/layout/layout-data.h +++ b/layout/layout-data.h @@ -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 { diff --git a/layout/ours.wiring b/layout/ours.wiring index fd839a5..b0db1e9 100644 --- a/layout/ours.wiring +++ b/layout/ours.wiring @@ -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 -- 2.30.2