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


use strict;
use warnings;
use bigint;
use Getopt::Std;
use File::Basename;
use lib dirname (__FILE__);
use Data::Dumper;
use List::Util qw(first);

# Subroutines
sub load_config_files;
sub load_file;
sub do_substitutions;
sub sanity_check;
sub generate_dox;
sub generate_mb;
sub generate_xport;
sub generate_scmi;
sub generate_lmm;
sub generate_dev;
sub generate_user;
sub generate_bctrl;
sub generate_board;
sub generate_trdc;
sub generate_test;
sub generate_make;
sub get_perms;
sub get_bctrl;
sub get_tests;
sub get_trdc_config;
sub get_trdc;
sub convert_trdc;
sub compress_data;
sub sapa;
sub param;
sub header;
sub footer;
sub banner;
sub copyright;
sub startstop;
sub error_line;
sub get_define;

# Config version
my $configVer = 2;

my @protocols = ('base', 'pd', 'sys', 'perf', 'clk', 'sensor',
    'rst', 'volt', 'lmm', 'gpr', 'rtc', 'button', 'cpu', 'perlpi',
    'pin', 'daisy', 'ctrl', 'fault', 'fusa');
my @mbTypes = ('MU', 'LOOPBACK');
my @xportTypes = ('SMT');
	my @permTypes = ('none', 'get', 'notify', 'set', 'priv',
	    'exclusive', 'all');
my %makeInclude;
my %args;
my $log;
my $copyright = '';

my $seenvid = 0;

# Parse command line
getopts('hi:l:o:v', \%args);
my $help = $args{h};
my $inputFile = $args{i};
my $logFile = $args{l};
my $outDir = $args{o};
my $verbose = $args{v};
my $config_name = 'CONFIG';

# Check for required arguments
if ($help || (not defined $inputFile) || (not defined $outDir))
{
    my $cmd = fileparse($0);

    print "Usage: $cmd [OPTIONS]...\n";
    print "Generate SM configuration files.\n\n";
    print "  -i  specify input file\n";
    print "  -o  specify output directory\n";
    print "  -l  specify optional log file\n";
    print "  -v  display processing steps\n";
    print "  -h  display this help and exit\n\n";
    print "The input configuration file is loaded, processed, and\n";
    print "configuration header files written to the output directory\n";
    exit;
}

# Support other cfg files
if (defined $inputFile)
{
	my $otherInputFile = $inputFile;
    $otherInputFile =~ s/configs/configs\/other/g;

	if (-e $otherInputFile)
	{
		$inputFile = $otherInputFile;
	}
}

# Open log file
if (defined $logFile)
{
    # Open file
    open $log, '>', $logFile
        or die "error: failure to open: $logFile, $!";
}

# Create output directory
if (! -e $outDir)
{
    mkdir($outDir) or die "error: couldn't create $outDir directory, $!"; 
}

# Load config files
my @cfg = &load_config_files($inputFile); 

# Check for config sanity
&sanity_check(\@cfg);

# Generate DOX file
&generate_dox($outDir, \@cfg);

# Generate MB configs
&generate_mb($outDir, \@cfg);

# Generate SMT config
&generate_xport($outDir, \@cfg);

# Generate SCMI config
&generate_scmi($outDir, \@cfg);

# Generate LMM config
&generate_lmm($outDir, \@cfg);

# Generate TRDC config
&generate_trdc($outDir, \@cfg);

# Generate DEV config
&generate_dev($outDir, \@cfg);

# Generate USER config
&generate_user($outDir, \@cfg);

# Generate BCTRL config
&generate_bctrl($outDir, \@cfg);

# Generate BOARD config
&generate_board($outDir, \@cfg);

# Generate test config
&generate_test($outDir, \@cfg);

# Generate config makefile
&generate_make($outDir, \@cfg);

if (defined $logFile)
{
    # Close file
    close($log);
}

###############################################################################

sub log_array
{
    my ($banner, $ref) = @_;

    if (defined $logFile)
    {
        print $log &banner($banner);

        # Loop over the array
        foreach (@$ref)
        {
            print $log $_ . "\n";
        }

        print $log "\n\n";
    }
}