Subversion Repositories HomeAutomation

Rev

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

  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.  
  106.