FreeCalypso > hg > tcs211-l1-reconst
changeset 142:60a142a16d6b
l1_sync.c: l1s_meas_manager() fully reconstructed
author | Mychaela Falconia <falcon@ivan.Harhan.ORG> |
---|---|
date | Sun, 15 May 2016 07:22:04 +0000 |
parents | 99caa1978401 |
children | 136a30c40ba5 |
files | chipsetsw/layer1/cfile/l1_sync.c |
diffstat | 1 files changed, 34 insertions(+), 192 deletions(-) [+] |
line wrap: on
line diff
--- a/chipsetsw/layer1/cfile/l1_sync.c Sun May 15 02:21:37 2016 +0000 +++ b/chipsetsw/layer1/cfile/l1_sync.c Sun May 15 07:22:04 2016 +0000 @@ -230,13 +230,13 @@ /*-------------------------------------------------------*/ /* Prototypes of external functions used in this file. */ /*-------------------------------------------------------*/ -void l1ddsp_meas_read (UWORD8 nbmeas, UWORD16 *pm); +void l1ddsp_meas_read (UWORD8 nbmeas, UWORD8 *pm); #if L1_GPRS void l1ps_transfer_mode_manager (void); void l1ps_reset_db_mcu_to_dsp (T_DB_MCU_TO_DSP_GPRS *page_ptr); void l1pddsp_meas_ctrl (UWORD8 nbmeas, UWORD8 pm_pos); - void l1pddsp_meas_read (UWORD8 nbmeas, UWORD16 *pm_read); + void l1pddsp_meas_read (UWORD8 nbmeas, UWORD8 *pm_read); void l1ps_meas_manager (void); void l1ps_transfer_meas_manager (void); void l1ps_macs_rlc_downlink_call (void); @@ -5235,7 +5235,7 @@ /*-------------------------------------------------------*/ void l1s_meas_manager(void) { - static static_s_rxlev_cntr = 0; + /* static static_s_rxlev_cntr = 0; */ UWORD32 i; UWORD8 IL_for_rxlev; UWORD8 adc_active = INACTIVE; @@ -5370,9 +5370,9 @@ if((l1a_l1s_com.l1s_en_meas & FSMS_MEAS) && !(l1a_l1s_com.meas_param & FSMS_MEAS)) { #if L1_GPRS - UWORD16 pm_read[NB_MEAS_MAX_GPRS]={0}; //omaps00090550 + UWORD8 pm_read[NB_MEAS_MAX_GPRS]; #else - UWORD16 pm_read[NB_MEAS_MAX]; + UWORD8 pm_read[NB_MEAS_MAX]; #endif UWORD8 nbmeas, max_nbmeas; @@ -5446,7 +5446,6 @@ #endif l1_check_pm_error(pm_read[i], FULL_LIST_MEAS_ID); - pm_read[i] = (pm_read[i] >> 5); #if (TRACE_TYPE==3) stats_samples_pm(pm_read[i]); @@ -5898,7 +5897,8 @@ * as the measurement can end in potentially 2 TDMA frames itself and an IBA_R message * when comes in certail TDMA frames of paging task, both static ctrl index and static * read index will be zero */ - if((static_ctrl_index != 0) || (static_read_index != 0) || (pch_msg != NULL)) + /* FreeCalypso TCS211 reconstruction: above change reverted */ + if((static_ctrl_index != 0) || (static_read_index != 0)) { // Paging process has been interrupted by a L3 message @@ -5934,11 +5934,14 @@ static UWORD8 static_nbmeas_to_report = 8; static UWORD8 static_nbmeas_ctrl_d = 0; static UWORD8 static_nbmeas_ctrl_dd = 0; + +#if 0 /* FreeCalypso TCS211 reconstruction */ static UWORD8 num_pm[4]={0,0,0,0}; #if (FF_L1_FAST_DECODING == 1) static UWORD8 num_pm_fp[2]={0,0}; #endif static UWORD8 num_pm_frames = 0; /* number of frames over which measurement is scheduled */ +#endif UWORD8 nbmeas_ctrl = 0; #if (FF_L1_FAST_DECODING == 1) @@ -5968,9 +5971,8 @@ #endif // Read power measurement result from DSP. - pm = (l1s_dsp_com.dsp_db_r_ptr->a_pm[i] & 0xffff); + pm = (l1s_dsp_com.dsp_db_r_ptr->a_pm[i] & 0xffff) >> 5; l1_check_pm_error(pm, I_BA_MEAS_ID); - pm = pm >> 5; #if (TRACE_TYPE==3) stats_samples_pm(pm); @@ -5988,26 +5990,21 @@ #endif - #if (GSM_IDLE_RAM != 1) - - //Check if the message is not empty, else allocate memory - if (pch_msg == NULL) +#if 0 /* FreeCalypso TCS211 reconstruction */ + //Check if the message is not empty, else allocate memory + if (pch_msg == NULL) { pch_msg = os_alloc_sig(sizeof(T_L1C_RXLEV_PERIODIC_DONE)); DEBUGMSG(status,NU_ALLOC_ERR) pch_msg->SignalCode = L1C_RXLEV_PERIODIC_DONE; } - // Fill reporting message. - - ((T_L1C_RXLEV_PERIODIC_DONE*)(pch_msg->SigP))-> - A[static_read_index].radio_freq_no = radio_freq_read; - ((T_L1C_RXLEV_PERIODIC_DONE*)(pch_msg->SigP))-> - A[static_read_index].rxlev = l1s_encode_rxlev(IL_for_rxlev); - #elif (GSM_IDLE_RAM == 1) // In this case the msg is not allocated yet -> save into internal variable - // Fill reporting message. - l1s.A[static_read_index].radio_freq_no = radio_freq_read; - l1s.A[static_read_index].rxlev = l1s_encode_rxlev(IL_for_rxlev); - #endif +#endif + + // Fill reporting message. + ((T_L1C_RXLEV_PERIODIC_DONE*)(pch_msg->SigP))-> + A[static_read_index].radio_freq_no = radio_freq_read; + ((T_L1C_RXLEV_PERIODIC_DONE*)(pch_msg->SigP))-> + A[static_read_index].rxlev = l1s_encode_rxlev(IL_for_rxlev); // Increment the number of neighbor meas read. static_read_index ++; @@ -6022,7 +6019,7 @@ // Accumulate the new measurement with the partial result. // Compensate AGC for current measurement value. l1a_l1s_com.Scell_info.meas.acc += l1a_l1s_com.Scell_IL_for_rxlev; - static_s_rxlev_cntr++; + /* static_s_rxlev_cntr++; */ // ********** // Reporting @@ -6064,7 +6061,7 @@ // ((T_L1C_RXLEV_PERIODIC_DONE*)(pch_msg->SigP))->s_rxlev = l1s_encode_rxlev(l1a_l1s_com.Scell_info.meas.acc/4); //#endif /* #if (FF_L1_FAST_DECODING == 1) #else */ -((T_L1C_RXLEV_PERIODIC_DONE*)(pch_msg->SigP))->s_rxlev = l1s_encode_rxlev(l1a_l1s_com.Scell_info.meas.acc/(static_s_rxlev_cntr)); +((T_L1C_RXLEV_PERIODIC_DONE*)(pch_msg->SigP))->s_rxlev = l1s_encode_rxlev(l1a_l1s_com.Scell_info.meas.acc/4); // Fill "nbr_of_carriers" field, it is 7 when a RACH coincides with paging block, 8 otherwise. ((T_L1C_RXLEV_PERIODIC_DONE*)(pch_msg->SigP))->nbr_of_carriers = static_nbmeas_to_report; @@ -6090,7 +6087,7 @@ // Reset pointer for debugg. pch_msg = NULL; - static_s_rxlev_cntr = 0; + /* static_s_rxlev_cntr = 0; */ } }// end of READ @@ -6107,7 +6104,7 @@ pch_msg = os_alloc_sig(sizeof(T_L1C_RXLEV_PERIODIC_DONE)); DEBUGMSG(status,NU_ALLOC_ERR) pch_msg->SignalCode = L1C_RXLEV_PERIODIC_DONE; - static_s_rxlev_cntr = 0; + /* static_s_rxlev_cntr = 0; */ } #endif // Reset accumalator for serving measurements. @@ -6120,136 +6117,14 @@ l1a_l1s_com.ba_list.first_index = l1a_l1s_com.ba_list.next_to_ctrl; // Reset static variables for control of nbmeas per frame - static_nbmeas_to_report = calc_num_pm_to_report(); + static_nbmeas_to_report = 8; static_nbmeas_ctrl_d = 0; static_nbmeas_ctrl_dd = 0; - - switch(static_nbmeas_to_report) - { - case 1: num_pm[0]=1; - num_pm[1]=0; - num_pm[2]=0; - num_pm[3]=0; - num_pm_frames = 1; - break; - case 2: num_pm[0]=1; - num_pm[1]=1; - num_pm[2]=0; - num_pm[3]=0; - num_pm_frames = 2; - break; - case 3: num_pm[0]=1; - num_pm[1]=1; - num_pm[2]=1; - num_pm[3]=0; - num_pm_frames = 3; - break; - case 4: num_pm[0]=1; - num_pm[1]=1; - num_pm[2]=1; - num_pm[3]=1; - num_pm_frames = 4; - break; - case 5: num_pm[0]=2; - num_pm[1]=1; - num_pm[2]=1; - num_pm[3]=1; - num_pm_frames = 4; - break; - case 6: num_pm[0]=2; - num_pm[1]=2; - num_pm[2]=1; - num_pm[3]=1; - num_pm_frames = 4; - break; - case 7: num_pm[0]=2; - num_pm[1]=2; - num_pm[2]=2; - num_pm[3]=1; - num_pm_frames = 4; - break; - } - #if (FF_L1_FAST_DECODING == 1) - switch(static_nbmeas_to_report) - { - case 1: num_pm_fp[0]=1; - num_pm_fp[1]=0; - num_pm_frames = 1; - break; - case 2: num_pm_fp[0]=1; - num_pm_fp[1]=1; - num_pm_frames = 2; - break; - case 3: num_pm_fp[0]=2; - num_pm_fp[1]=1; - num_pm_frames = 2; - break; - case 4: num_pm_fp[0]=3; - num_pm_fp[1]=1; - num_pm_frames = 2; - break; - case 5: num_pm_fp[0]=4; - num_pm_fp[1]=1; - num_pm_frames = 2; - break; - case 6: num_pm_fp[0]=4; - num_pm_fp[1]=2; - num_pm_frames = 2; - break; - case 7: num_pm_fp[0]=4; - num_pm_fp[1]=3; - num_pm_frames = 2; - break; - } - #endif - - } // A PCH burst has been controled, we must make the control of 1 or 2 new measurements. - #if (FF_L1_FAST_DECODING == 1) - schedule_measures = FALSE; - - if ( (fast_decoding == TRUE) - && - ( (l1a_l1s_com.ba_list.np_ctrl == 1) || - (l1a_l1s_com.ba_list.np_ctrl == 2) ) - ) - { - /* Fast decoding enabled, current NP control on bursts 1 or 2 */ - #if (GSM_IDLE_RAM!=1) - if (pch_msg != NULL) - #endif - { - - schedule_measures = TRUE; - } - } - else - if ( (fast_decoding == FALSE) - && - ( (num_pm[l1a_l1s_com.ba_list.np_ctrl-1]!=0) && ((l1a_l1s_com.ba_list.np_ctrl >=1) && (l1a_l1s_com.ba_list.np_ctrl<=4))) - ) - { - /* Fast decoding disabled, use legacy condition to schedule up to - 2 power measurements */ - #if (GSM_IDLE_RAM!=1) - if (pch_msg != NULL) - #endif - { - - schedule_measures = TRUE; - } - } - - if (schedule_measures == TRUE) -#else /* #if (FF_L1_FAST_DECODING == 1) */ - #if (GSM_IDLE_RAM!=1) - if ((num_pm[l1a_l1s_com.ba_list.np_ctrl-1]!=0) && (pch_msg != NULL) && ((l1a_l1s_com.ba_list.np_ctrl >=1) && (l1a_l1s_com.ba_list.np_ctrl<=4))) - #else - if( (num_pm[l1a_l1s_com.ba_list.np_ctrl-1]!=0) && ((l1a_l1s_com.ba_list.np_ctrl >=1) && (l1a_l1s_com.ba_list.np_ctrl<=4))) - #endif -#endif /* #if (FF_L1_FAST_DECODING == 1) #else*/ + if ((static_ctrl_index == (l1a_l1s_com.ba_list.np_ctrl-1)*2) || + (static_ctrl_index == (l1a_l1s_com.ba_list.np_ctrl-1)*2 - 1)) { UWORD16 radio_freq_ctrl; UWORD8 ba_index_ctrl; @@ -6258,44 +6133,12 @@ // if YES only one PW measurement will be controlled and the number of meas to report is decremented by 1 if (l1s.tpu_win >= (3 * BP_SPLIT + l1_config.params.tx_ra_load_split + l1_config.params.rx_synth_load_split)) { + static_nbmeas_to_report--; nbmeas_ctrl = 1; - #if (FF_L1_FAST_DECODING == 1) - if (fast_decoding == TRUE) - { - if(static_nbmeas_to_report > 5) - static_nbmeas_to_report = 5; - - if(l1a_l1s_com.ba_list.np_ctrl == 1) - { - update_num_pm_fp_table_for_rach(static_nbmeas_to_report,num_pm_fp); - } - } - else - { - - update_num_pm_table_for_rach(static_nbmeas_to_report,num_pm); - - } - #else - - update_num_pm_table_for_rach(static_nbmeas_to_report,num_pm); - - #endif } else { - #if (FF_L1_FAST_DECODING == 1) - if (fast_decoding) - { - nbmeas_ctrl = num_pm_fp[l1a_l1s_com.ba_list.np_ctrl-1]; - } - else - { - nbmeas_ctrl = num_pm[l1a_l1s_com.ba_list.np_ctrl-1]; - } -#else /* #if (FF_L1_FAST_DECODING == 1) */ - nbmeas_ctrl = num_pm[l1a_l1s_com.ba_list.np_ctrl-1]; -#endif /* #if (FF_L1_FAST_DECODING == 1) #else */ + nbmeas_ctrl = 2; } /* end else no RACH */ for(i=0; i<nbmeas_ctrl; i++) @@ -6311,9 +6154,9 @@ #if (L1_FF_MULTIBAND == 0) - lna_off = l1a_l1s_com.last_input_level[radio_freq_ctrl - l1_config.std.radio_freq_index_offset].lna_off; // Get AGC according to the last known IL. agc = Cust_get_agc_from_IL(radio_freq_ctrl, l1a_l1s_com.last_input_level[radio_freq_ctrl - l1_config.std.radio_freq_index_offset].input_level >> 1, PWR_ID); + lna_off = l1a_l1s_com.last_input_level[radio_freq_ctrl - l1_config.std.radio_freq_index_offset].lna_off; // Memorize the IL used for AGC setting. l1a_l1s_com.ba_list.used_il[i] = l1a_l1s_com.last_input_level[radio_freq_ctrl - l1_config.std.radio_freq_index_offset].input_level; @@ -6493,9 +6336,8 @@ #endif // Read power measurement result from DSP. - pm = (l1s_dsp_com.dsp_db_r_ptr->a_pm[0] & 0xffff); + pm = (l1s_dsp_com.dsp_db_r_ptr->a_pm[0] & 0xffff) >> 5; l1_check_pm_error(pm, D_BA_MEAS_ID); - pm = pm >> 5; #if (TRACE_TYPE==3) stats_samples_pm(pm); @@ -6548,8 +6390,8 @@ #if (L1_FF_MULTIBAND == 0) + agc = Cust_get_agc_from_IL(radio_freq_ctrl, l1a_l1s_com.last_input_level[radio_freq_ctrl - l1_config.std.radio_freq_index_offset].input_level >> 1, PWR_ID); lna_off = l1a_l1s_com.last_input_level[radio_freq_ctrl - l1_config.std.radio_freq_index_offset].lna_off; - agc = Cust_get_agc_from_IL(radio_freq_ctrl, l1a_l1s_com.last_input_level[radio_freq_ctrl - l1_config.std.radio_freq_index_offset].input_level >> 1, PWR_ID); // Store IL used for current CTRL in order to be able to build IL from pm @@ -6668,8 +6510,8 @@ #if (L1_FF_MULTIBAND == 0) + agc = Cust_get_agc_from_IL(radio_freq_ctrl, l1a_l1s_com.last_input_level[radio_freq_ctrl - l1_config.std.radio_freq_index_offset].input_level >> 1, PWR_ID); lna_off = l1a_l1s_com.last_input_level[radio_freq_ctrl - l1_config.std.radio_freq_index_offset].lna_off; - agc = Cust_get_agc_from_IL(radio_freq_ctrl, l1a_l1s_com.last_input_level[radio_freq_ctrl - l1_config.std.radio_freq_index_offset].input_level >> 1, PWR_ID); // Store IL used for current CTRL in order to be able to build IL from pm // in READ phase.