+sub get_sensors {
+ my $slist= _cmd("sensorlist");
+ my @sensors;
+
+ if ($slist->{RC} ne '0x0') {
+ print "Error getting sensorlist: ".$slist->{RC}."\n";
+ return;
+ }
+
+ my $req = '<REQ CMD="sensorpropget"><HANDLE>'.$slist->{HANDLE}.'</HANDLE><SENSORLIST>';
+ foreach my $s (@{$slist->{SENSORLIST}->{SENSOR}}) {
+ $req .= '<SENSOR KEY="'.$s->{KEY}.'"/>';
+ }
+ $req .= '</SENSORLIST></REQ>';
+
+ my $sprop = _req($req);
+ foreach my $s (@{$sprop->{SENSORLIST}->{SENSOR}}) {
+ my $sensor = {};
+ foreach my $sp (@{$s->{PROP}}) {
+ $sensor->{$sp->{NAME}} = $sp->{VAL};
+ }
+
+ next if (!defined($sensor->{NAME}));
+ $sensor->{VAL} = '0' if ($sensor->{VAL} eq '');
+ push @sensors, $sensor;
+ }
+ @sensors;
+}
+
+sub show_sensors {
+ my @sensors = get_sensors();
+
+ foreach my $sensor (@sensors) {
+ print $sensor->{NAME}.": ".$sensor->{VAL}.$sensor->{UNITS};
+
+ my @info = ();
+ foreach my $field qw(MIN MAX LOW_NON_CRITICAL UPPER_NON_CRITICAL LOW_CRITICAL UPPER_CRITICAL) {
+ if ($sensor->{$field} ne '') {
+ push @info, "${field}: ".$sensor->{$field}.$sensor->{UNITS};
+ }
+ }
+
+ print "\t(".join(", ",@info).")" if (@info);
+
+ print "\n";
+ }
+}
+
+sub status {
+ my $boardstatus = _cmd("boardstatus")->{STATUS};
+ my $fw = _cmd("boardfwstatus");
+ my $boardfwstatus = $fw->{STATUS};
+ my $boardfwprogress = $fw->{PROGRESS};
+ $bs = hex($boardstatus);
+
+ print "Server Power:\t\t" . (($bs & 0x01) ? "ON" : "OFF") . "\n";
+ print "External PSU:\t\t" . (($bs & 0x02) ? "ON" : "OFF") . "\n";
+ print "Battery:\t\t";
+ if ($bs & 0x04) {
+ if ($bs & 0x08) {
+ print "LOW\n";
+ } elsif ($bs & 0x800) {
+ print "ON\n";
+ } else {
+ print "UNKNOWN\n";
+ }
+ } else {
+ print "OFF\n";
+ }
+ print "Standby Power:\t\t" . (($bs & 0x08) ? "ON" : "OFF") . "\n";
+ print "LAN:\t\t\t" . (($bs & 0x10) ? "CONNECTED" : "NC") . "\n";
+ print "I2C:\t\t\t" . (($bs & 0x20) ? "CONNECTED" : "NC") . "\n";
+ print "SMM:\t\t\t" . (($bs & 0x40) ? "CONNECTED" : "NC") . "\n";
+ print "Instrumentation:\t" . (($bs & 0x200) ? "CONNECTED" : "NC") . "\n";
+ print "ICMB:\t\t\t" . (($bs & 0x400) ? "CONNECTED" : "NC") . "\n";
+ print "PPP:\t\t\t" . (($bs & 0x10000) ? "ON" : "OFF") . "\n";
+ print "Paging:\t\t\t" . (($bs & 0x20000) ? "ON" : "OFF") . "\n";
+ print "COM redirection:\t" . (($bs & 0x100000) ? "ON" : "OFF") . "\n";
+ print "UART redirect:\t\t" . (($bs & 0x200000) ? "ON" : "OFF") . "\n";
+ print "UART redirect pending:\t" . (($bs & 0x400000) ? "TRUE" : "FALSE") . "\n";
+ print "Hex BoardStatus:\t${boardstatus}\n";
+ my $fws = hex ($boardfwstatus);
+ print "FW status:\t\t";
+ if ($fws == 3 || $fws == 32771) {
+ print "WAITING";
+ } else {
+ print "DONE";
+ }
+ print " (${boardfwstatus})\n";
+ if (($fws & 0x8080) || ($fws & 0x80)) {
+ printf("FW error:\t\t0x%02x\n", ($fws & 0xff));
+ }
+ if ($fws != 0) {
+ print "FW upgrade progress:\t${boardfwprogress}\n";
+ }
+ print "\nSensors:\n";
+ show_sensors();
+}
+
+sub spawn_gui {
+ my $base = shift;
+ open(APPLET,"|appletviewer -J-Djava.security.policy=applet.policy /dev/stdin");
+ print APPLET '<HTML><HEAD><TITLE>RSB S2 User Interface</TITLE></HEAD>';
+ print APPLET '<BODY>';
+ print APPLET '<object width="640" height="480">';
+ print APPLET '<param name="code" value="com/agilent/rmc/mgui/RmcUI.class">';
+ print APPLET '<param name="codebase" value="'.$base.'/">';
+ print APPLET '<param name="archive" value="gui.jar, msa_shared.jar, msa_shared_comm.jar, msa_shared_oem.jar">';
+ print APPLET '</object>';
+ print APPLET '</BODY></HTML>';
+ close(APPLET);
+}
+