FreeCalypso > hg > fc-tourmaline
comparison src/cs/layer1/p_cfile/l1p_afun.c @ 0:4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
| author | Mychaela Falconia <falcon@freecalypso.org> |
|---|---|
| date | Fri, 16 Oct 2020 06:23:26 +0000 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| -1:000000000000 | 0:4e78acac3d88 |
|---|---|
| 1 /************* Revision Controle System Header ************* | |
| 2 * GSM Layer 1 software | |
| 3 * L1P_AFUN.C | |
| 4 * | |
| 5 * Filename l1p_afun.c | |
| 6 * Copyright 2003 (C) Texas Instruments | |
| 7 * | |
| 8 ************* Revision Controle System Header *************/ | |
| 9 | |
| 10 #define L1P_AFUN_C | |
| 11 | |
| 12 #include "l1_macro.h" | |
| 13 #include "l1_confg.h" | |
| 14 | |
| 15 #if L1_GPRS | |
| 16 | |
| 17 #if (CODE_VERSION == SIMULATION) | |
| 18 #include <string.h> | |
| 19 #include "l1_types.h" | |
| 20 #include "sys_types.h" | |
| 21 #include "l1_const.h" | |
| 22 #if TESTMODE | |
| 23 #include "l1tm_defty.h" | |
| 24 #endif | |
| 25 #if (AUDIO_TASK == 1) | |
| 26 #include "l1audio_const.h" | |
| 27 #include "l1audio_cust.h" | |
| 28 #include "l1audio_defty.h" | |
| 29 #endif | |
| 30 #if (L1_GTT == 1) | |
| 31 #include "l1gtt_const.h" | |
| 32 #include "l1gtt_defty.h" | |
| 33 #endif | |
| 34 #if (L1_MP3 == 1) | |
| 35 #include "l1mp3_defty.h" | |
| 36 #endif | |
| 37 #if (L1_MIDI == 1) | |
| 38 #include "l1midi_defty.h" | |
| 39 #endif | |
| 40 #include "l1_defty.h" | |
| 41 #include "cust_os.h" | |
| 42 #include "l1_varex.h" | |
| 43 #include "l1p_cons.h" | |
| 44 #include "l1p_msgt.h" | |
| 45 #include "l1p_deft.h" | |
| 46 #include "l1p_vare.h" | |
| 47 | |
| 48 #include "l1_msgty.h" | |
| 49 #include "l1_proto.h" | |
| 50 | |
| 51 #else | |
| 52 | |
| 53 #include <string.h> | |
| 54 #include "l1_types.h" | |
| 55 #include "sys_types.h" | |
| 56 #include "l1_const.h" | |
| 57 #if TESTMODE | |
| 58 #include "l1tm_defty.h" | |
| 59 #endif | |
| 60 #if (AUDIO_TASK == 1) | |
| 61 #include "l1audio_const.h" | |
| 62 #include "l1audio_cust.h" | |
| 63 #include "l1audio_defty.h" | |
| 64 #endif | |
| 65 #if (L1_GTT == 1) | |
| 66 #include "l1gtt_const.h" | |
| 67 #include "l1gtt_defty.h" | |
| 68 #endif | |
| 69 #if (L1_MP3 == 1) | |
| 70 #include "l1mp3_defty.h" | |
| 71 #endif | |
| 72 #if (L1_MIDI == 1) | |
| 73 #include "l1midi_defty.h" | |
| 74 #endif | |
| 75 #include "l1_defty.h" | |
| 76 #include "cust_os.h" | |
| 77 #include "l1_varex.h" | |
| 78 #include "l1p_cons.h" | |
| 79 #include "l1p_msgt.h" | |
| 80 #include "l1p_deft.h" | |
| 81 #include "l1p_vare.h" | |
| 82 | |
| 83 #include "l1_msgty.h" | |
| 84 #include "l1_proto.h" | |
| 85 | |
| 86 #endif | |
| 87 | |
| 88 // Internal prototypes | |
| 89 T_TRANSFER_SET *l1pa_get_free_transfer_set (UWORD8 new_tbf); | |
| 90 int l1pa_sort (const void *a, const void *b); | |
| 91 void l1pa_reset_cr_freq_list (); | |
| 92 T_CRES_LIST_PARAM *l1pa_get_free_cres_list_set(); | |
| 93 void l1pa_send_int_meas_report (UWORD32 SignalCode, | |
| 94 T_L1P_ITMEAS_IND *last_l1s_msg, | |
| 95 T_L1A_INT_MEAS_PARAM *first_meas_ptr); | |
| 96 void l1pa_send_confirmation (UWORD32 SignalCode, UWORD8 id); | |
| 97 | |
| 98 /*-------------------------------------------------------*/ | |
| 99 /* l1pa_get_free_transfer_set() */ | |
| 100 /*-------------------------------------------------------*/ | |
| 101 /* */ | |
| 102 /* Description: */ | |
| 103 /* ------------ */ | |
| 104 /* */ | |
| 105 /* Modified parameters from globals: */ | |
| 106 /* --------------------------------- */ | |
| 107 /* */ | |
| 108 /*-------------------------------------------------------*/ | |
| 109 T_TRANSFER_SET *l1pa_get_free_transfer_set(UWORD8 new_tbf) | |
| 110 { | |
| 111 T_TRANSFER_SET *transfer_set; | |
| 112 | |
| 113 #define clear_and_new(i, tbf) \ | |
| 114 switch(tbf) \ | |
| 115 { \ | |
| 116 case UL_TBF: \ | |
| 117 l1pa_l1ps_com.transfer.fset[i]->allocated_tbf = DL_TBF; \ | |
| 118 break; \ | |
| 119 \ | |
| 120 case DL_TBF: \ | |
| 121 l1pa_l1ps_com.transfer.fset[i]->allocated_tbf = UL_TBF; \ | |
| 122 break; \ | |
| 123 } | |
| 124 | |
| 125 // If new_tbf is to replace an existing one, we must return | |
| 126 // the considered free set. | |
| 127 if(new_tbf == BOTH_TBF) | |
| 128 { | |
| 129 if(l1pa_l1ps_com.transfer.fset[0]->allocated_tbf == NO_TBF) | |
| 130 transfer_set = l1pa_l1ps_com.transfer.fset[1]; | |
| 131 else | |
| 132 transfer_set = l1pa_l1ps_com.transfer.fset[0]; | |
| 133 } | |
| 134 else | |
| 135 if(l1pa_l1ps_com.transfer.fset[0]->allocated_tbf == new_tbf) | |
| 136 transfer_set = l1pa_l1ps_com.transfer.fset[0]; | |
| 137 else | |
| 138 if(l1pa_l1ps_com.transfer.fset[1]->allocated_tbf == new_tbf) | |
| 139 transfer_set = l1pa_l1ps_com.transfer.fset[1]; | |
| 140 else | |
| 141 if(l1pa_l1ps_com.transfer.fset[0]->allocated_tbf == BOTH_TBF) | |
| 142 { | |
| 143 clear_and_new(0, new_tbf); | |
| 144 transfer_set = l1pa_l1ps_com.transfer.fset[1]; | |
| 145 } | |
| 146 else | |
| 147 if(l1pa_l1ps_com.transfer.fset[1]->allocated_tbf == BOTH_TBF) | |
| 148 { | |
| 149 clear_and_new(1, new_tbf); | |
| 150 transfer_set = l1pa_l1ps_com.transfer.fset[0]; | |
| 151 } | |
| 152 else | |
| 153 if(l1pa_l1ps_com.transfer.fset[0]->allocated_tbf == NO_TBF) | |
| 154 transfer_set = l1pa_l1ps_com.transfer.fset[0]; | |
| 155 else | |
| 156 transfer_set = l1pa_l1ps_com.transfer.fset[1]; | |
| 157 | |
| 158 transfer_set->SignalCode = NULL; | |
| 159 transfer_set->dl_tbf_synchro_timeslot = 0; | |
| 160 transfer_set->ul_tbf_synchro_timeslot = 0; | |
| 161 transfer_set->transfer_synchro_timeslot = 0; | |
| 162 | |
| 163 // No init of "allocated_tbf" | |
| 164 | |
| 165 transfer_set->assignment_command = NO_TBF; | |
| 166 transfer_set->multislot_class = 0; | |
| 167 transfer_set->packet_ta.ta = 255; // Not present | |
| 168 transfer_set->packet_ta.ta_index = 255; // Not present | |
| 169 transfer_set->packet_ta.ta_tn = 255; // Not present | |
| 170 transfer_set->tsc = 0; | |
| 171 | |
| 172 transfer_set->freq_param.chan_sel.h = 0; | |
| 173 transfer_set->freq_param.chan_sel.rf_channel.single_rf.radio_freq = 0; | |
| 174 transfer_set->freq_param.chan_sel.rf_channel.hopping_rf.maio = 0; | |
| 175 transfer_set->freq_param.chan_sel.rf_channel.hopping_rf.hsn = 0; | |
| 176 transfer_set->freq_param.freq_list.rf_chan_cnt = 0; | |
| 177 | |
| 178 transfer_set->tbf_sti.present = FALSE; | |
| 179 | |
| 180 transfer_set->dl_pwr_ctl.p0 = 255; | |
| 181 transfer_set->dl_pwr_ctl.bts_pwr_ctl_mode = 0; | |
| 182 transfer_set->dl_pwr_ctl.pr_mode = 0; | |
| 183 | |
| 184 transfer_set->ts_override = 0; | |
| 185 transfer_set->pc_meas_chan = 0; | |
| 186 | |
| 187 // No init of "ul_tbf_alloc" and "ul_tbf_alloc", mac_mode is enought | |
| 188 | |
| 189 return(transfer_set); | |
| 190 } | |
| 191 | |
| 192 /*-------------------------------------------------------*/ | |
| 193 /* l1pa_sort() */ | |
| 194 /*-------------------------------------------------------*/ | |
| 195 /* */ | |
| 196 /* Description: */ | |
| 197 /* ------------ */ | |
| 198 /* */ | |
| 199 /* Modified parameters from globals: */ | |
| 200 /* --------------------------------- */ | |
| 201 /* */ | |
| 202 /*-------------------------------------------------------*/ | |
| 203 int l1pa_sort(const void *a, const void *b) | |
| 204 { | |
| 205 UWORD8 entry1, entry2; | |
| 206 | |
| 207 entry1 = *((UWORD8*) a); | |
| 208 entry2 = *((UWORD8*) b); | |
| 209 | |
| 210 if (entry1 < entry2 ) | |
| 211 return(-1); | |
| 212 else if (entry1 == entry2) | |
| 213 return(0); | |
| 214 else | |
| 215 return(1); | |
| 216 } | |
| 217 | |
| 218 /*-------------------------------------------------------*/ | |
| 219 /* l1pa_reset_cr_freq_list() */ | |
| 220 /*-------------------------------------------------------*/ | |
| 221 /* */ | |
| 222 /* Description: */ | |
| 223 /* ------------ */ | |
| 224 /* This function resets parameters used in Frequency */ | |
| 225 /* list task */ | |
| 226 /* */ | |
| 227 /*-------------------------------------------------------*/ | |
| 228 void l1pa_reset_cr_freq_list() | |
| 229 { | |
| 230 UWORD8 i; | |
| 231 | |
| 232 for(i=0; i<NB_MEAS_MAX_GPRS; i++) | |
| 233 { | |
| 234 l1pa_l1ps_com.cr_freq_list.used_il_lna [i].il = l1_config.params.il_min; // IL used in CTRL phase for AGC setting. | |
| 235 l1pa_l1ps_com.cr_freq_list.used_il_lna_d [i].il = l1_config.params.il_min; // ... 1 frame delay. | |
| 236 l1pa_l1ps_com.cr_freq_list.used_il_lna_dd[i].il = l1_config.params.il_min; // ... 2 frames delay, used in READ phase. | |
| 237 | |
| 238 l1pa_l1ps_com.cr_freq_list.used_il_lna [i].lna = FALSE; // LNA used in CTRL phase for AGC setting. | |
| 239 l1pa_l1ps_com.cr_freq_list.used_il_lna_d [i].lna = FALSE; // ... 1 frame delay. | |
| 240 l1pa_l1ps_com.cr_freq_list.used_il_lna_dd[i].lna = FALSE; // ... 2 frames delay, used in READ phase. | |
| 241 } | |
| 242 | |
| 243 // Initialize next power measurement control. | |
| 244 l1pa_l1ps_com.cr_freq_list.next_to_ctrl = 0; | |
| 245 | |
| 246 // Initialize next power measurement result. | |
| 247 l1pa_l1ps_com.cr_freq_list.next_to_read = 0; | |
| 248 | |
| 249 // Reset PPCH burst ctrl indication | |
| 250 l1pa_l1ps_com.cr_freq_list.pnp_ctrl = 0; | |
| 251 | |
| 252 } | |
| 253 | |
| 254 /*-------------------------------------------------------*/ | |
| 255 /* l1pa_get_free_cres_list_set() */ | |
| 256 /*-------------------------------------------------------*/ | |
| 257 /* Parameters : */ | |
| 258 /* Return : */ | |
| 259 /* Functionality : */ | |
| 260 /*-------------------------------------------------------*/ | |
| 261 T_CRES_LIST_PARAM *l1pa_get_free_cres_list_set() | |
| 262 { | |
| 263 T_CRES_LIST_PARAM *flist; | |
| 264 | |
| 265 // Get free set pointer. | |
| 266 if(l1pa_l1ps_com.cres_freq_list.alist == &(l1pa_l1ps_com.cres_freq_list.list[0])) | |
| 267 flist = &(l1pa_l1ps_com.cres_freq_list.list[1]); | |
| 268 else | |
| 269 flist = &(l1pa_l1ps_com.cres_freq_list.list[0]); | |
| 270 | |
| 271 // Clear free set. | |
| 272 flist->nb_carrier = 0; | |
| 273 flist->list_id = 0; | |
| 274 | |
| 275 // Reset fifo used in AGC algo => NEED MORE INVESTIGATION. | |
| 276 | |
| 277 | |
| 278 return(flist); | |
| 279 } | |
| 280 | |
| 281 /*-------------------------------------------------------*/ | |
| 282 /* l1pa_send_int_meas_report() */ | |
| 283 /*-------------------------------------------------------*/ | |
| 284 /* */ | |
| 285 /* Description: */ | |
| 286 /* ------------ */ | |
| 287 /* This function builds and sends the Interf. Meas. */ | |
| 288 /* report to L3 */ | |
| 289 /* */ | |
| 290 /*-------------------------------------------------------*/ | |
| 291 void l1pa_send_int_meas_report(UWORD32 SignalCode, | |
| 292 T_L1P_ITMEAS_IND *last_l1s_msg, | |
| 293 T_L1A_INT_MEAS_PARAM *first_meas_ptr) | |
| 294 { | |
| 295 xSignalHeaderRec *msg; | |
| 296 UWORD8 i,j,k; | |
| 297 UWORD8 bit_mask = 0x80; | |
| 298 | |
| 299 // Allocate report msg and fill signal code. | |
| 300 msg = os_alloc_sig(sizeof(T_MPHP_INT_MEAS_IND)); | |
| 301 DEBUGMSG(status,NU_ALLOC_ERR) | |
| 302 msg->SignalCode = SignalCode; | |
| 303 | |
| 304 // Save measurement results | |
| 305 //------------------------- | |
| 306 for(i = 0, j = 0, k = 0; i < 8; i++, bit_mask >>= 1) | |
| 307 { | |
| 308 // Fill 1st measurement report | |
| 309 //---------------------------- | |
| 310 // If a measurement was done on timeslot i | |
| 311 if(first_meas_ptr->meas_bitmap & bit_mask) | |
| 312 { | |
| 313 // The result is stored in the msg. | |
| 314 ((T_MPHP_INT_MEAS_IND *) (msg->SigP))->int_meas[i].rxlev[0] = first_meas_ptr->rxlev[j]; | |
| 315 | |
| 316 // Next measurement value | |
| 317 j++; | |
| 318 } | |
| 319 else | |
| 320 { | |
| 321 // No measurement processed on timeslot i (0x80 value) | |
| 322 ((T_MPHP_INT_MEAS_IND *) (msg->SigP))->int_meas[i].rxlev[0] = (WORD8)NO_MEAS; //omaps00090550 | |
| 323 } | |
| 324 | |
| 325 // Fill 2nd measurement report | |
| 326 //---------------------------- | |
| 327 // If a measurement was done on timeslot i | |
| 328 if(last_l1s_msg->meas_bitmap & bit_mask) | |
| 329 { | |
| 330 // The result is stored in the msg. | |
| 331 ((T_MPHP_INT_MEAS_IND *) (msg->SigP))->int_meas[i].rxlev[1] = last_l1s_msg->rxlev[k]; | |
| 332 | |
| 333 // Next measurement value | |
| 334 k++; | |
| 335 } | |
| 336 else | |
| 337 { | |
| 338 // No measurement processed on timeslot i (0x80 value) | |
| 339 ((T_MPHP_INT_MEAS_IND *) (msg->SigP))->int_meas[i].rxlev[1] = (WORD8)NO_MEAS; | |
| 340 } | |
| 341 } | |
| 342 | |
| 343 // Set ID in the report message | |
| 344 ((T_MPHP_INT_MEAS_IND *) (msg->SigP))->id = first_meas_ptr->id; | |
| 345 | |
| 346 #if (TRACE_TYPE==1) || (TRACE_TYPE==4) | |
| 347 l1_trace_message(msg); | |
| 348 #endif | |
| 349 | |
| 350 os_send_sig(msg, GRRM1_QUEUE); | |
| 351 DEBUGMSG(status,NU_SEND_QUEUE_ERR) | |
| 352 } | |
| 353 | |
| 354 /*-------------------------------------------------------*/ | |
| 355 /* l1pa_send_confirmation() */ | |
| 356 /*-------------------------------------------------------*/ | |
| 357 /* Parameters : */ | |
| 358 /* Return : */ | |
| 359 /* Functionality : */ | |
| 360 /*-------------------------------------------------------*/ | |
| 361 void l1pa_send_confirmation(UWORD32 SignalCode, UWORD8 id) | |
| 362 { | |
| 363 xSignalHeaderRec *msg_con; | |
| 364 | |
| 365 msg_con = os_alloc_sig(sizeof(T_MPHP_ASSIGNMENT_CON)); | |
| 366 DEBUGMSG(status,NU_ALLOC_ERR) | |
| 367 msg_con->SignalCode = SignalCode; | |
| 368 | |
| 369 ((T_MPHP_ASSIGNMENT_CON *) msg_con->SigP)->assignment_id = id; | |
| 370 | |
| 371 #if (TRACE_TYPE==1) || (TRACE_TYPE==4) | |
| 372 l1_trace_message(msg_con); | |
| 373 #endif | |
| 374 | |
| 375 os_send_sig(msg_con, GRRM1_QUEUE); | |
| 376 DEBUGMSG(status,NU_SEND_QUEUE_ERR) | |
| 377 } | |
| 378 | |
| 379 | |
| 380 /*-------------------------------------------------------*/ | |
| 381 /* l1pa_send_tbf_release_con() */ | |
| 382 /*-------------------------------------------------------*/ | |
| 383 /* Parameters : */ | |
| 384 /* Return : */ | |
| 385 /* Functionality : */ | |
| 386 /*-------------------------------------------------------*/ | |
| 387 void l1pa_send_tbf_release_con(UWORD32 SignalCode, UWORD8 tbf_type) | |
| 388 { | |
| 389 xSignalHeaderRec *conf_msg; | |
| 390 | |
| 391 // Send the confirmation message with the TBF type to L3 | |
| 392 // Allocate confirmation message... | |
| 393 conf_msg = os_alloc_sig( sizeof(T_MPHP_TBF_RELEASE_CON)); | |
| 394 DEBUGMSG(status,NU_ALLOC_ERR); | |
| 395 | |
| 396 //Fill the message | |
| 397 conf_msg->SignalCode = SignalCode; | |
| 398 ((T_MPHP_TBF_RELEASE_CON *)(conf_msg->SigP))->tbf_type = tbf_type; | |
| 399 | |
| 400 // Send the confirmation message... | |
| 401 os_send_sig(conf_msg, GRRM1_QUEUE); | |
| 402 DEBUGMSG(status,NU_SEND_QUEUE_ERR) | |
| 403 } | |
| 404 #endif //L1_GPRS |
