Subversion Repositories HomeAutomation

Rev

Rev 947 | Go to most recent revision | Details | Last modification | View Log | SVN | RSS feed

Rev Author Line No. Line
945 runge 1
#!/usr/bin/perl
2
 
3
# Written by Mattias Runge 2008
4
 
5
use XML::Twig;
6
use Getopt::Long;
7
 
8
$binaryname = "makeCanId.pl";
9
if (@ARGV > 0)
10
{
11
	GetOptions(	"xmlfile=s" 	=> \$xmlfile,
12
			"cfile=s" 	=> \$cfile);
13
}
14
else
15
{
16
	$help = 1;
17
}
18
 
19
if ($help)
20
{
21
	print "Usage ./$binaryname [options]\n";
22
	print "Options:\n";
23
	print "  -x <xmlfile>			Choose xmlfile to parse\n";
24
	print "  -c <headerfile> 		Choose header file to write\n";
25
	print "  -h 				Shows this usage\n";
26
	print "\n";
27
	print "example: ./$binaryname -x canId.xml -c canId.h\n";
28
 
29
	exit 0;
30
}
31
 
32
my $now = localtime time;
33
my $twig = XML::Twig->new();
34
 
35
$twig->parsefile($xmlfile);
36
 
37
my $root = $twig->root;
38
 
39
open (MYFILE, '>>' . $cfile);
40
 
41
print MYFILE "// Built on $now by makeCanIdHeader.pl\n\n";
42
 
43
print MYFILE "//------------------ //\n";
44
print MYFILE "// Class definitions //\n";
45
print MYFILE "//------------------ //\n";
46
print MYFILE "\n";
47
 
48
foreach my $class ($root->first_child('classes')->children('class'))
49
{
50
	my $className = "\U" . $class->att('name');
51
	$className =~ tr/a-z/A-Z/;
52
	print MYFILE "#define CAN_MODULE_CLASS_$className = " . $class->att('id') . "\n";
53
}
54
 
55
print MYFILE "\n";
56
print MYFILE "//-------------------- //\n";
57
print MYFILE "// Command definitions //\n";
58
print MYFILE "//-------------------- //\n";
59
print MYFILE "\n";
60
 
61
foreach my $command ($root->first_child('commands')->children('command'))
62
{
63
	my $commandName = "\U" . $command->att('name');
64
	$commandName =~ tr/a-z/A-Z/;
65
	my $commandType = "\U" . $command->att('type');
66
	$commandType =~ tr/a-z/A-Z/;
67
	print MYFILE "#define CAN_MODULE_CMD_" . $commandType . "_" . $commandName . " = " . $command->att('id') . "\n";
68
}
69
 
70
print MYFILE "\n";
71
print MYFILE "//------------------- //\n";
72
print MYFILE "// Module definitions //\n";
73
print MYFILE "//------------------- //\n";
74
print MYFILE "\n";
75
 
76
foreach my $module ($root->first_child('modules')->children('module'))
77
{
78
	my $className = "\U" . $module->att('class');
79
	$className =~ tr/a-z/A-Z/;
80
	my $moduleName = "\U" . $module->att('name');
81
	$moduleName =~ tr/a-z/A-Z/;
82
	print MYFILE "#define CAN_MODULE_TYPE_" . $className . "_" . $moduleName . " = " . $module->att('id') . "\n";
83
}
84
 
85
print MYFILE "\n";
86
print MYFILE "//----------------- //\n";
87
print MYFILE "// Misc definitions //\n";
88
print MYFILE "//----------------- //\n";
89
print MYFILE "\n";
90
 
91
foreach my $define ($root->first_child('defines')->children('define'))
92
{
93
	my $groupName = "\U" . $define->att('group');
94
	$groupName =~ tr/a-z/A-Z/;
95
	my $defineName = "\U" . $define->att('name');
96
	$defineName =~ tr/a-z/A-Z/;
97
	print MYFILE "#define " . $groupName . "_" . $defineName . " = " . $define->att('id') . "\n";
98
}
99
 
100
print MYFILE "\n";
101
 
102
close (MYFILE);
103
 
104
print "Successfully wrote " . $cfile . "\n";
105