blob: dc468c5230aa76b51bfceeae71db119c04725845 [file] [log] [blame]
rjw6c1fd8f2022-11-30 14:33:01 +08001use strict;
2use warnings;
3
4
5package CUIF_Structure_Check;
6use File::Find;
7return 1;
8
9
10sub crc32 {
11 my ($input, $init_value, $polynomial) = @_;
12
13 $init_value = 0 unless (defined $init_value);
14 $polynomial = 0xedb88320 unless (defined $polynomial);
15
16 my @lookup_table;
17
18 for (my $i=0; $i<256; $i++) {
19 my $x = $i;
20 for (my $j=0; $j<8; $j++) {
21 if ($x & 1) {
22 $x = ($x >> 1) ^ $polynomial;
23 } else {
24 $x = $x >> 1;
25 }
26 }
27 push @lookup_table, $x;
28 }
29
30 my $crc = $init_value ^ 0xffffffff;
31
32 foreach my $x (unpack ('C*', $input)) {
33 $crc = (($crc >> 8) & 0xffffff) ^ $lookup_table[ ($crc ^ $x) & 0xff ];
34 }
35
36 $crc = $crc ^ 0xffffffff;
37
38 return $crc;
39}
40
41
42sub file_checksum_input{
43 my ($filename) = @_;
44 open(FILE,$filename) or die "Could not open $filename, $!";
45 my $str="";
46 my @keyword=<FILE>;
47
48 close(FILE);
49 $str=join("",@keyword);
50
51 return $str;
52}
53my @all_list;
54sub want
55{
56 if($_ =~ /\.h$/){
57 push @all_list, $File::Find::name;
58 }
59}
60sub folder_checksum_input{
61
62 my ($foldername) = @_;
63 find(\&want ,$foldername);
64 my $str="";
65 my $total_str="";
66 foreach (sort{crc32($a)<=>crc32($b)}@all_list)
67 {
68 open(FILE,$_);
69 my @keyword=<FILE>;
70 close(FILE);
71 $str=join("",@keyword);
72 $total_str = join($total_str,"",$str);
73 }
74 @all_list = ();
75 return $total_str;
76}
77
78sub merge_checksum_input{
79 my (@pathlist)=@_;
80 my $checksum_input="";
81 my $checksum_str="";
82 foreach (@pathlist)
83 {
84 if($_ =~ /\.h$/){
85 $checksum_str=file_checksum_input($_);
86 $checksum_input = join($checksum_input,"",$checksum_str);
87 }
88 else{
89 $checksum_str=folder_checksum_input($_);
90 $checksum_input=join($checksum_input,"",$checksum_str);
91 }
92 }
93 return $checksum_input;
94}
95
96sub get_cuif_checksum_value{
97##########################################################
98# user : 0 =>inner
99# 1 =>brp
100# 2 =>fec
101# 4 =>speech
102##########################################################
103 my($user,$cuif_folder_path)=@_;
104 my $CUIF_SS_FILE_PATH=join($cuif_folder_path,"","/CUIF_SS_region.h");
105 if($user== 0 || $user==1){
106 my $CUIF_INNER_BRP_PATH=join($cuif_folder_path,"","/inner_brp/");
107 my @CUIF_INNER_BRP=($CUIF_SS_FILE_PATH,$CUIF_INNER_BRP_PATH);
108 my $checksum_value=sprintf("%d", &crc32(&merge_checksum_input(@CUIF_INNER_BRP)));
109 $checksum_value=join($checksum_value,"","u");
110 return $checksum_value;
111 }
112 elsif($user==2){
113 my $CUIF_FEC_WBRP_PATH=join($cuif_folder_path,"","/fec_wbrp/");
114 my @CUIF_FEC_WBRP=($CUIF_SS_FILE_PATH,$CUIF_FEC_WBRP_PATH);
115 my $checksum_value=sprintf("%d", &crc32(&merge_checksum_input(@CUIF_FEC_WBRP)));
116 $checksum_value=join($checksum_value,"","u");
117 return $checksum_value;
118
119 }
120 elsif($user==3){
121 my $CUIF_SPEECH_PATH=join($cuif_folder_path,"","/speech/");
122 my @CUIF_SPEECH=($CUIF_SS_FILE_PATH,$CUIF_SPEECH_PATH);
123 my $checksum_value=sprintf("%d", &crc32(&merge_checksum_input(@CUIF_SPEECH)));
124 $checksum_value=join($checksum_value,"","u");
125 return $checksum_value;
126
127 }
128 else:
129 return 0;
130}
131
132##############################
133# test code
134##############################
135#my $FILENAME= ($ARGV[0]);
136#printf "%s",get_cuif_checksum_value(0,$FILENAME);
137#print "\n";
138#printf "%x",get_cuif_checksum_value(1,$FILENAME);
139#print "\n";
140#printf "%x",get_cuif_checksum_value(2,$FILENAME);
141#print "\n";
142#printf "%x",get_cuif_checksum_value(3,$FILENAME);
143#print "\n";
144
145