2009-05-31 20:12:39 +00:00
|
|
|
#!/usr/bin/perl -w
|
|
|
|
|
|
|
|
use strict;
|
|
|
|
use XML::Simple;
|
|
|
|
use Getopt::Long;
|
2009-06-15 20:59:46 +00:00
|
|
|
use POSIX qw(ceil floor);
|
2009-05-31 20:12:39 +00:00
|
|
|
|
2009-06-15 20:59:46 +00:00
|
|
|
#use Data::Dumper;
|
2009-05-31 20:12:39 +00:00
|
|
|
|
|
|
|
sub usage() {
|
2009-06-14 20:52:17 +00:00
|
|
|
die("createtest -i <test template> -c <command> \n");
|
2009-05-31 20:12:39 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
sub parseString {
|
|
|
|
my $string = shift;
|
|
|
|
my $cmd = shift;
|
|
|
|
$string =~ s/\@CMD\@/$cmd/gi;
|
|
|
|
return $string;
|
|
|
|
}
|
|
|
|
|
|
|
|
sub generateSRFull {
|
|
|
|
my $res = shift;
|
|
|
|
my $body = shift;
|
2009-06-15 16:48:34 +00:00
|
|
|
my $start = shift;
|
|
|
|
my $end = shift;
|
2009-06-15 20:59:46 +00:00
|
|
|
$end = 0xFFFF if ($end > 0xFFFF);
|
|
|
|
|
2009-06-15 16:48:34 +00:00
|
|
|
$res .= join "\n", map {my $b = sprintf "\#0x%04X", $_; (my $a = $body) =~ s/\@SR\@/$b/g; $a} $start..$end;
|
2009-05-31 20:12:39 +00:00
|
|
|
|
|
|
|
return $res;
|
|
|
|
}
|
|
|
|
|
2009-06-14 20:52:17 +00:00
|
|
|
sub calculateLines {
|
2009-06-15 16:48:34 +00:00
|
|
|
my $file = shift;
|
2009-06-14 20:52:17 +00:00
|
|
|
|
2009-06-15 16:48:34 +00:00
|
|
|
my @lines = `dsptool -s $file`;
|
|
|
|
$lines[0] =~ /:\s*(.*)/;
|
|
|
|
my $lnum = $1;
|
|
|
|
|
|
|
|
return $lnum;
|
2009-06-14 20:52:17 +00:00
|
|
|
}
|
|
|
|
|
2009-05-31 20:12:39 +00:00
|
|
|
my ($cmds,$input,$output);
|
|
|
|
if (!GetOptions('cmds|c=s' => \$cmds,
|
|
|
|
'input|i=s' => \$input,
|
|
|
|
# 'output|o=s' => \$output,
|
|
|
|
)) {
|
|
|
|
usage();
|
|
|
|
exit 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
usage() if (! defined $input);
|
|
|
|
|
|
|
|
my $xtest = XMLin($input);
|
|
|
|
my $type = $xtest->{'type'};
|
|
|
|
|
|
|
|
foreach my $cmd (split(/,/, $cmds)) {
|
|
|
|
my $name = parseString($xtest->{'name'}, $cmd);
|
|
|
|
$name =~ s/ /_/g;
|
|
|
|
my $desc = parseString($xtest->{'description'}, $cmd);
|
2009-06-14 20:52:17 +00:00
|
|
|
|
2009-05-31 20:12:39 +00:00
|
|
|
my $header = parseString($xtest->{'header'}, $cmd);
|
2009-06-15 16:48:34 +00:00
|
|
|
open(OUTPUT, ">$name.tmp");
|
|
|
|
print OUTPUT $header;
|
|
|
|
close(OUTPUT);
|
|
|
|
|
|
|
|
my $hsize = calculateLines("$name.tmp");
|
2009-06-14 20:52:17 +00:00
|
|
|
|
2009-05-31 20:12:39 +00:00
|
|
|
my $body = parseString($xtest->{'body'}, $cmd);
|
2009-06-15 16:48:34 +00:00
|
|
|
open(OUTPUT, ">$name.tmp");
|
2009-06-15 20:59:46 +00:00
|
|
|
print OUTPUT generateSRFull($header, $body, 0, 0);
|
2009-06-15 16:48:34 +00:00
|
|
|
close(OUTPUT);
|
2009-05-31 20:12:39 +00:00
|
|
|
|
2009-06-15 16:48:34 +00:00
|
|
|
my $bsize = calculateLines("$name.tmp") - $hsize;
|
|
|
|
unlink("$name.tmp");
|
2009-05-31 20:12:39 +00:00
|
|
|
|
2009-06-15 16:48:34 +00:00
|
|
|
# how many tests we can fit in a ucode.
|
2009-06-15 20:59:46 +00:00
|
|
|
my $ucodes = POSIX::floor((0x1000 - $hsize) / $bsize);
|
2009-06-15 16:48:34 +00:00
|
|
|
|
|
|
|
open(NAMES, ">$name.lst");
|
|
|
|
# print NAMES "; $name\n";
|
|
|
|
# print NAMES "; $desc\n";
|
|
|
|
|
2009-06-15 20:59:46 +00:00
|
|
|
for(my $j = 0; $j < POSIX::ceil(0xFFFF / $ucodes); $j++) {
|
2009-06-15 16:48:34 +00:00
|
|
|
open(OUTPUT, ">$name$j.tst");
|
2009-06-15 20:59:46 +00:00
|
|
|
print OUTPUT generateSRFull($header, $body, $j*$ucodes,
|
|
|
|
($j+1)*$ucodes-1);
|
2009-06-15 16:48:34 +00:00
|
|
|
close(OUTPUT);
|
|
|
|
print NAMES "$name$j.tst\n";
|
|
|
|
}
|
2009-06-15 20:59:46 +00:00
|
|
|
|
2009-06-15 16:48:34 +00:00
|
|
|
close(NAMES);
|
2009-06-15 20:59:46 +00:00
|
|
|
|
|
|
|
system("dsptool -m $name.lst -h $name");
|
|
|
|
unlink <$name*.tst>;
|
|
|
|
unlink "$name.lst";
|
2009-05-31 20:12:39 +00:00
|
|
|
|
|
|
|
}
|
|
|
|
|