From 3723d2185abe5e6a18af37bb5eb15d099cc4bc49 Mon Sep 17 00:00:00 2001 From: HADES DAQ Date: Thu, 16 Apr 2015 14:13:30 +0200 Subject: [PATCH] Added SFP Rx power readback - Henning --- web/htdocs/network/map.pl | 567 ++++++++++++++++++++++---------------- 1 file changed, 333 insertions(+), 234 deletions(-) diff --git a/web/htdocs/network/map.pl b/web/htdocs/network/map.pl index 9278f55..4a43890 100755 --- a/web/htdocs/network/map.pl +++ b/web/htdocs/network/map.pl @@ -1,13 +1,13 @@ #!/usr/bin/perl if ($ENV{'SERVER_SOFTWARE'} =~ /HTTPi/i) { - print "HTTP/1.0 200 OK\n"; - print "Content-type: text/html\r\n\r\n"; - } + print "HTTP/1.0 200 OK\n"; + print "Content-type: text/html\r\n\r\n"; +} else { - use lib '..'; + use lib '..'; # use if (!($ENV{'SERVER_SOFTWARE'} =~ /HTTPi/i)), apacheEnv; - print "Content-type: text/html\n\n"; - } + print "Content-type: text/html\n\n"; +} use CGI ':standard'; use HADES::TrbNet; @@ -18,266 +18,365 @@ use xmlpage; use Data::Dumper; use Date::Format qw(time2str); use v5.10; +use Term::ANSIColor; ############################################################################### ## Network Map ############################################################################### if($ENV{'QUERY_STRING'} =~ /getmap/) { # print "Getting map"; - - trb_init_ports() or - die("can not connect to trbnet-daemon on the $ENV{'DAQOPSERVER'}"); - my $boards = trb_read_uid(0xffff); - my $temp = trb_register_read(0xffff,0); - my $ctime = trb_register_read(0xffff,0x40); - my $inclLow = trb_register_read(0xffff,0x41); - my $hardware = trb_register_read(0xffff,0x42); - my $inclHigh = trb_register_read(0xffff,0x43); + trb_init_ports() or + die("can not connect to trbnet-daemon on the $ENV{'DAQOPSERVER'}"); + + my $boards = trb_read_uid(0xffff); + my $temp = trb_register_read(0xffff,0); + my $sfpDat1 = trb_register_read(0xffff,0xd201); + my $sfpDat2 = trb_register_read(0xffff,0xd202); + my $ctime = trb_register_read(0xffff,0x40); + my $inclLow = trb_register_read(0xffff,0x41); + my $hardware = trb_register_read(0xffff,0x42); + my $inclHigh = trb_register_read(0xffff,0x43); - my @store; - my $tree; - my $lastlayer = 1; - - foreach my $id (keys %{$boards}) { - foreach my $f (keys %{$boards->{$id}}) { - my $addr = $boards->{$id}->{$f}; - next if $addr == 0xfc00; - my @path = trb_nettrace($addr); - my $parent, my $port; - if(scalar @path == 0) { - $parent = 0; - $port = 0; - } - else { - $parent = $path[-1][-1]->{address}; - $port = $path[-1][-1]->{port}; - } - $tree->{$parent}->[$port]->{addr} = $addr; - } + my @store; + my $tree; + my $lastlayer = 1; + + foreach my $id (keys %{$boards}) { + foreach my $f (keys %{$boards->{$id}}) { + my $addr = $boards->{$id}->{$f}; + next if $addr == 0xfc00; + my @path = trb_nettrace($addr); + my $parent, my $port; + if(scalar @path == 0) { + $parent = 0; + $port = 0; + } + else { + $parent = $path[-1][-1]->{address}; + $port = $path[-1][-1]->{port}; + } + $tree->{$parent}->[$port]->{addr} = $addr; + } } + - - print "
BoardHardwareDesignCompile TimeTemperature\n"; - printlist(0,1); - print "
"; - - sub printlist { + print "
BoardHardwareDesignCompile TimeTemperatureLink Strength SFP1Link Strength SFP8\n"; + printlist(0,1); + print "
"; + + sub printlist { my ($parent,$layer) = @_; if($layer > 16) {die "More than 16 layers of network devices found. Aborting."} my @o; for (my $p = 0; $p < scalar (@{$tree->{$parent}}); $p++) { - next unless defined $tree->{$parent}->[$p]; - my $addr = $tree->{$parent}->[$p]->{addr}; - my $btype = ""; - for($hardware->{$addr}>>24&0xff) { - when (0x90) {$btype= "TRB3 central";} - when (0x91) {$btype= "TRB3 periph";} - when (0x92) {$btype= "CBM-Rich";} - when (0x93) {$btype= "CBM-Tof";} - when (0x83) {$btype= "TRB2 RPC";} - when (0x81) {$btype= "TRB2 TOF";} - when (0x62) {$btype= "Hub AddOn";} - when (0x52) {$btype= "CTS";} - when (0x42) {$btype= "Shower AddOn";} - when (0x33) {$btype= "RICH ADCM"; } - when (0x23) {$btype= "MDC OEP"; } - when (0x12) {$btype= "MDC Hub"; } + next unless defined $tree->{$parent}->[$p]; + my $addr = $tree->{$parent}->[$p]->{addr}; + my $btype = ""; + for($hardware->{$addr}>>24&0xff) { + when (0x90) {$btype= "TRB3 central";} + when (0x91) {$btype= "TRB3 periph";} + when (0x92) {$btype= "CBM-Rich";} + when (0x93) {$btype= "CBM-Tof";} + when (0x83) {$btype= "TRB2 RPC";} + when (0x81) {$btype= "TRB2 TOF";} + when (0x62) {$btype= "Hub AddOn";} + when (0x52) {$btype= "CTS";} + when (0x42) {$btype= "Shower AddOn";} + when (0x33) {$btype= "RICH ADCM"; } + when (0x23) {$btype= "MDC OEP"; } + when (0x12) {$btype= "MDC Hub"; } } - my $addontype = ""; - if(($hardware->{$addr}>>24&0xff) == 0x91) { - for($hardware->{$addr}>>12 & 0xF) { - when (0) {$addontype= " & ADA v1";} - when (1) {$addontype= " & ADA v2";} - when (2) {$addontype= " & Multitest";} - when (3) {$addontype= " & SFP";} - when (4) {$addontype= " & Padiwa";} - when (5) {$addontype= " & GPIN";} - when (6) {$addontype= " & Nxyter";} - when (7) {$addontype= " & 32PinAddOn";} - when (9) {$addontype= " & ADC AddOn";} - } + my $addontype = ""; + if(($hardware->{$addr}>>24&0xff) == 0x91) { + for($hardware->{$addr}>>12 & 0xF) { + when (0) {$addontype= " & ADA v1";} + when (1) {$addontype= " & ADA v2";} + when (2) {$addontype= " & Multitest";} + when (3) {$addontype= " & SFP";} + when (4) {$addontype= " & Padiwa";} + when (5) {$addontype= " & GPIN";} + when (6) {$addontype= " & Nxyter";} + when (7) {$addontype= " & 32PinAddOn";} + when (9) {$addontype= " & ADC AddOn";} + } } - my $feat = ""; - my $table = $inclHigh->{$addr}>>24&0xFF; - if($table == 0) { - my $hw = $hardware->{$addr}; - if(($hw>>24&0xff) == 0x91 || ($hw>>24&0xff) == 0x92 || ($hw>>24&0xff) == 0x93) { - if(($hw & 0x8000) == 0x8000) {$feat .= "RX sync, ";} - if(($hw & 0x0b00) == 0x000 && ($hw>>12 & 0x7) != 6 && ($hw>>12 & 0x7) != 3 && ($hw>>7 & 0x1) != 1) - {$feat .= "TDC, single, ".(2**($hw>>4&0xf))."ch, ";} - if(($hw & 0xf000) == 0x6000) {$feat .= "Nxyter RDO, ";} - if(($hw & 0x0900) == 0x100) {$feat .= "TDC, double, ".(2**($hw>>4&0xf))."ch, ";} - if(($hw & 0x0900) == 0x800) {$feat .= "TDC, dbl-sep, ".(2**($hw>>4&0xf))."ch, ";} - if(($hw & 0x0200) == 0x200) {$feat .= "Hub, ";} - if(($hw & 0x0400) == 0x400) {$feat .= "SPI, ";} - if(($hw & 0x00f0) == 0x090) {$feat .= "MVD rdo 2013, ";} - $feat = substr($feat,0,-2); - } - if(($hw>>24&0xff) == 0x90) { - if(($hw & 0xf001) == 0xc000) {$feat .= "CTS, ";} - if(($hw & 0xf001) == 0xc001) {$feat .= "CTS w/AddOn, ";} - if(($hw & 0x0f00) == 0x0e00) {$feat .= "GbE sctrl rdo, ";} - if(($hw & 0x0f00) == 0x0d00) {$feat .= "GbE rdo, ";} - if(($hw & 0x0010) != 0x0000) {$feat .= "opt. trg in, ";} - if(($hw & 0x0020) != 0x0000) {$feat .= "opt. sctrl in, ";} - if(($hw & 0x0040) != 0x0000) {$feat .= "opt. trg out, ";} - if(($hw & 0x0080) != 0x0000) {$feat .= "opt. sctrl out, ";} - $feat = substr($feat,0,-2); - } - if ($feat eq "") {$feat = "N/A";} + my $feat = ""; + my $table = $inclHigh->{$addr}>>24&0xFF; + if($table == 0) { + my $hw = $hardware->{$addr}; + if(($hw>>24&0xff) == 0x91 || ($hw>>24&0xff) == 0x92 || ($hw>>24&0xff) == 0x93) { + if(($hw & 0x8000) == 0x8000) {$feat .= "RX sync, ";} + if(($hw & 0x0b00) == 0x000 && ($hw>>12 & 0x7) != 6 && ($hw>>12 & 0x7) != 3 && ($hw>>7 & 0x1) != 1) + {$feat .= "TDC, single, ".(2**($hw>>4&0xf))."ch, ";} + if(($hw & 0xf000) == 0x6000) {$feat .= "Nxyter RDO, ";} + if(($hw & 0x0900) == 0x100) {$feat .= "TDC, double, ".(2**($hw>>4&0xf))."ch, ";} + if(($hw & 0x0900) == 0x800) {$feat .= "TDC, dbl-sep, ".(2**($hw>>4&0xf))."ch, ";} + if(($hw & 0x0200) == 0x200) {$feat .= "Hub, ";} + if(($hw & 0x0400) == 0x400) {$feat .= "SPI, ";} + if(($hw & 0x00f0) == 0x090) {$feat .= "MVD rdo 2013, ";} + $feat = substr($feat,0,-2); + } + if(($hw>>24&0xff) == 0x90) { + if(($hw & 0xf001) == 0xc000) {$feat .= "CTS, ";} + if(($hw & 0xf001) == 0xc001) {$feat .= "CTS w/AddOn, ";} + if(($hw & 0x0f00) == 0x0e00) {$feat .= "GbE sctrl rdo, ";} + if(($hw & 0x0f00) == 0x0d00) {$feat .= "GbE rdo, ";} + if(($hw & 0x0010) != 0x0000) {$feat .= "opt. trg in, ";} + if(($hw & 0x0020) != 0x0000) {$feat .= "opt. sctrl in, ";} + if(($hw & 0x0040) != 0x0000) {$feat .= "opt. trg out, ";} + if(($hw & 0x0080) != 0x0000) {$feat .= "opt. sctrl out, ";} + $feat = substr($feat,0,-2); + } + if ($feat eq "") {$feat = "N/A";} } - if($table == 1) { - if($inclLow->{$addr}&0x8000) { #CTS - $feat .= "\nCTS: "; - if(($inclLow->{$addr} & 0xF) == 1) { $feat .= "CBM-MBS module, ";} - if(($inclLow->{$addr} & 0xF) == 2) { $feat .= "Mainz A2 module, ";} - if(($inclLow->{$addr} & 0x10)) { - $feat .= "\nTDC: "; - if(($inclLow->{$addr} & 0x20)) { $feat .= "non-standard pinout, ";} - $feat .= GetTDCInfo($addr,$inclLow->{$addr},1); - } - } - if($inclLow->{$addr}&0x30000) { #GbE - $feat .= "\nGbE: "; - if($inclLow->{$addr} & 0x10000) { - $feat .= "data sending buffer 64kB, " if(($inclLow->{$addr} & 0xc0000) == 0x40000); - $feat .= "data sending, " if(($inclLow->{$addr} & 0xc0000) == 0x00000); - } - if($inclLow->{$addr} & 0x20000) { - $feat .= "slow control buffer 4kB, " if(($inclLow->{$addr} & 0x300000) == 0x10000); - $feat .= "slow control buffer 64kB, " if(($inclLow->{$addr} & 0x300000) == 0x20000); - $feat .= "slow control, " if(($inclLow->{$addr} & 0x300000) == 0x00000); - $feat .= "with multi-packet" if ($inclLow->{$addr} & 0x400000); - } - } - $feat .= "\nHub: ".(($inclLow->{$addr}>>24)&0x7)." SFPs"; + if($table == 1) { + if($inclLow->{$addr}&0x8000) { #CTS + $feat .= "\nCTS: "; + if(($inclLow->{$addr} & 0xF) == 1) { $feat .= "CBM-MBS module, ";} + if(($inclLow->{$addr} & 0xF) == 2) { $feat .= "Mainz A2 module, ";} + if(($inclLow->{$addr} & 0x10)) { + $feat .= "\nTDC: "; + if(($inclLow->{$addr} & 0x20)) { $feat .= "non-standard pinout, ";} + $feat .= GetTDCInfo($addr,$inclLow->{$addr},1); + } + } + if($inclLow->{$addr}&0x30000) { #GbE + $feat .= "\nGbE: "; + if($inclLow->{$addr} & 0x10000) { + $feat .= "data sending buffer 64kB, " if(($inclLow->{$addr} & 0xc0000) == 0x40000); + $feat .= "data sending, " if(($inclLow->{$addr} & 0xc0000) == 0x00000); + } + if($inclLow->{$addr} & 0x20000) { + $feat .= "slow control buffer 4kB, " if(($inclLow->{$addr} & 0x300000) == 0x10000); + $feat .= "slow control buffer 64kB, " if(($inclLow->{$addr} & 0x300000) == 0x20000); + $feat .= "slow control, " if(($inclLow->{$addr} & 0x300000) == 0x00000); + $feat .= "with multi-packet" if ($inclLow->{$addr} & 0x400000); + } + } + $feat .= "\nHub: ".(($inclLow->{$addr}>>24)&0x7)." SFPs"; } - if($table == 2) { - if($inclLow->{$addr}&0x8000) { # ||1 just because this not implemented yet in the test design.. - $feat .="\nTDC:"; - $feat .= GetTDCInfo($addr,$inclLow->{$addr},1); - } + if($table == 2) { + if($inclLow->{$addr}&0x8000) { # ||1 just because this not implemented yet in the test design.. + $feat .="\nTDC:"; + $feat .= GetTDCInfo($addr,$inclLow->{$addr},1); + } } - if($table == 3) { - $feat .= sprintf("%i sensors in %i chains",$inclLow->{$addr} & 0xff,$inclLow->{$addr}>>8 & 0xf); - $feat .= ", normal readout" if ($inclLow->{$addr}>>16 & 0x3) == 0; - $feat .= ", testmode" if ($inclLow->{$addr}>>16 & 0x3) == 1; - $feat .= ", testmode optional" if ($inclLow->{$addr}>>16 & 0x3) == 2; - $feat .= ", for M26" if ($inclLow->{$addr}>>20 & 0xf) == 0; + if($table == 3) { + $feat .= sprintf("%i sensors in %i chains",$inclLow->{$addr} & 0xff,$inclLow->{$addr}>>8 & 0xf); + $feat .= ", normal readout" if ($inclLow->{$addr}>>16 & 0x3) == 0; + $feat .= ", testmode" if ($inclLow->{$addr}>>16 & 0x3) == 1; + $feat .= ", testmode optional" if ($inclLow->{$addr}>>16 & 0x3) == 2; + $feat .= ", for M26" if ($inclLow->{$addr}>>20 & 0xf) == 0; } - if($table == 4) { - $feat .= sprintf("Channels: %i", $inclLow->{$addr}>>16 & 0x000000ff); - $feat .= sprintf(", Sampling Frequency %i MHz",$inclLow->{$addr}>>0 & 0x000000ff); - $feat .= "\nDummy read-out" if ($inclLow->{$addr}&0x0f00) == 0x000; - $feat .= "\nBasic Processing and trigger" if ($inclLow->{$addr}&0x0f00) == 0x100; - $feat .= "\nAdvanced filtering" if ($inclLow->{$addr}&0x0f00) == 0x200; - $feat .= "\nFeature Extraction" if ($inclLow->{$addr}&0x0f00) == 0x800; - $feat .= ", baseline determination" if ($inclLow->{$addr}&0x4000); - $feat .= ", trigger generation" if ($inclLow->{$addr}&0x8000); + if($table == 4) { + $feat .= sprintf("Channels: %i", $inclLow->{$addr}>>16 & 0x000000ff); + $feat .= sprintf(", Sampling Frequency %i MHz",$inclLow->{$addr}>>0 & 0x000000ff); + $feat .= "\nDummy read-out" if ($inclLow->{$addr}&0x0f00) == 0x000; + $feat .= "\nBasic Processing and trigger" if ($inclLow->{$addr}&0x0f00) == 0x100; + $feat .= "\nAdvanced filtering" if ($inclLow->{$addr}&0x0f00) == 0x200; + $feat .= "\nFeature Extraction" if ($inclLow->{$addr}&0x0f00) == 0x800; + $feat .= ", baseline determination" if ($inclLow->{$addr}&0x4000); + $feat .= ", trigger generation" if ($inclLow->{$addr}&0x8000); } - if($table == 1 || $table == 2 || $table ==3 || $table == 4) { - if ($inclHigh->{$addr} & 0x200) { $feat .= "\nReference Time: through Clock Manager";} - if ($inclHigh->{$addr} & 0x400) { $feat .= "\nSPI";} - if ($inclHigh->{$addr} & 0x800) { $feat .= "\nUART";} - if ($inclHigh->{$addr}>>12&0xF) { - $feat .= "\nInput monitor:"; - my $d = trb_register_read($addr,0xcf8f); - $feat .= " ".($d->{$addr}>>8&0x1F)." inputs"; - $feat .= ", single Fifo" if $d->{$addr}&0x8000; - $feat .= ", indiv. Fifos" unless $d->{$addr}&0x8000; - } - - if(($inclHigh->{$addr}>>16&0xF) == 1 || ($inclHigh->{$addr}>>16&0xF) == 2) { - for($inclHigh->{$addr}>>16&0xF) { - when(1) {$feat .="\nTrigger Module: simple or";} - when(2) {$feat .="\nTrigger Module: edge detect";} - } - my $d = trb_register_read($addr,0xcf27); - $feat .= sprintf(", %i inputs, %i outputs",($d->{$addr}&0x3F),($d->{$addr}>>8&0xF)); - } - for($inclHigh->{$addr}>>20&0xF) { - when(0) {$feat .="\nClock: on-board 200 MHz";} - when(1) {$feat .="\nClock: on-board 125 MHz";} - when(2) {$feat .="\nClock: received 200 MHz";} - when(3) {$feat .="\nClock: received 125 MHz";} - when(4) {$feat .="\nClock: external 200 MHz";} - when(5) {$feat .="\nClock: external 125 MHz";} - } - } - - printf("
%i
0x%04x%s%s%s%.1f°C\n", - $layer, - ($layer!=$lastlayer?' newlevel':' oldlevel'), - $p, - $addr, - $hardware->{$addr}, - $btype.$addontype, - $inclHigh->{$addr}, - $inclLow->{$addr}, - $feat, - substr($feat,0,40).(length($feat)>40?"...":""), - $ctime->{$addr}, - time2str('%Y-%m-%d %H:%M',$ctime->{$addr}), - ($temp->{$addr}>>20)/16); - $lastlayer = $layer; - printlist($tree->{$parent}->[$p]->{addr},$layer+1); - } + if($table == 1 || $table == 2 || $table ==3 || $table == 4) { + if ($inclHigh->{$addr} & 0x200) { $feat .= "\nReference Time: through Clock Manager";} + if ($inclHigh->{$addr} & 0x400) { $feat .= "\nSPI";} + if ($inclHigh->{$addr} & 0x800) { $feat .= "\nUART";} + if ($inclHigh->{$addr}>>12&0xF) { + $feat .= "\nInput monitor:"; + my $d = trb_register_read($addr,0xcf8f); + $feat .= " ".($d->{$addr}>>8&0x1F)." inputs"; + $feat .= ", single Fifo" if $d->{$addr}&0x8000; + $feat .= ", indiv. Fifos" unless $d->{$addr}&0x8000; + } + + if(($inclHigh->{$addr}>>16&0xF) == 1 || ($inclHigh->{$addr}>>16&0xF) == 2) { + for($inclHigh->{$addr}>>16&0xF) { + when(1) {$feat .="\nTrigger Module: simple or";} + when(2) {$feat .="\nTrigger Module: edge detect";} + } + my $d = trb_register_read($addr,0xcf27); + $feat .= sprintf(", %i inputs, %i outputs",($d->{$addr}&0x3F),($d->{$addr}>>8&0xF)); + } + for($inclHigh->{$addr}>>20&0xF) { + when(0) {$feat .="\nClock: on-board 200 MHz";} + when(1) {$feat .="\nClock: on-board 125 MHz";} + when(2) {$feat .="\nClock: received 200 MHz";} + when(3) {$feat .="\nClock: received 125 MHz";} + when(4) {$feat .="\nClock: external 200 MHz";} + when(5) {$feat .="\nClock: external 125 MHz";} + } + } + + # SFP Optical Transceiver Rx Power Readbacks + my $SFP1Rx = "-"; + my $SFP2Rx = "-"; + my $SFP3Rx = "-"; + my $SFP4Rx = "-"; + my $SFP5Rx = "-"; + my $SFP6Rx = "-"; + my $SFP7Rx = "-"; + my $SFP8Rx = "-"; + + if ( ($btype eq "TRB3 central") || ($btype eq "Hub AddOn") ) { + $SFP1Rx = "NA"; + my $val1 = ($sfpDat1->{$addr} & 0x000000FF); + if ($val1 != 254) { + $val1 = int(($val1 * 1.6) + 0.5); + if ($val1 < 150) { + $SFP1Rx = "$val1 uW"; + } else { + $SFP1Rx = "$val1 uW"; + } + } + $SFP2Rx = "NA"; + my $val2 = ($sfpDat1->{$addr} >> 8) & 0x000000FF; + if ($val2 != 254) { + $val2 = int(($val2 * 1.6) + 0.5); + if ($val2 < 150) { + $SFP2Rx = "$val2 uW"; + } else { + $SFP2Rx = "$val2 uW"; + } + } + $SFP3Rx = "NA"; + my $val3 = ($sfpDat1->{$addr} >> 16) & 0x000000FF; + if ($val3 != 254) { + $val3 = int(($val3 * 1.6) + 0.5); + if ($val3 < 150) { + $SFP3Rx = "$val3 uW"; + } else { + $SFP3Rx = "$val3 uW"; + } + } + $SFP4Rx = "NA"; + my $val4 = ($sfpDat1->{$addr} >> 24); + if ($val4 != 254) { + $val4 = int(($val4 * 1.6) + 0.5); + if ($val4 < 150) { + $SFP4Rx = "$val4 uW"; + } else { + $SFP4Rx = "$val4 uW"; + } + } + $SFP5Rx = "NA"; + my $val5 = ($sfpDat2->{$addr} & 0x000000FF); + if ($val5 != 254) { + $val5 = int(($val5 * 1.6) + 0.5); + if ($val5 < 150) { + $SFP5Rx = "$val5 uW"; + } else { + $SFP5Rx = "$val5 uW"; + } + } + $SFP6Rx = "NA"; + my $val6 = ($sfpDat2->{$addr} >> 8) & 0x000000FF; + if ($val6 != 254) { + $val6 = int(($val6 * 1.6) + 0.5); + if ($val6 < 150) { + $SFP6Rx = "$val6 uW"; + } else { + $SFP6Rx = "$val6 uW"; + } + } + $SFP7Rx = "NA"; + my $val7 = ($sfpDat2->{$addr} >> 16) & 0x000000FF; + if ($val7 != 254) { + $val7 = int(($val7 * 1.6) + 0.5); + if ($val7 < 150) { + $SFP7Rx = "$val7 uW"; + } else { + $SFP7Rx = "$val7 uW"; + } + } + $SFP8Rx = "NA"; + my $val8 = ($sfpDat2->{$addr} >> 24); + if ($val8 != 254) { + $val8 = int(($val8 * 1.6) + 0.5); + if ($val8 < 150) { + $SFP8Rx = "$val8 uW"; + } else { + $SFP8Rx = "$val8 uW"; + } + } + } + + printf("
%i
0x%04x%s%s%s%.1f°C%s%s\n", + $layer, + ($layer!=$lastlayer?' newlevel':' oldlevel'), + $p, + $addr, + $hardware->{$addr}, + $btype.$addontype, + $inclHigh->{$addr}, + $inclLow->{$addr}, + $feat, + substr($feat,0,40).(length($feat)>40?"...":""), + $ctime->{$addr}, + time2str('%Y-%m-%d %H:%M',$ctime->{$addr}), + ($temp->{$addr}>>20)/16, + $SFP1Rx, + $SFP8Rx); + + $lastlayer = $layer; + printlist($tree->{$parent}->[$p]->{addr},$layer+1); + } return 0; } - } - +} + ############################################################################### ## Main page ############################################################################### else { - my $page; - $page->{title} = "TrbNet Network Setup"; - $page->{link} = "../"; - $page->{getscript} = "map.pl"; - - my @setup; - $setup[0]->{name} = "NetworkMap"; - $setup[0]->{cmd} = "getmap"; - $setup[0]->{period} = -1; - $setup[0]->{noaddress} = 1; - $setup[0]->{norate} = 1; - $setup[0]->{nocache} = 1; - $setup[0]->{generic} = 0; - - xmlpage::initPage(\@setup,$page); - } + my $page; + $page->{title} = "TrbNet Network Setup"; + $page->{link} = "../"; + $page->{getscript} = "map.pl"; + + my @setup; + $setup[0]->{name} = "NetworkMap"; + $setup[0]->{cmd} = "getmap"; + $setup[0]->{period} = -1; + $setup[0]->{noaddress} = 1; + $setup[0]->{norate} = 1; + $setup[0]->{nocache} = 1; + $setup[0]->{generic} = 0; + + xmlpage::initPage(\@setup,$page); +} sub GetTDCInfo { - my ($addr,$info,$inp) = @_; - my $d = trb_register_read($addr,0xc100); - my $feat = ""; - my $module = ($info>>16&0x3)+1; - $feat .= " ".($d->{$addr}>>8&0xFF)." channels"; - $feat .= " read by ".$module." module(s)"; - $feat .= ", version ".(($d->{$addr}&0x0e000000)>>25).".".(($d->{$addr}&0x1e00000)>>21).".".(($d->{$addr}&0x1e0000)>>17); - if($inp) { - for($info&0xFF) { - when (0) {$feat .=", input select by mux";} - when (1) {$feat .=", input 1-to-1";} - when (2) {$feat .=", on every second input";} - when (3) {$feat .=", on every fourth input";} - } + my ($addr,$info,$inp) = @_; + my $d = trb_register_read($addr,0xc100); + my $feat = ""; + my $module = ($info>>16&0x3)+1; + $feat .= " ".($d->{$addr}>>8&0xFF)." channels"; + $feat .= " read by ".$module." module(s)"; + $feat .= ", version ".(($d->{$addr}&0x0e000000)>>25).".".(($d->{$addr}&0x1e00000)>>21).".".(($d->{$addr}&0x1e0000)>>17); + if($inp) { + for($info&0xFF) { + when (0) {$feat .=", input select by mux";} + when (1) {$feat .=", input 1-to-1";} + when (2) {$feat .=", on every second input";} + when (3) {$feat .=", on every fourth input";} + } } - for($info>>8&0xF) { - when (0) {$feat .=", single edge";} - when (1) {$feat .=", dual edge in same channel";} - when (2) {$feat .=", dual edge in alternating channels";} - when (3) {$feat .=", dual edge same channel + stretcher";} + for($info>>8&0xF) { + when (0) {$feat .=", single edge";} + when (1) {$feat .=", dual edge in same channel";} + when (2) {$feat .=", dual edge in alternating channels";} + when (3) {$feat .=", dual edge same channel + stretcher";} } - for($info>>12&0x7) { - when (0) {$feat .=", RingBuffer size: 12 words";} - when (1) {$feat .=", RingBuffer size: 44 words";} - when (2) {$feat .=", RingBuffer size: 76 words";} - when (3) {$feat .=", RingBuffer size: 108 words";} + for($info>>12&0x7) { + when (0) {$feat .=", RingBuffer size: 12 words";} + when (1) {$feat .=", RingBuffer size: 44 words";} + when (2) {$feat .=", RingBuffer size: 76 words";} + when (3) {$feat .=", RingBuffer size: 108 words";} } - return $feat; - } + return $feat; +} 1; -- 2.43.0