Subversion Repositories HomeAutomation

Rev

Rev 945 | Rev 950 | Go to most recent revision | Details | Compare with Previous | 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";
947 runge 27
    print "example: ./$binaryname -x data.xml -c moduleid.h\n";
945 runge 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
 
947 runge 39
open (MYFILE, '>' . $cfile);
945 runge 40
 
947 runge 41
print MYFILE "// Built on $now by $binaryname\n";
42
print MYFILE "// DO NOT CHANGE MANUALLY\n\n";
945 runge 43
 
44
print MYFILE "//------------------ //\n";
45
print MYFILE "// Class definitions //\n";
46
print MYFILE "//------------------ //\n";
47
print MYFILE "\n";
48
 
49
foreach my $class ($root->first_child('classes')->children('class'))
50
{
51
    my $className = "\U" . $class->att('name');
52
    $className =~ tr/a-z/A-Z/;
947 runge 53
    print MYFILE "#define CAN_MODULE_CLASS_$className " . $class->att('id') . "\n";
945 runge 54
}
55
 
56
print MYFILE "\n";
57
print MYFILE "//-------------------- //\n";
58
print MYFILE "// Command definitions //\n";
59
print MYFILE "//-------------------- //\n";
60
print MYFILE "\n";
61
 
62
foreach my $command ($root->first_child('commands')->children('command'))
63
{
64
    my $commandName = "\U" . $command->att('name');
65
    $commandName =~ tr/a-z/A-Z/;
66
    my $commandType = "\U" . $command->att('type');
67
    $commandType =~ tr/a-z/A-Z/;
947 runge 68
    print MYFILE "#define CAN_MODULE_CMD_" . $commandType . "_" . $commandName . " " . $command->att('id') . "\n";
945 runge 69
}
70
 
71
print MYFILE "\n";
72
print MYFILE "//------------------- //\n";
73
print MYFILE "// Module definitions //\n";
74
print MYFILE "//------------------- //\n";
75
print MYFILE "\n";
76
 
77
foreach my $module ($root->first_child('modules')->children('module'))
78
{
79
    my $className = "\U" . $module->att('class');
80
    $className =~ tr/a-z/A-Z/;
81
    my $moduleName = "\U" . $module->att('name');
82
    $moduleName =~ tr/a-z/A-Z/;
947 runge 83
    print MYFILE "#define CAN_MODULE_TYPE_" . $className . "_" . $moduleName . " " . $module->att('id') . "\n";
945 runge 84
}
85
 
86
print MYFILE "\n";
87
print MYFILE "//----------------- //\n";
88
print MYFILE "// Misc definitions //\n";
89
print MYFILE "//----------------- //\n";
90
print MYFILE "\n";
91
 
92
foreach my $define ($root->first_child('defines')->children('define'))
93
{
94
    my $groupName = "\U" . $define->att('group');
95
    $groupName =~ tr/a-z/A-Z/;
96
    my $defineName = "\U" . $define->att('name');
97
    $defineName =~ tr/a-z/A-Z/;
947 runge 98
    print MYFILE "#define " . $groupName . "_" . $defineName . " " . $define->att('id') . "\n";
945 runge 99
}
100
 
101
print MYFILE "\n";
102
 
103
close (MYFILE);
104
 
105
print "Successfully wrote " . $cfile . "\n";
106