Загрузка данных
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";
}
}