Загрузка данных
sub generate_dev
{
my ($outDir, $cfgRef) = @_;
my $fileName = 'config_dev.h';
my @dat = grep(/^MIX\b/, @$cfgRef);
my @cpus = grep(/DEV_SM_CPU_/, @$cfgRef);
# Open file
open my $out, '>', $outDir . '/' . $fileName
or die "error: failure to open: $outDir/$fileName, $!";
if ($verbose)
{
my $fn = fileparse($fileName);
printf("Generating $fn ...\n");
}
# Output header
print $out &header('DEV', 'device abstraction');
print $out '/* Includes */' . "\n\n";
print $out '#include "config_user.h"' . "\n\n";
print $out '/* Defines */' . "\n\n";
print $out '/*! Config for device */' . "\n";
print $out '#define SM_DEV_CONFIG_DATA \\' . "\n";
print $out ' { \\' . "\n";
foreach my $cpu (@cpus)
{
if ((my $parm = ¶m($cpu, 'sema')) ne '!')
{
if ($cpu =~ /(DEV_SM_CPU_[A-Z0-9_]+)/)
{
my $devCpu = $1;
print $out ' .cpuSemaAddr[' . $devCpu . '] = '
. $parm . 'U, \\' . "\n";
}
}
}
print $out ' }' . "\n";
# Output footer
print $out &footer('DEV');
# Close file
close($out);
}
###############################################################################
sub generate_user
{
my ($outDir, $cfgRef) = @_;
my $fileName = 'config_user.h';
my @dat = grep(/^MIX\b/, @$cfgRef);
my @cpus = grep(/DEV_SM_CPU_/, @$cfgRef);
# Skip if the file already exists
if (-e $outDir . '/' . $fileName)
{
return;
}
# Open file
open my $out, '>', $outDir . '/' . $fileName
or die "error: failure to open: $outDir/$fileName, $!";
if ($verbose)
{
my $fn = fileparse($fileName);
printf("Generating $fn ...\n");
}
# Output header
print $out &header('USER', 'manual user settings');
print $out '/* Includes */' . "\n\n";
print $out '#include "config.h"' . "\n\n";
print $out '/* Defines */' . "\n\n";
# Output mix defines
foreach my $mix (@dat)
{
if ((my $parm = ¶m($mix, 'name')) ne '!')
{
print $out "\n";
print $out &banner($parm . ' Config');
print $out '/*! Data load config for the ' . (uc $parm) . ' mix */' . "\n";
print $out '#define SM_' . uc $parm . '_CONFIG \\' . "\n";
print $out ' { \\' . "\n";
print $out ' SM_CFG_END \\' . "\n";
print $out ' }' . "\n";
}
}
# Output footer
print $out &footer('USER');
# Close file
close($out);
}
###############################################################################
sub generate_bctrl
{
my ($outDir, $cfgRef) = @_;
my $fileName = 'config_bctrl.h';
my @dat = grep(/^MIX\b/, @$cfgRef);
# Open file
open my $out, '>', $outDir . '/' . $fileName
or die "error: failure to open: $outDir/$fileName, $!";
if ($verbose)
{
my $fn = fileparse($fileName);
printf("Generating $fn ...\n");
}
# Get block control list
my @list = grep(/^BCTRL_CONFIG_/, @$cfgRef);
# Get block control data
my @bdata = &get_bctrl($cfgRef);
# Output header
print $out &header('BCTRL', 'device block controls');
print $out '/* Includes */' . "\n\n";
print $out '#include "config_user.h"' . "\n\n";
print $out '/* Defines */' . "\n";
# Loop over the block control list
foreach my $b (@list)
{
if ($b =~ /BCTRL_CONFIG_(\w+) /)
{
my $bctrl = $1;
my @avpBctrl = grep(/^$bctrl: /i, @bdata);
my $line = 'BCTRL ' . $bctrl . ' Config';
print $out "\n" . &banner($line);
print $out '/*! Config for BCTRL ' . $bctrl
. ' */' . "\n";
print $out '#define SM_BCTRL_' . $bctrl . '_CONFIG \\' . "\n";
print $out ' { \\' . "\n";
print $out &compress_data(@avpBctrl);
# Mark end
print $out ' SM_CFG_END \\' . "\n";
print $out ' }' . "\n";
}
}
# Output footer
print $out &footer('BCTRL');
# Close file
close($out);
}