]> jspc29.x-matter.uni-frankfurt.de Git - daqtools.git/commitdiff
Power switch modules can now be accessed remotely, i.e. if they are connected to...
authorJan Michel <j.michel@gsi.de>
Tue, 16 May 2017 15:46:44 +0000 (17:46 +0200)
committerJan Michel <j.michel@gsi.de>
Tue, 16 May 2017 15:47:05 +0000 (17:47 +0200)
web/htdocs/tools/pwr/pwr_remote.pl
web/htdocs/tools/pwr/pwr_switch.pl
web/htdocs/tools/pwr/pwr_switch_remote.pl [new file with mode: 0644]

index 8ca8dcda764750de65f73701aee0cea95df4ad36..472283e7bc2cbb1e6abb26d0b61f577b50856ca7 100644 (file)
@@ -131,4 +131,5 @@ sub receive_answer {
       usleep 5E4; # 50 ms delay
     }
   }
-}
\ No newline at end of file
+}
+
index 929636121b2b95617540b7512ec6eee7245e8e76..c305ee15c52baa232a21d4f7d413c1ddc2af9af8 100755 (executable)
@@ -23,16 +23,10 @@ my @new_command = split('&',$envstring);
 my $ser_dev = shift(@new_command);
 $ser_dev = "/dev/ttyUSB0" unless defined $ser_dev;
 
-# my $ser_type = shift(@new_command);
-# $ser_type = "PSP" unless defined $ser_type;
-# 
-# my $ser_speed = shift(@new_command);  #speed or port number
-# $ser_speed = "2400" unless defined $ser_speed;
-
 
 my $port;
 # my $isIP = 0;
-my $isRemote = undef;
+my $isRemote = undef;
 # 
 # if($ser_dev =~ /^IP(.*)/) {
 #   $ser_dev = $1;
@@ -40,12 +34,13 @@ my $port;
 #   $port = IO::Socket::INET->new(PeerAddr => $ser_dev, PeerPort => $ser_speed, Proto => "tcp", Type => SOCK_STREAM) 
 #               or die "ERROR: Cannot connect: $@";  
 #   }
-# elsif($ser_dev =~ /^SER(.*)/) {
-#   my $str = $1;
-#   ($isRemote,$ser_dev) = split('/',$str,2);
-#   $ser_dev = '/'.$ser_dev;
-#   }
-# else {  
+# els
+if($ser_dev =~ /^SER(.*)/) {
+  my $str = $1;
+  ($isRemote,$ser_dev) = split('/',$str,2);
+  $ser_dev = '/'.$ser_dev;
+  }
+else {  
   $port = new Device::SerialPort($ser_dev);
   unless ($port)
   {
@@ -62,24 +57,22 @@ my $port;
   $port->read_char_time(0);
   $port->read_const_time(50);
   $port->write_settings;
-
+}
 
 # debug output
 #print "attempting to communicate with power supply connected to interface:\n$ser_dev\n\n";
 
 
-# if(defined $isRemote) {
-#   my $env = $ENV{'QUERY_STRING'};
-# #   $env =~ s/%20/ /g;
-#   $env =~ s/&/!/g;
-#   my $cmd = "bash -c \"ssh $isRemote 'QUERY_STRING=".$env." perl'\" <htdocs/tools/pwr/pwr_remote.pl";
-# #   system("ssh $isRemote 'QUERY_STRING=".$env." perl -v' ");
-# #   print $cmd."\n";
-#   print qx($cmd);
-#   }
-# else {
+if(defined $isRemote) {
+  my $env = $ENV{'QUERY_STRING'};
+  $env =~ s/&/\+/g;
+  my $cmd = "bash -c \"ssh $isRemote 'QUERY_STRING=".$env." perl'\" <htdocs/tools/pwr/pwr_switch_remote.pl";
+#   print $cmd;
+  print qx($cmd);
+  }
+else {
   print receive_answer();
-  }
+  }
 
 
 
@@ -107,7 +100,6 @@ sub Cmd {
 sub receive_answer {
   print strftime("%H:%M:%S &", localtime());
   my $ret ="";
-#   print strftime("%H:%M:%S &", localtime());
   while ( my $command = shift(@new_command) ) {
     my $r = Cmd($command);
     print $r if($command =~ /\?/);
diff --git a/web/htdocs/tools/pwr/pwr_switch_remote.pl b/web/htdocs/tools/pwr/pwr_switch_remote.pl
new file mode 100644 (file)
index 0000000..361d9e9
--- /dev/null
@@ -0,0 +1,80 @@
+use strict;
+use warnings;
+use Device::SerialPort;
+
+use feature 'state';
+use URI::Escape;
+use Time::HiRes qw( usleep);
+use POSIX qw/floor ceil strftime/;
+
+my $envstring = $ENV{'QUERY_STRING'};
+# print $envstring;
+
+(my $null,$envstring) = split('/',$envstring,2);
+$envstring = '/'.$envstring;
+$envstring =~ s/%20/ /g;
+$envstring =~ s/Q/\?/g;
+
+my @new_command = split('\+',$envstring); 
+my $ser_dev = shift(@new_command);
+$ser_dev = "/dev/ttyUSB0" unless defined $ser_dev;
+
+# print $envstring;
+# exit 1;
+
+my  $port = new Device::SerialPort($ser_dev);
+  unless ($port)
+  {
+    print "can't open serial interface $ser_dev\n";
+    exit;
+  }
+
+  $port->user_msg('ON'); 
+  $port->baudrate(57600); 
+  $port->parity("none"); 
+  $port->databits(8); 
+  $port->stopbits(1); 
+  $port->handshake("none"); 
+  $port->read_char_time(0);
+  $port->read_const_time(50);  
+  $port->write_settings;
+  
+ print receive_answer();
+sub Cmd {
+  my ($c) = @_;
+  for my $i (0..2) {
+    $port->write($c."\n");
+    my $a = "";
+    for my $j (0..8) {
+      my ($l,$s) = $port->read(5);
+      $a .= $l;
+      if ($l < 5) {next;}
+      if ($s =~ /^\w[a-f0-9]{3}/) {return hex(substr($s,1,3)).'&';} 
+      if ($s =~ /^\w[a-f0-9]{2}/) {return hex(substr($s,1,2)).'&';}
+      usleep(10000);
+      }
+    usleep(50000);
+    #print '.';
+    }
+  }
+
+
+
+
+sub receive_answer {
+  print strftime("%H:%M:%S &", localtime());
+  my $ret ="";
+  while ( my $command = shift(@new_command) ) {
+    my $r = Cmd($command);
+    print $r if($command =~ /\?/);
+    }
+  return $ret;
+  }
+
+
+  
+print "\n";
+  
+exit 1;