Subversion Repositories HomeAutomation

Rev

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

Rev Author Line No. Line
1667 runge 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
 
1884 arune 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
 
1667 runge 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
 
1882 arune 104
#print "/usr/bin/atomic -s $host -p $port -c \"Node_WaitForInformation\"\n";
1878 arune 105
#my @lines = qx{/usr/bin/atomic -s $host -p $port -c \"Node_GetInformation 0xB23F54EA\"};
1882 arune 106
#my @lines = qx{/usr/bin/atomic -s $host -p $port -c \"Node_WaitForInformation\"};
1667 runge 107
 
1882 arune 108
$socket = atomd_initialize($host, $port);
109
atomd_send_command($socket, "Node_WaitForInformation");
1884 arune 110
#atomd_send_command($socket, "Node_GetInformation 0x7DD44E0A");
1882 arune 111
$return = atomd_read_command_response($socket);
112
 
113
my @lines = split(/\n/, $return);
114
 
1884 arune 115
my $foundDeviceType = 0;
1667 runge 116
foreach (@lines)
117
{
118
	my $line = $_;
1882 arune 119
	print($line."\n");
1667 runge 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
	}
1878 arune 134
	elsif (index($line, "Device Type") != -1)
1667 runge 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
		{
1668 runge 144
			if (@{$_}[0] eq $devicename)
1667 runge 145
			{
146
				@device = @{$_};
1884 arune 147
				$foundDeviceType = 1;
1667 runge 148
			}
149
		}
150
 
1668 runge 151
		if ($device[0] eq "unknown") 
1667 runge 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
 
1884 arune 162
if ($hwid eq "" || $foundDeviceType == 0)
1667 runge 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;
1668 runge 174
	if ($device[0] ne "unknown") 
1667 runge 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
 
1668 runge 186
exit(0);
1667 runge 187