[Feature]Upload Modem source code
Change-Id: Id4294f30faced84d3e6fd6d5e61e1111bf287a37
diff --git a/mcu/tools/CXIF/CUIF_Structure_Check.pm b/mcu/tools/CXIF/CUIF_Structure_Check.pm
new file mode 100644
index 0000000..dc468c5
--- /dev/null
+++ b/mcu/tools/CXIF/CUIF_Structure_Check.pm
@@ -0,0 +1,145 @@
+use strict;
+use warnings;
+
+
+package CUIF_Structure_Check;
+use File::Find;
+return 1;
+
+
+sub crc32 {
+ my ($input, $init_value, $polynomial) = @_;
+
+ $init_value = 0 unless (defined $init_value);
+ $polynomial = 0xedb88320 unless (defined $polynomial);
+
+ my @lookup_table;
+
+ for (my $i=0; $i<256; $i++) {
+ my $x = $i;
+ for (my $j=0; $j<8; $j++) {
+ if ($x & 1) {
+ $x = ($x >> 1) ^ $polynomial;
+ } else {
+ $x = $x >> 1;
+ }
+ }
+ push @lookup_table, $x;
+ }
+
+ my $crc = $init_value ^ 0xffffffff;
+
+ foreach my $x (unpack ('C*', $input)) {
+ $crc = (($crc >> 8) & 0xffffff) ^ $lookup_table[ ($crc ^ $x) & 0xff ];
+ }
+
+ $crc = $crc ^ 0xffffffff;
+
+ return $crc;
+}
+
+
+sub file_checksum_input{
+ my ($filename) = @_;
+ open(FILE,$filename) or die "Could not open $filename, $!";
+ my $str="";
+ my @keyword=<FILE>;
+
+ close(FILE);
+ $str=join("",@keyword);
+
+ return $str;
+}
+my @all_list;
+sub want
+{
+ if($_ =~ /\.h$/){
+ push @all_list, $File::Find::name;
+ }
+}
+sub folder_checksum_input{
+
+ my ($foldername) = @_;
+ find(\&want ,$foldername);
+ my $str="";
+ my $total_str="";
+ foreach (sort{crc32($a)<=>crc32($b)}@all_list)
+ {
+ open(FILE,$_);
+ my @keyword=<FILE>;
+ close(FILE);
+ $str=join("",@keyword);
+ $total_str = join($total_str,"",$str);
+ }
+ @all_list = ();
+ return $total_str;
+}
+
+sub merge_checksum_input{
+ my (@pathlist)=@_;
+ my $checksum_input="";
+ my $checksum_str="";
+ foreach (@pathlist)
+ {
+ if($_ =~ /\.h$/){
+ $checksum_str=file_checksum_input($_);
+ $checksum_input = join($checksum_input,"",$checksum_str);
+ }
+ else{
+ $checksum_str=folder_checksum_input($_);
+ $checksum_input=join($checksum_input,"",$checksum_str);
+ }
+ }
+ return $checksum_input;
+}
+
+sub get_cuif_checksum_value{
+##########################################################
+# user : 0 =>inner
+# 1 =>brp
+# 2 =>fec
+# 4 =>speech
+##########################################################
+ my($user,$cuif_folder_path)=@_;
+ my $CUIF_SS_FILE_PATH=join($cuif_folder_path,"","/CUIF_SS_region.h");
+ if($user== 0 || $user==1){
+ my $CUIF_INNER_BRP_PATH=join($cuif_folder_path,"","/inner_brp/");
+ my @CUIF_INNER_BRP=($CUIF_SS_FILE_PATH,$CUIF_INNER_BRP_PATH);
+ my $checksum_value=sprintf("%d", &crc32(&merge_checksum_input(@CUIF_INNER_BRP)));
+ $checksum_value=join($checksum_value,"","u");
+ return $checksum_value;
+ }
+ elsif($user==2){
+ my $CUIF_FEC_WBRP_PATH=join($cuif_folder_path,"","/fec_wbrp/");
+ my @CUIF_FEC_WBRP=($CUIF_SS_FILE_PATH,$CUIF_FEC_WBRP_PATH);
+ my $checksum_value=sprintf("%d", &crc32(&merge_checksum_input(@CUIF_FEC_WBRP)));
+ $checksum_value=join($checksum_value,"","u");
+ return $checksum_value;
+
+ }
+ elsif($user==3){
+ my $CUIF_SPEECH_PATH=join($cuif_folder_path,"","/speech/");
+ my @CUIF_SPEECH=($CUIF_SS_FILE_PATH,$CUIF_SPEECH_PATH);
+ my $checksum_value=sprintf("%d", &crc32(&merge_checksum_input(@CUIF_SPEECH)));
+ $checksum_value=join($checksum_value,"","u");
+ return $checksum_value;
+
+ }
+ else:
+ return 0;
+}
+
+##############################
+# test code
+##############################
+#my $FILENAME= ($ARGV[0]);
+#printf "%s",get_cuif_checksum_value(0,$FILENAME);
+#print "\n";
+#printf "%x",get_cuif_checksum_value(1,$FILENAME);
+#print "\n";
+#printf "%x",get_cuif_checksum_value(2,$FILENAME);
+#print "\n";
+#printf "%x",get_cuif_checksum_value(3,$FILENAME);
+#print "\n";
+
+