script/lsec
changeset 766 97e98cbd0cd2
parent 643 78929d878b2c
child 835 23fd8b510803
--- a/script/lsec	Fri Oct 05 08:13:16 2007 +0000
+++ b/script/lsec	Fri Oct 05 08:13:50 2007 +0000
@@ -63,7 +63,6 @@
     my $slave_info_file;
     my @slaves;
     my $slave;
-    my $abs;
     my $line;
     my $ring_col_width;
     my $alias_col_width;
@@ -71,6 +70,7 @@
     my $width;
     my $last_alias;
     my $alias_index;
+    my $category;
 
     $master_dir = "/sys/ethercat/master" . $master_index;
 
@@ -87,21 +87,35 @@
         open INFO, $slave_info_file or die
             "ERROR: Failed to open $slave_info_file.";
 
+        $category = "";
         while ($line = <INFO>) {
-            if ($line =~ /^Name: (.*)$/) {
-                $slave->{'name'} = $1;
+            # remember category
+            if ($line =~ /^([^\s][^:]*):$/) {
+                $category = $1;
+            } elsif ($line =~ /^\s*$/) {
+                $category = "";
             }
-            elsif ($line =~ /^Ring position: (\d+)$/) {
-                $slave->{'ring_position'} = $1;
-            }
-            elsif ($line =~ /Configured station alias: .* \((\d+)\)$/) {
-                $slave->{'alias'} = $1;
-            }
-            elsif ($line =~ /^State: (.+) /) {
-                $slave->{'state'} = $1;
-            }
-            elsif ($line =~ /^Current consumption: (-?\d+) mA$/) {
-                $slave->{'current'} = $1;
+
+            if ($category eq "") {
+                if ($line =~ /^Ring position: (\d+)$/) {
+                    $slave->{'ring_position'} = $1;
+                } elsif ($line =~ /^State: (.+) /) {
+                    $slave->{'state'} = $1;
+                } elsif ($line =~ /^Configured station alias: .* \((\d+)\)$/) {
+                    $slave->{'alias'} = $1;
+                } elsif ($line =~ /^Current consumption: (-?\d+) mA$/) {
+                    $slave->{'current'} = $1;
+                }
+            } elsif ($category eq "Identity") {
+                if ($line =~ /Vendor ID: .* \((\d+)\)$/) {
+                    $slave->{'vendor'} = $1;
+                } elsif ($line =~ /Product code: .* \((\d+)\)$/) {
+                    $slave->{'product'} = $1;
+                }
+            } elsif ($category eq "General") {
+                if ($line =~ /Name: (.*)$/) {
+                    $slave->{'name'} = $1;
+                }
             }
         }
 
@@ -131,6 +145,14 @@
         $alias_index++;
     }
 
+    # replace empty name with vendor id and product code
+    for $slave (@slaves) {
+        unless (defined $slave->{'name'}) {
+            $slave->{'name'} = sprintf("0x%08X:0x%08X", $slave->{'vendor'},
+                    $slave->{'product'});
+        }
+    }
+
     if (defined $opt{'c'}) { # display power consumtion
         $fmt = sprintf " %%%is  %%%is  %%6i  %%6i  %%s\n",
             $ring_col_width, $alias_col_width;
@@ -182,7 +204,7 @@
     print "        -m <IDX>    Query master <IDX>.\n";
     print "        -c          Display current [mA] ";
     print "(3: consumption, 4: remaining).\n";
-    print "        -n          Display no coupler lines.\n";
+    print "        -n          Do not display lines before aliased slaves.\n";
     print "        -h          Show this help.\n";
     exit 0;
 }