Subversion Repositories HomeAutomation

Rev

Rev 1891 | Rev 2187 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | SVN | RSS feed

  1. #!/usr/bin/perl -w
  2. ################################################
  3. #
  4. # author: arune @ efnet
  5. #
  6. ################################################
  7.  
  8. use integer;
  9. use threads;
  10. use Cwd qw(abs_path);
  11. use File::Basename;
  12. use Getopt::Long;
  13.  
  14. $host = "localhost";
  15. $port = 1201;
  16.  
  17. # Get hostname and port from command line arguments
  18. if ( @ARGV > 0 ) {
  19.     GetOptions( "host=s"    => \$host,          #
  20.             "port=i"    => \$port,          #
  21.                         );
  22. }
  23.  
  24. my $path = dirname(abs_path($0));
  25.  
  26. # Read atom functions from separate file
  27. if (-e $path."/AtomLib.pl") {
  28.     require $path."/AtomLib.pl";
  29. } else {
  30.     print "Error: No AtomLib.pl was found in ".$path.". \n\n";
  31.     exit 1;
  32. }
  33.  
  34. # Read devices from separate file
  35. if (-e $path."/devices.pl") {
  36.     require $path."/devices.pl";
  37. } else {
  38.     print "Error: No devices.pl was found in ".$path.". \n\n";
  39.     exit 1;
  40. }
  41.  
  42. $biosfile = "bios.inc";
  43. open (FP, "+<".$biosfile) or die "Error: Cannot open file $biosfile\n";
  44. @file = <FP>;
  45. close FP;
  46.  
  47.  
  48. # Check bios.inc for the settings that should be updated
  49. my $foundidrow = 0;
  50. my $foundmcurow = 0;
  51. my $foundhfrow = 0;
  52. my $foundlfrow = 0;
  53. my $foundefrow = 0;
  54. my $foundbootrow = 0;
  55. foreach $file (@file) {
  56.     if ($file =~ m/^NODE_HW_ID=/) {
  57.         print "\nCurrent id-setting: ".$file."\n";
  58.         $foundidrow = 1;
  59.     }
  60.     if ($file =~ m/^MCU=/) {
  61.         $foundmcurow = 1;
  62.     }
  63.     if ($file =~ m/^HIGHFUSE=/) {
  64.         $foundhfrow = 1;
  65.     }
  66.     if ($file =~ m/^LOWFUSE=/) {
  67.         $foundlfrow = 1;
  68.     }
  69.     if ($file =~ m/^EXTFUSE=/) {
  70.         $foundefrow = 1;
  71.     }
  72.     if ($file =~ m/^BOOT_START=/) {
  73.         $foundbootrow = 1;
  74.     }
  75. }
  76. if ($foundidrow == 0) {
  77.     print "Error: Did not find NODE_HW_ID= in file $biosfile\n";
  78.     exit 1;
  79. }
  80. if ($foundmcurow == 0) {
  81.     print "Error: Did not find MCU= in file $biosfile\n";
  82.     exit 1;
  83. }
  84. if ($foundhfrow == 0) {
  85.     print "Error: Did not find HIGHFUSE= in file $biosfile\n";
  86.     exit 1;
  87. }
  88. if ($foundlfrow == 0) {
  89.     print "Error: Did not find LOWFUSE= in file $biosfile\n";
  90.     exit 1;
  91. }
  92. if ($foundefrow == 0) {
  93.     print "Error: Did not find EXTFUSE= in file $biosfile\n";
  94.     exit 1;
  95. }
  96. if ($foundbootrow == 0) {
  97.     print "Error: Did not find BOOT_START= in file $biosfile\n";
  98.     exit 1;
  99. }
  100.  
  101. my $hwid = "";
  102. my @device = ();
  103.  
  104. #print "/usr/bin/atomic -s $host -p $port -c \"Node_WaitForInformation\"\n";
  105. #my @lines = qx{/usr/bin/atomic -s $host -p $port -c \"Node_GetInformation 0xB23F54EA\"};
  106. #my @lines = qx{/usr/bin/atomic -s $host -p $port -c \"Node_WaitForInformation\"};
  107.  
  108. $socket = atomd_initialize($host, $port);
  109. atomd_send_command($socket, "Node_WaitForInformation");
  110. #atomd_send_command($socket, "Node_GetInformation 0x7DD44E0A");
  111. $return = atomd_read_command_response($socket);
  112.  
  113. my @lines = split(/\n/, $return);
  114.  
  115. my $foundDeviceType = 0;
  116. foreach (@lines)
  117. {
  118.     my $line = $_;
  119.     print($line."\n");
  120.     chomp($line);
  121.    
  122.     if (index($line, "Id") != -1)
  123.     {
  124.         my $temp = substr($line, index($line, ":") + 1);
  125.    
  126.         $temp =~ s/^\s+//;
  127.         $temp =~ s/\s+$//;
  128.  
  129.         my @hwidChars = split(//, $temp);
  130.         $hwid = $hwidChars[0]. $hwidChars[1]. $hwidChars[8]. $hwidChars[9]. $hwidChars[6]. $hwidChars[7]. $hwidChars[4]. $hwidChars[5]. $hwidChars[2]. $hwidChars[3];
  131.  
  132.         print "Setting HWID in bios.inc to ".$hwid."\n";
  133.     }
  134.     elsif (index($line, "Device Type") != -1)
  135.     {
  136.         $devicename = substr($line, index($line, ":") + 1);
  137.    
  138.         $devicename =~ s/^\s+//;
  139.         $devicename =~ s/\s+$//;
  140.        
  141.         @device = $devices[0];
  142.         foreach (@devices)
  143.         {
  144.             if (@{$_}[0] eq $devicename)
  145.             {
  146.                 @device = @{$_};
  147.                 $foundDeviceType = 1;
  148.             }
  149.         }
  150.        
  151.         if ($foundDeviceType == 0)
  152.         {
  153.             print "\nWarning: Unknown device type, will not set MCU settings\n\n";
  154.         }
  155.         else
  156.         {
  157.             print "Setting device type to ".$device[0]."\n";
  158.         }
  159.     }
  160. }
  161.  
  162. if ($hwid eq "" || $foundDeviceType == 0)
  163. {
  164.     exit(1);
  165. }
  166.  
  167. # Open bios.inc and replace all settings
  168. open (FP, "<".$biosfile) or die "Cannot open file $biosfile\n";
  169. @file = <FP>;
  170. close FP;
  171. open (FP, ">".$biosfile) or die "Cannot open file $biosfile\n";
  172. foreach $file (@file) {
  173.     $file =~ s/^NODE_HW_ID=.*/NODE_HW_ID=$hwid/g;
  174.     if ($device[0] ne "unknown")
  175.     {
  176.         $file =~ s/^MCU=.*/MCU=$device[0]/g;
  177.         $file =~ s/^HIGHFUSE=.*/HIGHFUSE=$device[1]/g;
  178.         $file =~ s/^LOWFUSE=.*/LOWFUSE=$device[2]/g;
  179.         $file =~ s/^EXTFUSE=.*/EXTFUSE=$device[3]/g;
  180.         $file =~ s/^BOOT_START=.*/BOOT_START=$device[4]/g;
  181.     }
  182.     print FP $file;
  183. }
  184. close FP;
  185.  
  186. exit(0);
  187.  
  188.