[Feature]Upload Modem source code
Change-Id: Id4294f30faced84d3e6fd6d5e61e1111bf287a37
diff --git a/mcu/tools/operator_check.pl b/mcu/tools/operator_check.pl
new file mode 100644
index 0000000..34cb8a8
--- /dev/null
+++ b/mcu/tools/operator_check.pl
@@ -0,0 +1,337 @@
+#!/usr/bin/perl
+#
+# Copyright Statement:
+# --------------------
+# This software is protected by Copyright and the information contained
+# herein is confidential. The software may not be copied and the information
+# contained herein may not be used or disclosed except with the written
+# permission of MediaTek Inc. (C) 2007
+#
+# BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+# THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+# RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
+# AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+# NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+# SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+# SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
+# THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
+# NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
+# SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
+#
+# BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
+# LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+# AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+# OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
+# MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+#
+# THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
+# WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
+# LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
+# RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
+# THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
+#
+#*****************************************************************************
+#
+# Filename:
+# ---------
+# operator_check.pl
+#
+# Description:
+# ------------
+# To call operator_feature_check.pl to pre-process operator header files for
+# generating warning messages when customer macros were modified by operator
+# header files.
+#
+# Auther:
+# -------
+# Frank Wu
+#
+# Note:
+# -----
+# none.
+#
+# Log:
+# -----
+# 2007/04/01 Create.
+#
+#use strict;
+use Fcntl;
+use File::Basename;
+
+#Open operator_checklist.txt
+open(optr_check,"$ARGV[2]") || die "Cannot open $ARGV[2]. Error:$!";
+
+my $CUSTOMER = $ARGV[0];
+my $PROJECT = $ARGV[1];
+my $theMF = "make\\$CUSTOMER\_$PROJECT.mak";
+my $CC = "$ARGV[3]";
+my $VIA = "$ARGV[4]";
+my $operator_path = "";
+my $DoCheck = 0;
+my $flag = 0;
+my $operator_macro = "";
+my @logname = ();
+my @macroname = ();
+my $logs = "";
+my $macro = "";
+my @extlist = qw(.log);
+my $base = "";
+my $MMI_switch_path = "";
+my $seg_name = "";
+
+# remove temp file or not
+my $removeTempFile = 1;
+
+open (FILE_HANDLE, "<$theMF") or die "Cannot open $theMF\n";
+while (<FILE_HANDLE>) {
+ if (/^(\S+)\s*=\s*(\S+)/) {
+ my $keyname = lc($1);
+ defined($${keyname});
+ $${keyname} = uc($2);
+ }
+}
+close FILE_HANDLE;
+
+$ARGV[2] =~ /(.+)\\operator_checklist/;
+my $operator_path = $1;
+
+$operator_path =~ /.+\\.+\\(.+?)\\(.+?)\\.+/;
+my $operator_name = uc($1);
+my $spec_version = $2;
+
+if ($optr_spec =~ /.+_TECH/)
+{
+ $optr_spec =~ /.+_.+_(.+)_TECH/;
+ $seg_name = $1;
+}
+else
+{
+ $optr_spec =~ /.+_.+_(.+)/;
+ $seg_name = $1;
+}
+
+if (-e "$operator_path\\operator_check.log"){
+ system("del /F /Q $operator_path\\operator_check.log");
+}
+sysopen(log_file,"$operator_path\\operator_check.log",O_CREAT|O_RDWR|O_APPEND) || die "Error:$!";
+print log_file "[Messages from operator header files]\n";
+while(<optr_check>){
+ if (index($_,"OPERATOR RELATED FILES")>=0 || index($_,"OPERATOR MACRO")>=0){
+ next;
+ }
+ $_ =~ s/{BOARD_VER}/$board_ver/;
+ $_ =~ s/{OpName}/$operator_name/;
+ $_ =~ s/{VerNum}/$spec_version/;
+ $_ =~ s/{SegName}/$seg_name/;
+ $DoCheck = $_ =~ /(.+?)[\s]+(.+?)[\s]+(.+?)[\s]+([\S]+)/;
+ if ($DoCheck){
+ if(index($2,"MMI_features_switch")>=0){
+ $MMI_switch_path = "$1\\$2";
+ } elsif (index($2,"MMI_features.h")>=0) {
+ $MMI_switch_path = "$1\\$2";
+ $MMI_switch_path =~ s/.h/_switch.h/;
+ }
+ my $dummyHeaderFile = splitFilename($3, 0)."_dummy".".h";
+ CreateDummyHeaderFile($3, $dummyHeaderFile, $4, $1, $2, 1);
+ CreateDummyHeaderFile($3, "original_".$dummyHeaderFile, $4, $1, $2, 0);
+ system("perl .\\pcore\\tools\\operator_feature_check.pl $CUSTOMER . $dummyHeaderFile $3 $1 $4 1 $CC $VIA");
+ system("perl .\\pcore\\tools\\operator_feature_check.pl $CUSTOMER . original_$dummyHeaderFile $3 $1 $4 0 $CC $VIA");
+ push @logname, ".\\".splitFilename($3, 0)."_dummy"."_$CUSTOMER".".log";
+ if ($removeTempFile)
+ {
+ system("del /F /Q $4\\*_dummy.h");
+ }
+ } elsif ($_ =~ /([\w]+?)[\s]?/) {
+ $operator_macro = $_;
+ chomp($operator_macro);
+ push @macroname, $operator_macro;
+ }
+}
+close(optr_check);
+
+
+#*******************************************************************
+# Start to parse the log files.
+#*******************************************************************
+
+foreach $logs (@logname){
+ open(read_log,"$logs") || die "Cannot open $logs. Error:$!";
+ $base = basename($logs, @extlist);
+ $base =~ s/_dummy_$CUSTOMER/.h/;
+ while(<read_log>){
+ $line = $_;
+ chomp($line);
+ $line =~ /([\w]+)\'s/;
+ my $macro = $1;
+ my $originalValue = getValue($macro, $base, 0);
+ my $resultValue = getValue($macro, $base, 1);
+
+ if ($originalValue eq ""){
+ $originalValue = "Undefined or NULL";
+ } elsif ($resultValue eq "") {
+ $resultValue = "Undefined or NULL";
+ }
+
+ #To get __ON__, __OFF__ and __DEFAULT__ definitions from MMI_features_switch.h
+ if ($base eq "operator_mmi.h") {
+ open(mmi_switch,"$MMI_switch_path") || die "Cannot open $MMI_switch_path. Error:$!\n";
+ while(<mmi_switch>){
+ $_ =~ /^([\s]*)(#define[\s]+)([\w_]+)([\s]*)(.+)/;
+ if($3 eq "__ON__"){
+ if (index("\($originalValue\)",$5)>=0){
+ $originalValue = "__ON__";
+ } elsif (index("\($resultValue\)",$5)>=0) {
+ $resultValue = "__ON__";
+ }
+ } elsif ($3 eq "__OFF__") {
+ if (index("\($originalValue\)",$5)>=0){
+ $originalValue = "__OFF__";
+ } elsif (index("\($resultValue\)",$5)>=0) {
+ $resultValue = "__OFF__";
+ }
+ } elsif ($3 eq "__DEFAULT__") {
+ if (index("\($originalValue\)",$5)>=0){
+ $originalValue = "__DEFAULT__";
+ } elsif (index("\($resultValue\)",$5)>=0) {
+ $resultValue = "__DEFAULT__";
+ }
+ } elsif ($3 eq "__AUTO__") {
+ if (index("\($originalValue\)",$5)>=0){
+ $originalValue = "__AUTO__";
+ } elsif (index("\($resultValue\)",$5)>=0) {
+ $resultValue = "__AUTO__";
+ }
+ }
+ }
+ close(mmi_switch);
+ }
+
+ print log_file ($line," from \"",$originalValue,"\" to \"",$resultValue,"\" according to"," $operator_name"," Specification Version ","$spec_version"," by File"," \"$base\"",".\n");
+ }
+ close(read_log);
+}
+print log_file "\n";
+close(log_file);
+#*******************************************************************
+#To merge makefile warning messages from make\~warning.tmp
+#*******************************************************************
+if(-e "make\\\~warning.tmp"){
+ system("echo [Messages from operator.mak]>>$operator_path\\operator_check.log");
+ system("type make\\\~warning.tmp >>$operator_path\\operator_check.log");
+}
+
+print "\nPlease check the Operator Log: $operator_path\\operator_check.log\n";
+
+if ($removeTempFile)
+{
+ system("del /F /Q .\\*_dummy_$CUSTOMER.log");
+ system("del /F /Q .\\*_OriginalValue.log");
+ system("del /F /Q .\\*_ResultValue.log");
+}
+
+#*******************************************************************
+sub splitFilename()
+{
+ my $filename;
+ my $refSubFilename = "";
+ my $mainFilename = "";
+
+ ($filename, $refSubFilename) = @_;
+
+ if ($filename =~ /([^\s]*)(\.)([^\.]*$)/)
+ {
+ $mainFilename = "$1";
+ if ($refSubFilename != 0)
+ {
+ $$refSubFilename = "$3";
+ }
+ }
+ return $mainFilename;
+}
+
+sub CreateDummyHeaderFile()
+{
+ my $operatorHeaderFile;
+ my $outputFile = "";
+ my $operatorPath = "";
+ my $filePath = "";
+ my $customerHeaderFile = "";
+ my $IfCreateOpMacro;
+
+ ($operatorHeaderFile, $outputFile, $operatorPath, $filePath, $customerHeaderFile, $IfCreateOpMacro) = @_;
+
+ open(readfile,"$operatorPath\\$operatorHeaderFile") || die "Cannot open $operatorPath\\$operatorHeaderFile. Error:$!";
+ if (-e "$operatorPath\\$outputFile"){
+ system("del $operatorPath\\$outputFile");
+ }
+ sysopen(writefile,"$operatorPath\\$outputFile",O_CREAT|O_RDWR|O_APPEND) || die "Error:$!";
+
+ if ($IfCreateOpMacro){
+ print writefile "#include \"$customerHeaderFile\"";
+ print writefile "\n";
+ while(<readfile>){
+ print writefile $_;
+ }
+ close(writefile);
+ close(readfile);
+ } else {
+ open(readCustH,"$filePath\\$customerHeaderFile") || die "Cannot open $filePath\\$customerHeaderFile. Error:$!";
+ $customerHeaderFile =~ /(.+?)\.h/;
+ my $dummyCustomerHeaderFile = $1."_dummy.h";
+
+ open(writeCustDummyH,">$operatorPath\\$dummyCustomerHeaderFile") || die "Error:$!";
+ while(<readCustH>){
+ if(index($_,"$operatorHeaderFile")>=0){
+ print writeCustDummyH "";
+ } else {
+ print writeCustDummyH $_;
+ }
+ }
+ close(writeCustDummyH);
+ close(readCustH);
+
+ print writefile "#include \"$dummyCustomerHeaderFile\"";
+ print writefile "\n";
+
+ while(<readfile>){
+ if ($_ =~ /^([\s]*)(#define[\s]+)([\w_]+)([\s]*)/){
+ print writefile "//{",$3,"}","\n";
+ }
+ }
+ close(writefile);
+ close(readfile);
+ }
+}
+
+sub getValue() {
+ my $macroN = "";
+ my $OpHeadF = "";
+ my $IfReuslt = "";
+ my $result = "";
+ ($macroN, $OpHeadF, $IfResult) = @_;
+ $OpHeadF =~ /(.+)\./;
+ $OpHeadBase = $1;
+
+ if ($IfResult){
+ open(FH, "$OpHeadBase\_ResultValue.log") || die "Error:$!";
+ while(<FH>){
+ if (index($_, $macroN)==0){
+ $_ =~ /.+=[\s](.+)/;
+ $result = $1;
+ }
+ }
+ close(FH);
+ } else {
+ open(FH, "$OpHeadBase\_OriginalValue.log") || die "Error:$!";
+ while(<FH>){
+ if (index($_, $macroN)==0){
+ $_ =~ /.+=[\s](.+)/;
+ $result = $1;
+ }
+ }
+ close(FH);
+ }
+ return $result;
+}
\ No newline at end of file