Загрузка данных


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 = &param($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 = &param($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);
}