use XML::LibXML;
use Getopt::Long;
use Data::Dumper;
+use FileHandle;
+use Pod::Usage;
$Data::Dumper::Terse = 1;
$Data::Dumper::Useqq = 0;
###############################
-## Get options
+## Get'n'Check options
###############################
Getopt::Long::Configure(qw(gnu_getopt));
GetOptions(
print STDERR "Loading setup $name from file $filename\n" if $verbose;
foreach my $curctrl ($db->getDocumentElement->findnodes('controller')) {
- print STDERR "Found controller id ".$curctrl->getAttribute('id')."\n" if $verbose;
- $boardsini .= proto_boardsini($curctrl->getAttribute('name'),$curctrl->getAttribute('id'),$curctrl->getAttribute('address'));
+ my $ctrlname = $curctrl->getAttribute('name');
+ my $ctrlid = $curctrl->getAttribute('id');
+ my $ctrladdr = $curctrl->getAttribute('address');
+ print STDERR "Found controller $ctrlname id $ctrlid\n" if $verbose;
+ $boardsini .= proto_boardsini($ctrlname,$ctrlid, $ctrladdr);
+
foreach my $curchain ($curctrl->findnodes('chain')) {
- print STDERR " Found chain id ".$curchain->getAttribute('id')."\n" if $verbose;
+ my $chainid = $curchain->getAttribute('id');
+ my $chainname = $curchain->getAttribute('name');
+ print STDERR " Found chain $chainname id $chainid \n" if $verbose;
+ my (@sname, @sfile, @senable);
+
foreach my $cursensor ($curchain->findnodes('sensor')) {
- print STDERR " Found sensor id ".$cursensor->getAttribute('id')."\n" if $verbose;
+ my $sensid = $cursensor->getAttribute('id');
+ my $sensname = $cursensor->getAttribute('name');
+ my $sensfile = $cursensor->getAttribute('config');
+ my $sensena = $cursensor->getAttribute('enabled');
+ print STDERR " Found sensor $sensname id $sensid\n" if $verbose;
+ push(@sname,$sensname);
+ push(@sfile,$sensfile);
+ push(@senable,$sensena);
+
foreach my $cfg ($cursensor->findnodes('config')) {
- print STDERR " Found config\n";
- push(@commands,"./ui.pl -b ".$curctrl->getAttribute('name')." -o ".$cfg->textContent());
+ print STDERR " Found config\n" if $verbose;
+ push(@commands,"./ui.pl -b $ctrlname -o ".$cfg->textContent());
}
}
foreach my $cfg ($curchain->findnodes('config')) {
- print STDERR " Found config\n";
- push(@commands,"./ui.pl -b ".$curctrl->getAttribute('name')." -c ".$curchain->getAttribute("name")." -o ".$cfg->textContent());
+ print STDERR " Found config\n" if $verbose;
+ push(@commands,"./ui.pl -b $ctrlname -c $chainname -o ".$cfg->textContent());
}
+ $chainsini->{$ctrlid} .= proto_chainsini($chainname,$chainid,$ctrladdr,\@sname,\@sfile,\@senable);
}
foreach my $cfg ($curctrl->findnodes('config')) {
- print STDERR " Found config\n";
- push(@commands,"./ui.pl -b ".$curctrl->getAttribute('name')." -o ".$cfg->textContent());
+ print STDERR " Found config\n" if $verbose;
+ push(@commands,"./ui.pl -b $ctrlname -o ".$cfg->textContent());
}
}
###############################
## Write ini files
###############################
+my $boardsinifile = FileHandle->new($defaultIniPath."/boards.ini", 'w');
+print $boardsinifile $boardsini;
+$boardsinifile->close();
+
+foreach my $c (keys $chainsini) {
+ my $chainsinifile = FileHandle->new($defaultIniPath."/chains_board$c.ini", 'w');
+ print $chainsinifile $chainsini->{$c};
+ $chainsinifile->close();
+ }
###############################
sub execute {
my @o;
- $o = qx($_[0]) unless $dryrun;
+ @o = qx($_[0]) unless $dryrun;
print "Not running> $_[0]\n" if $dryrun;
print Dumper @o if $verbose;
}
CONFtrigmapsreset_trbnetAddr=0xb00a
CONFtrigrunjtag_trbnetAddr=0xb00f
CONFtrigwriteonce_trbnetAddr=0xb014
+
+
%;
return $r;
}
+sub proto_chainsini {
+ my ($name,$id,$addr,$sname,$sfile,$senable) = @_;
+ $r = qq%
+[$name]
+FPGAtrbnetAddr=0x$addr
+RAMtrbnetAddr=0xa%.($id*2).qq%00
+CMDreg_trbnetAddr=0xa%.($id*2+1).qq%20
+RAMbase_trbnetAddr=0xa%.($id*2+1).qq%21
+DATAreg_trbnetAddr=0xa%.($id*2+1).qq%22
+STAT_NIBBLEStrbnetAddr=0x008d
+STATUSCRCCHECKtrbnetAddr=0xa%.($id*2+1).qq%00
+STATUS2RAM3BBASEADDRREGtrbnetAddr=0xa%.($id*2+1).qq%63
+STATUS2STARTEDtrbnetAddr=0xa%.($id*2+1).qq%64
+STATUS2RAM3BtrbnetAddr=0xa%.($id*2+1).qq%70
+CONFsignals_trbnetAddr=0xb020
+CONFresetafterfirstwrite_trbnetAddr=0xb011
+CONFresetbeforeinit_trbnetAddr=0xb010
+CONFtrigmapsstart_trbnetAddr=0xb00e
+CONFtrigmapsreset_trbnetAddr=0xb00d
+CONFtrigrunjtag_trbnetAddr=0xb00f
+CONFtrigwriteonce_trbnetAddr=0xb014
+CONFtriginitseq_trbnetAddr=0xb00c
+chainnr=$id
+DEBUGram1baddr=0xa%.($id*2+1).qq%47
+DEBUGram1bdata=0xa%.($id*2+1).qq%48
+DEBUGram1caddr=0xa%.($id*2+1).qq%49
+DEBUGram1cdata=0xa%.($id*2+1).qq%4a
+DEBUGram1crun=0xa%.($id*2+1).qq%4b
+
+;BEGIN GENERATE_CHAINORDER $name
+%;
+for (my $s=0;$s<scalar @{$sname};$s++) {
+ $sfile->[$s] =~ s\.xml\.ini\;
+ $r .=";" unless($senable->[$s]);
+ $r .= "JNR".$s."_".$sname->[$s]."=".$sfile->[$s]."\n";
+ }
+$r .=qq%;END GENERATE_CHAINORDER $name
+
+
+%;
+ return $r;
+}
=head1 NAME
-startup.pl - Run the necessary steps to configure and start MAPS sensors.
+startup.pl - Run the necessary steps to configure and start MAPS sensors
=head1 SYNOPSIS
Options:
-h, --help brief help message
-v, --verbose be verbose to STDERR
- -w, --warnings print warnings to STDERR
+ --dryrun create but don't run scripts
=head1 OPTIONS
=head1 DESCRIPTION
B<This program> runs the necessary steps to configure and start MAPS sensors
+Reads setup xml file and creates corresponding ini files for boards and chains.
=cut