#LIF & Path calculation table parser | |
use Win32::OLE; | |
use warnings; | |
use strict; | |
my $input_file = $ARGV[0]; | |
my $output_file = $ARGV[1]; | |
open (out_file,">$output_file") or die "ERROR\n"; | |
print "Input file: $input_file\n"; | |
print "Output file: $output_file\n"; | |
# Open excel | |
my $Excel = Win32::OLE->GetActiveObject('Excel.Application') | |
|| Win32::OLE->new('Excel.Application', 'Quit'); | |
our $workbook = $Excel->Workbooks->Open($input_file); | |
# Special assignment table | |
my ($special_assignment_define, $special_assignment_string, $special_assignment_search_string) = special_assignment_process(); | |
# RX path calc split table | |
my ($rx_path_calc_split_define, $rx_path_calc_split_string, $rx_path_calc_split_search_string) = rx_path_calc_split_process(); | |
# RX path calc spur table | |
my ($rx_path_calc_spur_define, $rx_path_calc_spur_string, $rx_path_calc_spur_search_string) = rx_path_calc_spur_process(); | |
# LIF spur table | |
my ($lif_spur_define, $lif_spur_string, $lif_spur_search_string) = lif_spur_process(); | |
# Write output file | |
print out_file "// TODO: UPDATE THESE DEFINES TO mml1_path_calculation_lif.h\n"; | |
print out_file $special_assignment_define; | |
print out_file $rx_path_calc_split_define; | |
print out_file $rx_path_calc_spur_define; | |
print out_file $lif_spur_define; | |
print out_file "\n\n"; | |
print out_file "\n\n"; | |
print out_file "// TODO: UPDATE THESE TABLES TO mml1_path_calculation_lif_tables.c\n"; | |
print out_file $special_assignment_string; | |
# Search table not used for SpecialAssign table | |
#print out_file $special_assignment_search_string; | |
print out_file $rx_path_calc_split_string; | |
print out_file $rx_path_calc_split_search_string; | |
print out_file $rx_path_calc_spur_string; | |
print out_file $rx_path_calc_spur_search_string; | |
print out_file "\n\n"; | |
print out_file "\n\n"; | |
print out_file $lif_spur_string; | |
print out_file $lif_spur_search_string; | |
close(out_file); | |
# Close excel | |
$workbook->Close(0); | |
$Excel->Workbooks->Close(); | |
sub special_assignment_process | |
{ | |
# Open worksheet | |
my $curr_ws = $workbook->Worksheets("SpecialAssign"); | |
print "\nProcessing sheet: SpecialAssign\n"; | |
# Process | |
my $Tot_Rows = $curr_ws->UsedRange->Rows->{'Count'}; | |
my $Tot_Cols = $curr_ws->UsedRange->Columns->{'Count'}; | |
my $start_row = 3; | |
print "--->Number of Rows=> $Tot_Rows\n"; | |
print "--->Number of Cols=> $Tot_Cols\n"; | |
print "--->Start parsing from Row $start_row ...\n"; | |
my ($rxpath_str,$rxpath_search_str); | |
$rxpath_str .= "const MML1_PC_SPECIAL_ASSIGNMENT_T MML1_PC_SPECIAL_ASSIGNMENT_TBL[MML1_PC_SPECIAL_ASSIGNMENT_TBL_SIZE] =\n"; | |
$rxpath_str .= "{\n"; | |
$rxpath_str .= "\/* {CC_nums, {RX_Band0, RX_Band1, RX_Band2, RX_Band3, RX_Band4, RX_Band5 },{TX_Band0, SUL_Band0, TX_Band1, SUL_Band0, TX_Band2, SUL_Band2 },{ RX_BW0, RX_BW1, RX_BW2, RX_BW3, RX_BW4, RX_BW5},{ TX_BW0, SUL_BW0, TX_BW1, SUL_BW1, TX_BW2, SUL_BW2},{ RX_freq0, RX_freq1, RX_freq2, RX_freq3, RX_freq4, RX_freq5},{ TX_freq0,SUL_freq0, TX_freq1,SUL_freq1, TX_freq1,SUL_freq1},{ CC0_path, CC1_path, CC2_path, CC3_path, CC4_path, CC5_path},{ TX0_path,SUL0_path, TX1_path,SUL1_path,TX2_path, SUL2_path}, SET#,{ DL0_BW, DL1_BW, DL2_BW, DL3_BW, DL4_BW, DL5_BW},{ UL0_BW, UL1_BW, UL2_BW, UL3_BW},{ DL0_freq, DL1_freq, DL2_freq, DL3_freq, DL4_freq, DL5_freq},{ UL0_freq,SUL0_freq, UL1_freq,SUL1_freq}, MAX_eLNA, Victim_RX,{{ RX0_LO_F, RX0_BW_F},{ RX1_LO_F, RX1_BW_F},{ RX2_LO_F, RX2_BW_F},{ RX3_LO_F, RX3_BW_F},{ RX4_LO_F, RX4_BW_F},{ RX5_LO_F, RX5_BW_F}},{{ TX0_LO_F, TX0_BW_F},{SUL0_LO_F,SUL0_BW_F},{ TX1_LO_F, TX1_BW_F},{SUL1_LO_F,SUL1_BW_F}},UL_PA_IMD},*/\n"; | |
$rxpath_search_str .= "const MML1_PC_LIF_PACKED_BAND_INFO_T MML1_PC_SPECIAL_ASSIGNMENT_SEARCH_TBL[MML1_PC_SPECIAL_ASSIGNMENT_TBL_SIZE] =\n"; | |
$rxpath_search_str .= "{\n"; | |
my $lif_count = 0; | |
my $j; | |
# Process rows | |
for $j ($start_row..$Tot_Rows) | |
{ | |
if($curr_ws->Cells($j,1)->{'Value'} eq '') | |
{ | |
#print "----->Empty row...\n" | |
} | |
else | |
{ | |
$rxpath_str .= " {"; | |
# RX CC num | |
my $i; | |
my $rx_cc_num = 0; | |
for $i (1...6) | |
{ | |
if(!($curr_ws->Cells($j,$i)->{'Value'} eq '0')) | |
{ | |
$rx_cc_num++; | |
} | |
else | |
{ | |
last; | |
} | |
} | |
# TX & SUL CC num | |
my $tx_cc_num = 0; | |
my $sul_cc_num = 0; | |
for $i (0...1) | |
{ | |
if(!($curr_ws->Cells($j,(7+$i*2))->{'Value'} eq '0')) | |
{ | |
$tx_cc_num++; | |
} | |
else | |
{ | |
last; | |
} | |
if(!($curr_ws->Cells($j,(7+$i*2+1))->{'Value'} eq '0')) | |
{ | |
$sul_cc_num++; | |
} | |
} | |
$rxpath_str .= $rx_cc_num; | |
$rxpath_str .= ", "; | |
$rxpath_str .= $tx_cc_num; | |
$rxpath_str .= ", "; | |
$rxpath_str .= $sul_cc_num; | |
$rxpath_str .= ", {"; | |
# RX CC bands | |
$rxpath_search_str .= " {"; | |
my ($temp_str,$temp_search) = band_process($curr_ws,$j,1,6); | |
$rxpath_str .= $temp_str; | |
$rxpath_str .= "},"; | |
$rxpath_search_str .= $temp_search; | |
$rxpath_search_str .= ","; | |
# TX CC Bands | |
$rxpath_str .= "{"; | |
($temp_str,$temp_search) = band_process($curr_ws,$j,7,6); | |
$rxpath_str .= $temp_str; | |
$rxpath_str .= "},"; | |
$temp_search =~ s/^0*//; #Remove preceding 0's from the beginning | |
$temp_search .= "},\n"; | |
$rxpath_search_str .= $temp_search; | |
# RX CC BW | |
$rxpath_str .= "{"; | |
$temp_str = coef_process($curr_ws,$j,17,6); | |
$rxpath_str .= $temp_str; | |
$rxpath_str .= "},"; | |
# TX CC BW | |
$rxpath_str .= "{"; | |
$temp_str = coef_process($curr_ws,$j,23,6); | |
$rxpath_str .= $temp_str; | |
$rxpath_str .= "},"; | |
# RX CC freq | |
$rxpath_str .= "{"; | |
$temp_str = coef_process($curr_ws,$j,33,6); | |
$rxpath_str .= $temp_str; | |
$rxpath_str .= "},"; | |
# TX CC freq | |
$rxpath_str .= "{"; | |
$temp_str = coef_process($curr_ws,$j,39,6); | |
$rxpath_str .= $temp_str; | |
$rxpath_str .= "},"; | |
# RX CC region | |
$rxpath_str .= "{"; | |
$temp_str = coef_process($curr_ws,$j,49,6); | |
$temp_str =~ s/DL/ /g; #Remove DL prefixes used in special assignment table | |
$rxpath_str .= $temp_str; | |
$rxpath_str .= "},"; | |
# TX CC region | |
$rxpath_str .= "{"; | |
$temp_str = coef_process($curr_ws,$j,55,6); | |
$temp_str =~ s/UL/ /g; #Remove UL prefixes used in special assignment table | |
$rxpath_str .= $temp_str; | |
$rxpath_str .= "},"; | |
# SET index | |
$rxpath_str .= " "; | |
$temp_str = coef_process($curr_ws,$j,65,1); | |
$rxpath_str .= $temp_str; | |
$rxpath_str .= ","; | |
# RX region BW | |
$rxpath_str .= "{"; | |
$temp_str = coef_process($curr_ws,$j,66,6); | |
$rxpath_str .= $temp_str; | |
$rxpath_str .= "},"; | |
# TX region BW | |
$rxpath_str .= "{"; | |
$temp_str = coef_process($curr_ws,$j,72,4); | |
$rxpath_str .= $temp_str; | |
$rxpath_str .= "},"; | |
# RX region freq | |
$rxpath_str .= "{"; | |
$temp_str = coef_process($curr_ws,$j,76,6); | |
$rxpath_str .= $temp_str; | |
$rxpath_str .= "},"; | |
# TX region freq | |
$rxpath_str .= "{"; | |
$temp_str = coef_process($curr_ws,$j,82,4); | |
$rxpath_str .= $temp_str; | |
$rxpath_str .= "},"; | |
# MAX eLNA gain | |
$rxpath_str .= " "; | |
$temp_str = coef_process($curr_ws,$j,86,1); | |
$temp_str =~ s/G/ /g; #Remove G prefix used in special assignment table | |
$rxpath_str .= $temp_str; | |
$rxpath_str .= ","; | |
# Victim RX | |
$rxpath_str .= " "; | |
$temp_str = coef_process($curr_ws,$j,87,1); | |
$rxpath_str .= $temp_str; | |
$rxpath_str .= ","; | |
# RX region forbidden flags | |
my $k; | |
my $table_idx; | |
$rxpath_str .= "{"; | |
for $k (0...5) | |
{ | |
$table_idx = 88 + $k*2; | |
$rxpath_str .= "{"; | |
$temp_str = coef_process($curr_ws,$j,$table_idx,2); | |
$rxpath_str .= $temp_str; | |
$rxpath_str .= "},"; | |
} | |
$rxpath_str =~ s/,\s*$//; #Remove spaces and "," after the last element | |
$rxpath_str .= "},"; | |
# TX region forbidden flags | |
$rxpath_str .= "{"; | |
for $k (0...3) | |
{ | |
$table_idx = 100 + $k*2; | |
$rxpath_str .= "{"; | |
$temp_str = coef_process($curr_ws,$j,$table_idx,2); | |
$rxpath_str .= $temp_str; | |
$rxpath_str .= "},"; | |
} | |
$rxpath_str =~ s/,\s*$//; #Remove spaces and "," after the last element | |
$rxpath_str .= "},"; | |
# ulca_pa_imd | |
$rxpath_str .= " "; | |
if($curr_ws->Cells($j,108)->{'Value'} eq "ON") | |
{ | |
$rxpath_str .= " 1"; | |
} | |
else | |
{ | |
$rxpath_str .= " 0"; | |
} | |
$rxpath_str .= ""; | |
#End of line | |
$rxpath_str .= "},\n"; | |
#Increase LIF count | |
$lif_count = $lif_count + 1; | |
} | |
} | |
# Avoid empty table | |
if($lif_count == 0) | |
{ | |
# Empty instance | |
$rxpath_str .= "\n // No table instances, so use empty one\n {0,0,0,{0,0,0,0,0,0},{0,0,0,0,0,0},{0,0,0,0,0,0},{0,0,0,0,0,0},{0,0,0,0,0,0},{0,0,0,0,0,0},{0,0,0,0,0,0},{0,0,0,0,0,0},0,{0,0,0,0,0,0},{0,0,0,0},{0,0,0,0,0,0},{0,0,0,0},0,0,{{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}},{{0,0},{0,0},{0,0},{0,0}},0}"; | |
$rxpath_search_str .= " // No table instances, so use empty one\n {0,0}"; | |
#Increase count | |
$lif_count = $lif_count + 1; | |
} | |
$rxpath_str =~ s/,\s*$//; #Remove spaces and "," after the last element | |
$rxpath_str .= "\n};\n\n"; | |
$rxpath_search_str =~ s/,\s*$//; #Remove spaces and "," after the last element | |
$rxpath_search_str .= "\n};\n\n"; | |
my $rxpath_define_str .= "#define MML1_PC_SPECIAL_ASSIGNMENT_TBL_SIZE ($lif_count)\n"; | |
return ($rxpath_define_str,$rxpath_str,$rxpath_search_str); | |
} | |
sub rx_path_calc_split_process | |
{ | |
# Open worksheet | |
my $curr_ws = $workbook->Worksheets("RxPathCal_Split"); | |
print "\nProcessing sheet: RxPathCal_Split\n"; | |
# Process | |
my $Tot_Rows = $curr_ws->UsedRange->Rows->{'Count'}; | |
my $Tot_Cols = $curr_ws->UsedRange->Columns->{'Count'}; | |
my $start_row = 3; | |
print "--->Number of Rows=> $Tot_Rows\n"; | |
print "--->Number of Cols=> $Tot_Cols\n"; | |
print "--->Start parsing from Row $start_row ...\n"; | |
my ($rxpath_str,$rxpath_search_str); | |
$rxpath_str .= "const MML1_PC_SPLIT_BAND_T MML1_PC_SPLIT_BAND_TBL[MML1_PC_SPLIT_BAND_TBL_SIZE] = \n"; | |
$rxpath_str .= "{\n"; | |
$rxpath_search_str .= "const MML1_PC_LIF_PACKED_BAND_INFO_T MML1_PC_SPLIT_BAND_SEARCH_TBL[MML1_PC_SPLIT_BAND_TBL_SIZE] =\n"; | |
$rxpath_search_str .= "{\n"; | |
$rxpath_str .= "/* {{RX_Band0, RX_Band1, RX_Band2, RX_Band3, RX_Band4, RX_Band5 },{TX_Band0, SUL_Band0, TX_Band1, SUL_Band0 },NotAllowedBand },*/\n"; | |
my $lif_count = 0; | |
my $j; | |
# process rows | |
for $j ($start_row..$Tot_Rows) | |
{ | |
if(!(defined $curr_ws->Cells($j,1)->{'Value'})) | |
{ | |
#print "----->Empty row...\n" | |
} | |
else | |
{ | |
my $i; | |
#print "----->Process Row $j\n"; | |
# RX CC bands | |
$rxpath_str .= " {{"; | |
$rxpath_search_str .= " {"; | |
my ($temp_str,$temp_search) = band_process($curr_ws,$j,1,6); | |
$rxpath_str .= $temp_str; | |
$rxpath_str .= "},"; | |
$rxpath_search_str .= $temp_search; | |
$rxpath_search_str .= ","; | |
#TX Bands | |
$rxpath_str .= "{"; | |
($temp_str,$temp_search) = band_process($curr_ws,$j,7,4); | |
$rxpath_str .= $temp_str; | |
$rxpath_str .= "},"; | |
$temp_search =~ s/^0*//; #Remove preceding 0's from the beginning | |
$temp_search .= "},\n"; | |
$rxpath_search_str .= $temp_search; | |
$rxpath_str .= ""; | |
$rxpath_str .= sprintf("%-16s", "MMRF_UNI_BAND" . $curr_ws->Cells($j,11)->{'Value'}); | |
#End of line | |
$rxpath_str .= "},\n"; | |
#Increase LIF count | |
$lif_count = $lif_count + 1; | |
} | |
} | |
# Avoid empty table | |
if($lif_count == 0) | |
{ | |
# Empty instance | |
$rxpath_str .= "\n // No table instances, so use empty one\n {{0,0,0,0,0,0},{0,0,0,0},0}"; | |
$rxpath_search_str .= " // No table instances, so use empty one\n {0,0}"; | |
#Increase count | |
$lif_count = $lif_count + 1; | |
} | |
$rxpath_str =~ s/,\s*$//; #Remove spaces and "," after the last element | |
$rxpath_str .= "\n};\n\n"; | |
$rxpath_search_str =~ s/,\s*$//; #Remove spaces and "," after the last element | |
$rxpath_search_str .= "\n};\n\n"; | |
my $rxpath_define_str .= "#define MML1_PC_SPLIT_BAND_TBL_SIZE ($lif_count)\n"; | |
return ($rxpath_define_str,$rxpath_str,$rxpath_search_str); | |
} | |
sub rx_path_calc_spur_process | |
{ | |
# Open worksheet | |
my $curr_ws = $workbook->Worksheets("RxPathCal_Spur"); | |
print "\nProcessing sheet: RxPathCal_Spur\n"; | |
# process | |
my $Tot_Rows = $curr_ws->UsedRange->Rows->{'Count'}; | |
my $Tot_Cols = $curr_ws->UsedRange->Columns->{'Count'}; | |
my $start_row = 3; | |
print "--->Number of Rows=> $Tot_Rows\n"; | |
print "--->Number of Cols=> $Tot_Cols\n"; | |
print "--->Start parsing from Row $start_row ...\n"; | |
my ($rxpath_str,$rxpath_search_str); | |
$rxpath_str .= "const MML1_PC_TX_IM2_PARAMS_T MML1_PC_TX_IM2_TBL[MML1_PC_TX_IM2_TBL_SIZE] =\n"; | |
$rxpath_str .= "{\n"; | |
$rxpath_str .= "\/* {{{RX_Band0, RX_Band1, RX_Band2, RX_Band3, RX_Band4, RX_Band5 },{TX_Band0, SUL_Band0, TX_Band1, SUL_Band0 },{ RX_Coef0, RX_Coef1, RX_Coef2, RX_Coef3, RX_Coef4, RX_Coef5},{ TX_Coef0, TX_Coef1, TX_Coef2, TX_Coef3}, Victim_RX},{ RX_BW0, RX_BW1, RX_BW2, RX_BW3, RX_BW4, RX_BW5}} *\/\n"; | |
$rxpath_search_str .= "const MML1_PC_LIF_PACKED_BAND_INFO_T MML1_PC_TX_IM2_SEARCH_TBL[MML1_PC_TX_IM2_TBL_SIZE] =\n"; | |
$rxpath_search_str .= "{\n"; | |
my $lif_count = 0; | |
my $j; | |
# process rows | |
for $j ($start_row..$Tot_Rows) | |
{ | |
if (!(defined $curr_ws->Cells($j,1)->{'Value'})) | |
{ | |
#print "----->Empty row...\n" | |
} | |
else | |
{ | |
my $i; | |
#print "----->Process Row $j\n"; | |
# RX bands | |
$rxpath_str .= " {{{"; | |
$rxpath_search_str .= " {"; | |
my ($temp_str,$temp_search) = band_process($curr_ws,$j,1,6); | |
$rxpath_str .= $temp_str; | |
$rxpath_str .= "},"; | |
$rxpath_search_str .= $temp_search; | |
$rxpath_search_str .= ","; | |
#TX Bands | |
$rxpath_str .= "{"; | |
($temp_str,$temp_search) = band_process($curr_ws,$j,7,4); | |
$rxpath_str .= $temp_str; | |
$rxpath_str .= "},"; | |
$temp_search =~ s/^0*//; #Remove preceding 0's from the beginning | |
$temp_search .= "},\n"; | |
$rxpath_search_str .= $temp_search; | |
# RX coef | |
$rxpath_str .= "{"; | |
$temp_str = coef_process($curr_ws,$j,11,6); | |
$rxpath_str .= $temp_str; | |
$rxpath_str .= "},"; | |
# TX coef | |
$rxpath_str .= "{"; | |
$temp_str = coef_process($curr_ws,$j,17,4); | |
$rxpath_str .= $temp_str; | |
$rxpath_str .= "},"; | |
# Victim RX | |
$rxpath_str .= sprintf("%12s",$curr_ws->Cells($j,21)->{'Value'} . "},"); | |
# RX Merge | |
$rxpath_str .= "{"; | |
$temp_str = coef_process($curr_ws,$j,22,6); | |
$rxpath_str .= $temp_str; | |
$rxpath_str .= "}"; | |
#End of line | |
$rxpath_str .= "},\n"; | |
#Increase LIF count | |
$lif_count = $lif_count + 1; | |
} | |
} | |
# Avoid empty table | |
if($lif_count == 0) | |
{ | |
# Empty instance | |
$rxpath_str .= "\n // No table instances, so use empty one\n {{{0,0,0,0,0,0},{0,0,0,0},{0,0,0,0,0,0},{0,0,0,0},0},{0,0,0,0,0,0}}"; | |
$rxpath_search_str .= " // No table instances, so use empty one\n {0,0}"; | |
#Increase count | |
$lif_count = $lif_count + 1; | |
} | |
$rxpath_str =~ s/,\s*$//; #Remove spaces and "," after the last element | |
$rxpath_str .= "\n};\n\n"; | |
$rxpath_search_str =~ s/,\s*$//; #Remove spaces and "," after the last element | |
$rxpath_search_str .= "\n};\n\n"; | |
my $rxpath_define_str .= "#define MML1_PC_TX_IM2_TBL_SIZE ($lif_count)\n"; | |
return ($rxpath_define_str,$rxpath_str,$rxpath_search_str); | |
} | |
sub lif_spur_process | |
{ | |
# Open worksheet | |
my $curr_ws = $workbook->Worksheets("LIFtable"); | |
print "\nProcessing sheet: LIFtable\n"; | |
# process | |
my $Tot_Rows= $curr_ws->UsedRange->Rows->{'Count'}; | |
my $Tot_Cols= $curr_ws->UsedRange->Columns->{'Count'}; | |
my $start_row = 4; | |
print "--->Number of Rows=> $Tot_Rows\n"; | |
print "--->Number of Cols=> $Tot_Cols\n"; | |
print "--->Start parsing from Row $start_row ...\n"; | |
# set struct definition | |
my $txspur_tbl_str = "const MML1_LIF_LO_SHIFT_TX_SPUR_PARAMS_T MML1_LIF_LO_SHIFT_TX_SPUR_PARAMS_TBL[MML1_LIF_LO_SHIFT_TX_SPUR_TBL_SIZE] =\n"; | |
$txspur_tbl_str .= "{\n"; | |
$txspur_tbl_str .= "\/* {{{RX_Band0, RX_Band1, RX_Band2, RX_Band3, RX_Band4, RX_Band5 },{TX_Band0, SUL_Band0, TX_Band1, SUL_Band1 },{ RX_Coef0, RX_Coef1, RX_Coef2, RX_Coef3, RX_Coef4, RX_Coef5},{ TX_Coef0,SUL_Coef0, TX_Coef1,SUL_Coef1}, Victim_RX}, Spur_grp#, { RX_BW0, RX_BW1, RX_BW2, RX_BW3, RX_BW4, RX_BW5},{ RX0_m, RX1_m, RX2_m, RX3_m, RX4_m, RX5_m}, LIF_EN, Max_eLNA_gain, APT_flag} */\n"; | |
my $txspur_search_tbl_str = "const MML1_PC_LIF_PACKED_BAND_INFO_T MML1_LIF_LO_SHIFT_TX_SPUR_SEARCH_TBL[MML1_LIF_LO_SHIFT_TX_SPUR_TBL_SIZE] = \n"; | |
$txspur_search_tbl_str .= "{\n"; | |
my $lif_count = 0; | |
my $j; | |
# process rows | |
for $j ($start_row..$Tot_Rows) | |
{ | |
if(!(defined $curr_ws->Cells($j,1)->{'Value'})) | |
{ | |
#print "----->Empty row...\n" | |
} | |
else | |
{ | |
#print "----->Process Row $j\n"; | |
# RX bands | |
$txspur_tbl_str .= " {{{"; | |
$txspur_search_tbl_str .= " {"; | |
my ($temp_str,$temp_search) = band_process($curr_ws,$j,1,6); | |
$txspur_tbl_str .= $temp_str; | |
$txspur_tbl_str .= "},"; | |
$txspur_search_tbl_str .= $temp_search; | |
$txspur_search_tbl_str .= ","; | |
# TX Bands | |
$txspur_tbl_str .= "{"; | |
($temp_str,$temp_search) = band_process($curr_ws,$j,7,4); | |
$txspur_tbl_str .= $temp_str; | |
$txspur_tbl_str .= "},"; | |
$temp_search =~ s/^0*//; #Remove preceding 0's from the beginning | |
$temp_search .= "},\n"; | |
$txspur_search_tbl_str .= $temp_search; | |
# RX coef | |
$txspur_tbl_str .= "{"; | |
$temp_str = coef_process($curr_ws,$j,12,6); | |
$txspur_tbl_str .= $temp_str; | |
$txspur_tbl_str .= "},"; | |
# TX coef | |
$txspur_tbl_str .= "{"; | |
$temp_str = coef_process($curr_ws,$j,18,4); | |
$txspur_tbl_str .= $temp_str; | |
$txspur_tbl_str .= "},"; | |
# Victim RX | |
$txspur_tbl_str .= sprintf("%12s",$curr_ws->Cells($j,22)->{'Value'} . "},"); | |
# Spur Group | |
$txspur_tbl_str .= sprintf("%12s",$curr_ws->Cells($j,11)->{'Value'} . ", "); | |
# RX BW | |
$txspur_tbl_str .= "{"; | |
$temp_str = coef_process($curr_ws,$j,23,6); | |
$txspur_tbl_str .= $temp_str; | |
$txspur_tbl_str .= "},"; | |
# RX Movable | |
$txspur_tbl_str .= "{"; | |
my $i; | |
for($i = 29; $i < 35; $i++) | |
{ | |
if($curr_ws->Cells($j,$i)->{'Value'} eq 'not') | |
{ | |
$txspur_tbl_str .= sprintf("%7s","0,"); | |
} | |
else | |
{ | |
$txspur_tbl_str .= sprintf("%7s",$curr_ws->Cells($j,$i)->{'Value'} . ","); | |
} | |
} | |
$txspur_tbl_str =~ s/,\s*$//; #Remove spaces and "," after the last element | |
$txspur_tbl_str .= "},"; | |
# LIF EN | |
if($curr_ws->Cells($j,35)->{'Value'} eq "ON") | |
{ | |
$txspur_tbl_str .= sprintf("%8s"," 1,"); | |
} | |
else | |
{ | |
$txspur_tbl_str .= sprintf("%8s"," 0,"); | |
} | |
# Max eLNA Gain | |
$txspur_tbl_str .= " "; | |
$temp_str = coef_process($curr_ws,$j,36,1); | |
$temp_str =~ s/G/ /g; #Remove G prefix used in special assignment table | |
$txspur_tbl_str .= $temp_str; | |
$txspur_tbl_str .= ","; | |
# APT_flag EN | |
if($curr_ws->Cells($j,37)->{'Value'} eq "ON") | |
{ | |
$txspur_tbl_str .= " 1"; | |
} | |
else | |
{ | |
$txspur_tbl_str .= " 0"; | |
} | |
#End of line | |
$txspur_tbl_str .= "},\n"; | |
#Increase LIF count | |
$lif_count = $lif_count + 1; | |
} | |
} | |
# Avoid empty table | |
if($lif_count == 0) | |
{ | |
# Empty instance | |
$txspur_tbl_str .= "\n // No table instances, so use empty one\n {{{0,0,0,0,0,0},{0,0,0,0},{0,0,0,0,0,0},{0,0,0,0},0},0,{0,0,0,0,0,0},{0,0,0,0,0,0},0,0,0}"; | |
$txspur_search_tbl_str .= " // No table instances, so use empty one\n {0,0}"; | |
#Increase count | |
$lif_count = $lif_count + 1; | |
} | |
$txspur_tbl_str =~ s/,\s*$//; #Remove spaces and "," after the last element | |
$txspur_tbl_str .= "\n};\n\n"; | |
$txspur_search_tbl_str =~ s/,\s*$//; #Remove spaces and "," after the last element | |
$txspur_search_tbl_str .= "\n};\n\n"; | |
my $define_str .= "#define MML1_LIF_LO_SHIFT_TX_SPUR_TBL_SIZE ($lif_count)\n"; | |
return ($define_str ,$txspur_tbl_str, $txspur_search_tbl_str); | |
} | |
sub band_process | |
{ | |
my ($curr_ws,$row,$start,$count) = @_; | |
my $i; | |
my $end = $start + $count; | |
my $tbl_str; | |
my $tbl_search; | |
for($i = $start; $i < $end; $i++) | |
{ | |
if($curr_ws->Cells($row,$i)->{'Value'} eq "0") | |
{ | |
$tbl_str .= sprintf("%-19s", "MMRF_UNI_BANDNONE,"); | |
if($i == 1) | |
{ | |
$tbl_search .= sprintf("%s",0); | |
} | |
else | |
{ | |
$tbl_search .= sprintf("%03s",0); | |
} | |
} | |
else | |
{ | |
$tbl_str .= sprintf("%-19s", "MMRF_UNI_BAND" . $curr_ws->Cells($row,$i)->{'Value'} . ","); | |
if($i == 1) | |
{ | |
$tbl_search .= sprintf("%s",$curr_ws->Cells($row,$i)->{'Value'}); | |
} | |
else | |
{ | |
$tbl_search .= sprintf("%03s",$curr_ws->Cells($row,$i)->{'Value'}); | |
} | |
} | |
} | |
$tbl_str =~ s/,\s*$//; #Remove spaces and "," after the last element | |
#print "$tbl_str $tbl_search"; | |
return ($tbl_str,$tbl_search); | |
} | |
sub coef_process | |
{ | |
my ($curr_ws,$row,$start,$count) = @_; | |
my $i; | |
my $end = $start + $count; | |
my $tbl_str; | |
for($i = $start; $i < $end; $i++) | |
{ | |
$tbl_str .= sprintf("%10s", $curr_ws->Cells($row,$i)->{'Value'} . ","); | |
} | |
$tbl_str =~ s/,\s*$//; #Remove spaces and "," after the last element | |
return $tbl_str; | |
} |