FreeCalypso > hg > freecalypso-sw
comparison gsm-fw/g23m-gsm/alr/alr_nc.c @ 681:461ab5b255f5
alr_nc.c compiles
author | Michael Spacefalcon <msokolov@ivan.Harhan.ORG> |
---|---|
date | Mon, 29 Sep 2014 19:57:11 +0000 |
parents | 2f7df7a314f8 |
children |
comparison
equal
deleted
inserted
replaced
680:04d1b20eb7b0 | 681:461ab5b255f5 |
---|---|
16 +----------------------------------------------------------------------------- | 16 +----------------------------------------------------------------------------- |
17 | Purpose : This Modul defines the SDL process Idle_Neighbour_Cells. | 17 | Purpose : This Modul defines the SDL process Idle_Neighbour_Cells. |
18 +----------------------------------------------------------------------------- | 18 +----------------------------------------------------------------------------- |
19 */ | 19 */ |
20 | 20 |
21 #ifndef ALR_NC_C | 21 #ifndef ALR_NC_C |
22 #define ALR_NC_C | 22 #define ALR_NC_C |
23 | |
24 #include "config.h" | |
25 #include "fixedconf.h" | |
26 #include "condat-features.h" | |
23 | 27 |
24 #define ENTITY_PL | 28 #define ENTITY_PL |
25 | 29 |
26 /*==== INCLUDES ===================================================*/ | 30 /*==== INCLUDES ===================================================*/ |
27 #include <string.h> | 31 #include <string.h> |
326 #endif | 330 #endif |
327 | 331 |
328 #if defined (_SIMULATION_) | 332 #if defined (_SIMULATION_) |
329 #define TRACING | 333 #define TRACING |
330 #endif /* _SIMULATION_ */ | 334 #endif /* _SIMULATION_ */ |
331 | |
332 /* | |
333 * Defining Locosto flag for 20.7 for Simulation build | |
334 */ | |
335 #if defined (_SIMULATION_) && defined SIMU_LOCOSTO_CT_GCF_20_7 | |
336 #define CHIPSET 15 | |
337 #endif | |
338 | 335 |
339 /* | 336 /* |
340 * some traces | 337 * some traces |
341 */ | 338 */ |
342 #if defined (TRACING) | 339 #if defined (TRACING) |
4482 { | 4479 { |
4483 case INACTIVE: | 4480 case INACTIVE: |
4484 break; | 4481 break; |
4485 case IDLE: | 4482 case IDLE: |
4486 if (pcell->one_of_twelve) | 4483 if (pcell->one_of_twelve) |
4487 //Nina modify to avoid frequent NSY_R | 4484 #if 0 //Nina modify to avoid frequent NSY_R |
4488 | |
4489 #if 0 | |
4490 nc_set_status (i, READ_FB_SB); | 4485 nc_set_status (i, READ_FB_SB); |
4491 | |
4492 #else | 4486 #else |
4493 if(pcell->rank_of_the_six < 2) | 4487 { |
4494 { | 4488 if (pcell->rank_of_the_six < 2) |
4495 nc_set_status (i, READ_FB_SB); | 4489 nc_set_status (i, READ_FB_SB); |
4496 } | 4490 else |
4497 else | 4491 { |
4498 { | 4492 pcell->one_of_six = 0; |
4499 pcell->one_of_six = 0; | 4493 pcell->one_of_twelve =0; |
4500 pcell->one_of_twelve =0; | 4494 } |
4501 } | 4495 } |
4502 #endif | 4496 #endif |
4503 if (start_list EQ CHECK_FOR_CONFIRM) | 4497 if (start_list EQ CHECK_FOR_CONFIRM) |
4504 { | 4498 { |
4505 if (pcell->tim_valid EQ TV_VALID_TIMING_INFO) | 4499 if (pcell->tim_valid EQ TV_VALID_TIMING_INFO) |
4506 pcell->tim_valid = TV_APPROX_TIMING_INFO; | 4500 pcell->tim_valid = TV_APPROX_TIMING_INFO; |
4507 else if (pcell->tim_valid EQ TV_APPROX_TIMING_INFO) | 4501 else if (pcell->tim_valid EQ TV_APPROX_TIMING_INFO) |
4542 nc_set_status (i, FB_SB_SYNC); | 4536 nc_set_status (i, FB_SB_SYNC); |
4543 } | 4537 } |
4544 } | 4538 } |
4545 break; | 4539 break; |
4546 case FB_SB_FAILED: | 4540 case FB_SB_FAILED: |
4547 //Nina add to judge the syn failure times | 4541 //Nina add to judge the syn failure times |
4548 if(pcell->syn_failure_times > 2) | 4542 if(pcell->syn_failure_times > 2) |
4549 { | 4543 { |
4550 nc_set_status (i, EXCLUDED); | 4544 nc_set_status (i, EXCLUDED); |
4551 break; | 4545 break; |
4552 | 4546 } |
4553 } | |
4554 if (pcell->one_of_twelve EQ FALSE) | 4547 if (pcell->one_of_twelve EQ FALSE) |
4555 nc_set_status (i, IDLE); | 4548 nc_set_status (i, IDLE); |
4556 else if (pcell->c_sync EQ 0) | 4549 else if (pcell->c_sync EQ 0) |
4557 { | 4550 { |
4558 if(pcell->rank_of_the_six < 4) | 4551 if(pcell->rank_of_the_six < 4) |
4559 { | 4552 nc_set_status (i, READ_FB_SB); |
4560 nc_set_status (i, READ_FB_SB); | 4553 else |
4561 } | 4554 { |
4562 else | 4555 pcell->one_of_six = 0; |
4563 { | 4556 pcell->one_of_twelve =0; |
4564 pcell->one_of_six = 0; | 4557 } |
4565 pcell->one_of_twelve =0; | |
4566 | |
4567 } | |
4568 } | 4558 } |
4569 break; | 4559 break; |
4570 case IDLE_SYNC: | 4560 case IDLE_SYNC: |
4571 if (pcell->one_of_twelve) | 4561 if (pcell->one_of_twelve) |
4572 { | 4562 { |
4854 | 4844 |
4855 if(alr_data->nc_data.cell[i].rxlev_average < hyst_rxlev) | 4845 if(alr_data->nc_data.cell[i].rxlev_average < hyst_rxlev) |
4856 hyst_rxlev = alr_data->nc_data.cell[i].rxlev_average; | 4846 hyst_rxlev = alr_data->nc_data.cell[i].rxlev_average; |
4857 } | 4847 } |
4858 | 4848 |
4859 alr_data->nc_data.cell[i].one_of_six = FALSE; | 4849 alr_data->nc_data.cell[i].one_of_six = FALSE; |
4860 | |
4861 } | 4850 } |
4862 | 4851 |
4863 if(num_1of6 < MAX_RR_NCELL_CNT) | 4852 if(num_1of6 < MAX_RR_NCELL_CNT) |
4864 hyst_rxlev = 0; | 4853 hyst_rxlev = 0; |
4865 | 4854 |
4991 GET_INSTANCE_DATA; | 4980 GET_INSTANCE_DATA; |
4992 int i, j; | 4981 int i, j; |
4993 BOOL limit; | 4982 BOOL limit; |
4994 int index; | 4983 int index; |
4995 | 4984 |
4996 UBYTE rank = 0; | 4985 UBYTE rank = 0; |
4997 | 4986 |
4998 USHORT c_ba_arfcn = alr_data->nc_data.c_ba_arfcn; | 4987 USHORT c_ba_arfcn = alr_data->nc_data.c_ba_arfcn; |
4999 T_NC* pcell; | 4988 T_NC* pcell; |
5000 UBYTE band_nc; | 4989 UBYTE band_nc; |
5001 UBYTE band_sc = get_band (alr_data->serving_cell); | 4990 UBYTE band_sc = get_band (alr_data->serving_cell); |
5072 } | 5061 } |
5073 | 5062 |
5074 if (index NEQ NOT_PRESENT_16BIT) | 5063 if (index NEQ NOT_PRESENT_16BIT) |
5075 { | 5064 { |
5076 alr_data->nc_data.cell[index].one_of_six = TRUE; | 5065 alr_data->nc_data.cell[index].one_of_six = TRUE; |
5077 alr_data->nc_data.cell[index].rank_of_the_six = rank; | 5066 alr_data->nc_data.cell[index].rank_of_the_six = rank; |
5078 rank++; | 5067 rank++; |
5079 (*c_found)++; | 5068 (*c_found)++; |
5080 } | 5069 } |
5081 } | 5070 } |
5082 } | 5071 } |
5083 | 5072 |
5310 pcell->nc_rxlev += rxlev; | 5299 pcell->nc_rxlev += rxlev; |
5311 pcell->c_nc_rxlev++; | 5300 pcell->c_nc_rxlev++; |
5312 } | 5301 } |
5313 #endif | 5302 #endif |
5314 | 5303 |
5315 | |
5316 #if defined(TRACING) | 5304 #if defined(TRACING) |
5317 TRACE_EVENT_P4("NC%u[%d] rx=%d av=%d", | 5305 TRACE_EVENT_P4("NC%u[%d] rx=%d av=%d", |
5318 index, | 5306 index, |
5319 pcell->ba_arfcn EQ NOT_PRESENT_16BIT ? -1 : pcell->ba_arfcn&ARFCN_MASK, | 5307 pcell->ba_arfcn EQ NOT_PRESENT_16BIT ? -1 : pcell->ba_arfcn&ARFCN_MASK, |
5320 report->result[i].rxlev, pcell->rxlev_average); | 5308 report->result[i].rxlev, pcell->rxlev_average); |
5862 #else | 5850 #else |
5863 sync_req->radio_freq = ARFCN_TO_L1(p_ncell->ba_arfcn); | 5851 sync_req->radio_freq = ARFCN_TO_L1(p_ncell->ba_arfcn); |
5864 #endif | 5852 #endif |
5865 | 5853 |
5866 if (p_ncell->tim_valid EQ TV_INVALID_TIMING_INFO) | 5854 if (p_ncell->tim_valid EQ TV_INVALID_TIMING_INFO) |
5867 { | 5855 { |
5868 | |
5869 sync_req->fn_offset = 0; | 5856 sync_req->fn_offset = 0; |
5870 sync_req->time_alignment = 0; | 5857 sync_req->time_alignment = 0; |
5871 | 5858 } |
5872 } | |
5873 else | 5859 else |
5874 { | 5860 { |
5875 sync_req->fn_offset = p_ncell->frame_offset; | 5861 sync_req->fn_offset = p_ncell->frame_offset; |
5876 sync_req->time_alignment = p_ncell->time_align; | 5862 sync_req->time_alignment = p_ncell->time_align; |
5877 } | 5863 } |
5878 | 5864 |
5879 sync_req->timing_validity = p_ncell->tim_valid; | 5865 sync_req->timing_validity = p_ncell->tim_valid; |
5880 TRACE_EVENT_P4("nc_build_sync_req[%d] timing_validity=%d fn_offset=%ld, time_alignment=%ld", | 5866 TRACE_EVENT_P4("nc_build_sync_req[%d] timing_validity=%d fn_offset=%ld, time_alignment=%ld", |
5881 p_ncell->ba_arfcn, | 5867 p_ncell->ba_arfcn, |
5882 sync_req->timing_validity, | 5868 sync_req->timing_validity, |
5884 sync_req->time_alignment); | 5870 sync_req->time_alignment); |
5885 ma_nc_sync_req (sync_req); | 5871 ma_nc_sync_req (sync_req); |
5886 alr_data->nc_data.c_sync_req++; | 5872 alr_data->nc_data.c_sync_req++; |
5887 } | 5873 } |
5888 | 5874 |
5889 | |
5890 ALR_EM_READ_NEIGHBOURCELL_SB; | 5875 ALR_EM_READ_NEIGHBOURCELL_SB; |
5891 | 5876 |
5892 nc_set_status (index, READ_FB_SB_PENDING); | 5877 nc_set_status (index, READ_FB_SB_PENDING); |
5893 | |
5894 } | 5878 } |
5895 | 5879 |
5896 | 5880 |
5897 /* | 5881 /* |
5898 +--------------------------------------------------------------------+ | 5882 +--------------------------------------------------------------------+ |
5959 | 5943 |
5960 LOCAL void nc_process_status_last_bsic(void) | 5944 LOCAL void nc_process_status_last_bsic(void) |
5961 { | 5945 { |
5962 GET_INSTANCE_DATA; | 5946 GET_INSTANCE_DATA; |
5963 T_NC* pbsic = &alr_data->nc_data.cell[LAST_BSIC_REQ]; | 5947 T_NC* pbsic = &alr_data->nc_data.cell[LAST_BSIC_REQ]; |
5964 | |
5965 | 5948 |
5966 switch (pbsic->status) | 5949 switch (pbsic->status) |
5967 { | 5950 { |
5968 case READ_FB_SB: | 5951 case READ_FB_SB: |
5969 if (alr_data->nc_data.c_sync_req < MAX_L1_SYNC_CNT) | 5952 if (alr_data->nc_data.c_sync_req < MAX_L1_SYNC_CNT) |
6050 | 6033 |
6051 PURPOSE : Processes cell synchronisation. | 6034 PURPOSE : Processes cell synchronisation. |
6052 | 6035 |
6053 */ | 6036 */ |
6054 | 6037 |
6055 | |
6056 | |
6057 LOCAL void nc_process_status_sync(void) | 6038 LOCAL void nc_process_status_sync(void) |
6058 { | 6039 { |
6059 GET_INSTANCE_DATA; | 6040 GET_INSTANCE_DATA; |
6060 /* To avoid warnings */ | 6041 /* To avoid warnings */ |
6061 USHORT index; | 6042 USHORT index; |
7164 pcell->c_bcch = C_INVALID_BCCH; | 7145 pcell->c_bcch = C_INVALID_BCCH; |
7165 pcell->c_sync = C_INVALID_SYNC; | 7146 pcell->c_sync = C_INVALID_SYNC; |
7166 pcell->tim_valid = TV_INVALID_TIMING_INFO; | 7147 pcell->tim_valid = TV_INVALID_TIMING_INFO; |
7167 pcell->blocks_required = 0; | 7148 pcell->blocks_required = 0; |
7168 pcell->c_error = 0; | 7149 pcell->c_error = 0; |
7169 pcell->syn_failure_times= 0; | 7150 pcell->syn_failure_times= 0; |
7170 nc_clean_store_bcch (index); | 7151 nc_clean_store_bcch (index); |
7171 break; | 7152 break; |
7172 | 7153 |
7173 case IDLE: | 7154 case IDLE: |
7174 pcell->bsic = NOT_PRESENT_8BIT; | 7155 pcell->bsic = NOT_PRESENT_8BIT; |
7175 /* pcell->frame_offset = 0; | 7156 #if 0 |
7157 pcell->frame_offset = 0; | |
7176 pcell->time_align = 0; | 7158 pcell->time_align = 0; |
7177 pcell->last_rxlev = 0; */ | 7159 pcell->last_rxlev = 0; |
7160 #endif | |
7178 pcell->one_of_six = FALSE; | 7161 pcell->one_of_six = FALSE; |
7179 pcell->one_of_twelve = FALSE; | 7162 pcell->one_of_twelve = FALSE; |
7180 /*pcell->c_attempt = 0;*/ | 7163 /*pcell->c_attempt = 0;*/ |
7181 pcell->c_bcch = C_INVALID_BCCH; | 7164 pcell->c_bcch = C_INVALID_BCCH; |
7182 pcell->c_sync = C_INVALID_SYNC; | 7165 pcell->c_sync = C_INVALID_SYNC; |
7186 break; | 7169 break; |
7187 | 7170 |
7188 case READ_FB_SB: | 7171 case READ_FB_SB: |
7189 case READ_FB_SB_PENDING: | 7172 case READ_FB_SB_PENDING: |
7190 pcell->bsic = NOT_PRESENT_8BIT; | 7173 pcell->bsic = NOT_PRESENT_8BIT; |
7191 /* pcell->frame_offset = 0; | 7174 #if 0 |
7192 pcell->time_align = 0; */ | 7175 pcell->frame_offset = 0; |
7176 pcell->time_align = 0; | |
7177 #endif | |
7193 pcell->last_rxlev = 0; | 7178 pcell->last_rxlev = 0; |
7194 pcell->c_bcch = C_INVALID_BCCH; | 7179 pcell->c_bcch = C_INVALID_BCCH; |
7195 pcell->c_sync = C_INVALID_SYNC; | 7180 pcell->c_sync = C_INVALID_SYNC; |
7196 pcell->blocks_required = 0; | 7181 pcell->blocks_required = 0; |
7197 pcell->c_error = 0; | 7182 pcell->c_error = 0; |
7224 pcell->c_attempt = 0; | 7209 pcell->c_attempt = 0; |
7225 pcell->c_error = 0; | 7210 pcell->c_error = 0; |
7226 break; | 7211 break; |
7227 | 7212 |
7228 case FB_SB_SYNC: | 7213 case FB_SB_SYNC: |
7229 if((pcell->status == READ_FB_SB) || (pcell->status == READ_FB_SB_PENDING)) | 7214 if((pcell->status == READ_FB_SB) || (pcell->status == READ_FB_SB_PENDING)) |
7230 { | 7215 { |
7231 if(pcell->syn_failure_times > 0) | 7216 if (pcell->syn_failure_times > 0) |
7232 pcell->syn_failure_times --; | 7217 pcell->syn_failure_times --; |
7233 } | 7218 } |
7234 pcell->last_rxlev = 0; | 7219 pcell->last_rxlev = 0; |
7235 pcell->blocks_required = 0; | 7220 pcell->blocks_required = 0; |
7236 if (!pcell->one_of_six) | 7221 if (!pcell->one_of_six) |
7237 pcell->c_attempt = 0; | 7222 pcell->c_attempt = 0; |
7238 pcell->c_error = 0; | 7223 pcell->c_error = 0; |
7274 pcell->c_sync = alr_data->nc_data.c_nc_timer; /*TODO maybe move this to a function*/ | 7259 pcell->c_sync = alr_data->nc_data.c_nc_timer; /*TODO maybe move this to a function*/ |
7275 nc_clean_store_bcch (index); | 7260 nc_clean_store_bcch (index); |
7276 break; | 7261 break; |
7277 | 7262 |
7278 case FB_SB_FAILED: | 7263 case FB_SB_FAILED: |
7279 if((pcell->status == READ_FB_SB) || (pcell->status == READ_FB_SB_PENDING)) | 7264 if((pcell->status == READ_FB_SB) || (pcell->status == READ_FB_SB_PENDING)) |
7280 { | 7265 pcell->syn_failure_times ++; |
7281 pcell->syn_failure_times ++; | |
7282 } | |
7283 pcell->bsic = NOT_PRESENT_8BIT; | 7266 pcell->bsic = NOT_PRESENT_8BIT; |
7284 if (pcell->status EQ READ_FB_SB_PENDING) | 7267 if (pcell->status EQ READ_FB_SB_PENDING) |
7285 { | 7268 { |
7286 pcell->frame_offset = NOT_PRESENT_32BIT; | 7269 pcell->frame_offset = NOT_PRESENT_32BIT; |
7287 pcell->time_align = NOT_PRESENT_32BIT; | 7270 pcell->time_align = NOT_PRESENT_32BIT; |
8025 UBYTE i; | 8008 UBYTE i; |
8026 UBYTE j; | 8009 UBYTE j; |
8027 UBYTE max_rxlev; | 8010 UBYTE max_rxlev; |
8028 UBYTE k; | 8011 UBYTE k; |
8029 | 8012 |
8030 | |
8031 | |
8032 | |
8033 for (i = 0; i < (p_bin->num_valid ) ; i++) | 8013 for (i = 0; i < (p_bin->num_valid ) ; i++) |
8034 { | 8014 { |
8035 if ( (n < MAX_NUM_CELLS_IN_REPORT) AND (nbr_rpt > 0) ) | 8015 if ( (n < MAX_NUM_CELLS_IN_REPORT) AND (nbr_rpt > 0) ) |
8036 { | 8016 { |
8037 max_rxlev = pcell[p_bin->index[i]].rxlev_average; | 8017 max_rxlev = pcell[p_bin->index[i]].rxlev_average; |