[Feature]Upload Modem source code

Change-Id: Id4294f30faced84d3e6fd6d5e61e1111bf287a37
diff --git a/mcu/tools/check_modid.pl b/mcu/tools/check_modid.pl
new file mode 100644
index 0000000..dc4a3a5
--- /dev/null
+++ b/mcu/tools/check_modid.pl
@@ -0,0 +1,276 @@
+#!/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) 2006
+#
+#  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:
+#* ---------
+#*   check_modid.pl
+#*
+#* Project:
+#* --------
+#*
+#*
+#* Description:
+#* ------------
+#*   This script is used to compare pcore/l1core module id
+#* 
+#*
+#* Author:
+#* -------
+#*   Carl Kao (mtk08237)
+#*
+#****************************************************************************/
+use strict;
+use List::Util qw[min max];
+use Data::Dumper;
+
+############################################
+######### configurable variable  ###########
+############################################
+
+my $skip_pattern = "MOD_REQ_QUEUE|\_empty\_string|\_\_end";
+
+my $need_debug=1;
+#undef $need_debug;
+
+############################################
+############################################
+############################################
+
+
+#****************************************************************************
+# Constants
+#****************************************************************************
+my $CHECK_MODID_VERNO = " u0.04";
+                      #  u0.04,  2014/12/05,  Carl,  add skip pattern "_empty_string" and "__end" and skip modid with value 
+                      #  u0.03,  2014/10/15,  Carl,  exit 0 if no pcore/l1core enum file to avoid false alarm in bm_new
+                      #  u0.02,  2014/09/16,  Carl,  add skip pattern "MOD_REQ_QUEUE"
+                      #  u0.01,  2014/05/22,  Carl,  Init version, merge from U3G_TK6280_DEV
+
+my $pcore_enum_file = shift; 
+my $l1dsp_enum_file = shift; 
+my $output_file = shift; 
+
+my %pcore_enum_id_to_name_hash;
+my %pcore_enum_name_to_id_hash;
+my %l1dsp_enum_id_to_name_hash;
+my %l1dsp_enum_name_to_id_hash;
+
+my $max_pcore_enum_id=0;
+my $min_pcore_enum_id=5000;
+my $max_l1dsp_enum_id=0;
+my $min_l1dsp_enum_id=5000;
+
+use constant MAX_ENUM => 8192;
+
+my $is_mod_id_sync=1;
+
+
+$pcore_enum_file or die "Usage: $0 <pcore enum file> <l1dsp enum file> <output file>";
+$l1dsp_enum_file or die "Usage: $0 <pcore enum file> <l1dsp enum file> <output file>";
+$output_file or die "Usage: $0 <pcore enum file> <l1dsp enum file> <output file>";
+
+if(!-e $pcore_enum_file)
+{
+    print "pcore enumFile $pcore_enum_file dose not existed, please check build result.\n";
+    exit 0;
+}
+if(!-e $l1dsp_enum_file)
+{
+    print "l1core enumfile $l1dsp_enum_file dose not existed, please check build result.\n";
+    exit 0;
+}
+
+
+
+
+open (OU, ">$output_file");
+
+
+
+
+open (PCORE_ENUM, "<$pcore_enum_file" || die "cannot open $pcore_enum_file");
+
+while(my $line=<PCORE_ENUM>)
+{
+    if ($line =~ m/^(MOD_\w+)\s+(\d+)/)
+    {
+        #&debug_print("$1 $2\n");
+        
+        my $strModName = $1;
+        my $nModValue  = $2;
+    
+        next if ($strModName =~ /$skip_pattern/);
+        next if ($nModValue > MAX_ENUM);
+    
+        $pcore_enum_name_to_id_hash {$strModName} = $nModValue;
+        $pcore_enum_id_to_name_hash {$nModValue} = $strModName;
+        $max_pcore_enum_id = &max($max_pcore_enum_id,$nModValue);
+        $min_pcore_enum_id = &min($min_pcore_enum_id,$nModValue);
+    }
+}
+
+
+open (L1DSP_ENUM, "<$l1dsp_enum_file" || die "cannot open $l1dsp_enum_file");
+
+while(my $line=<L1DSP_ENUM>)
+{
+    if ($line =~ m/^(MOD_\w+)\s+(\d+)/)
+    {
+        #&debug_print("$1 $2\n");
+        
+        my $strModName = $1;
+        my $nModValue  = $2;
+        
+        next if ($strModName =~ /$skip_pattern/);
+        next if ($nModValue > MAX_ENUM);
+        
+        $l1dsp_enum_name_to_id_hash {$strModName} = $nModValue;
+        $l1dsp_enum_id_to_name_hash {$nModValue} = $strModName;
+        $max_l1dsp_enum_id = &max($max_l1dsp_enum_id,$nModValue);
+        $min_l1dsp_enum_id = &min($min_l1dsp_enum_id,$nModValue);
+    }
+}
+
+my $tmp_str = "id     module id for pcore";
+output_print($tmp_str." " x (57-length($tmp_str)));  
+$tmp_str = "module id for l1dsp\n";
+output_print($tmp_str);  
+$tmp_str = "-" x 100;
+$tmp_str .= "\n";
+output_print($tmp_str);  
+
+my $pre_i = 0;
+for(my $i=$min_pcore_enum_id; $i<=$max_l1dsp_enum_id; $i++)
+{
+    next if ( !exists $pcore_enum_id_to_name_hash{$i} && 
+              ! exists $l1dsp_enum_id_to_name_hash{$i} );
+
+    if($i-$pre_i>1){
+        $tmp_str = "-" x 100;
+        $tmp_str .= "\n";
+        output_print($tmp_str);  
+    }
+    $pre_i = $i;
+
+    if($i<10){  output_print($i."      "); }
+    elsif($i<100){  output_print("$i     "); }
+    elsif($i<1000){  output_print("$i    "); }
+    else {  output_print("$i   "); }
+
+    if(exists $pcore_enum_id_to_name_hash{$i})
+    {
+        output_print($pcore_enum_id_to_name_hash{$i});
+        output_print(" " x (50-length($pcore_enum_id_to_name_hash{$i})));  
+    }
+    else
+    {
+        output_print(" " x 50);  
+    }
+
+    if(exists $l1dsp_enum_id_to_name_hash{$i})
+    {
+        output_print($l1dsp_enum_id_to_name_hash{$i});
+        output_print(" " x (50-length($l1dsp_enum_id_to_name_hash{$i})));  
+    }
+    else
+    {
+        output_print(" " x 50);  
+    }
+
+    if( !exists $pcore_enum_id_to_name_hash{$i} &&
+        $l1dsp_enum_id_to_name_hash{$i} =~ m/HISR/ )
+    {
+        output_print( "\n");
+        next;
+    }
+
+    if( !exists $l1dsp_enum_id_to_name_hash{$i} &&
+        $pcore_enum_id_to_name_hash{$i} =~ m/HISR/ )
+    {
+        output_print("\n");
+        next;
+    }
+
+    if( $l1dsp_enum_id_to_name_hash{$i} =~ m/HISR/ &&
+        $pcore_enum_id_to_name_hash{$i} =~ m/HISR/ )
+    {
+        output_print("\n");
+        next;
+    }
+
+    if( $l1dsp_enum_id_to_name_hash{$i} =~ m/FOR_SYNC_MOD_ID/ ||
+        $pcore_enum_id_to_name_hash{$i} =~ m/FOR_SYNC_MOD_ID/ )
+    {
+        output_print("\n");
+        next;
+    }
+
+    if( $pcore_enum_id_to_name_hash{$i} ne $l1dsp_enum_id_to_name_hash{$i} )
+    {
+        $is_mod_id_sync=0;
+        output_print("WARNING!!\n");
+        next;
+    }
+    
+    output_print("\n");
+    
+}
+
+close OU;
+
+if(!$is_mod_id_sync)
+{
+    print "Error: the module id of pcore/l1dsp are different\n";
+    print "Error: please check $output_file to fix it\n";
+    exit 1;
+}
+
+exit 0;
+
+
+
+
+sub debug_print
+{	
+    print @_ if defined $need_debug;
+}
+
+sub output_print
+{	
+    print OU @_;
+}
+
+