FreeCalypso > hg > freecalypso-sw
comparison gsm-fw/g23m-gsm/rr/rr_pei.c @ 673:2f7df7a314f8
gsm-fw/g23m-gsm subtree: initial import from LoCosto source
author | Michael Spacefalcon <msokolov@ivan.Harhan.ORG> |
---|---|
date | Sun, 28 Sep 2014 23:20:04 +0000 |
parents | |
children | 20bb8855c015 |
comparison
equal
deleted
inserted
replaced
672:0dc6f9e8e980 | 673:2f7df7a314f8 |
---|---|
1 /* | |
2 +----------------------------------------------------------------------------- | |
3 | Project : | |
4 | Modul : | |
5 +----------------------------------------------------------------------------- | |
6 | Copyright 2002 Texas Instruments Berlin, AG | |
7 | All rights reserved. | |
8 | | |
9 | This file is confidential and a trade secret of Texas | |
10 | Instruments Berlin, AG | |
11 | The receipt of or possession of this file does not convey | |
12 | any rights to reproduce or disclose its contents or to | |
13 | manufacture, use, or sell anything it may describe, in | |
14 | whole, or in part, without the specific written consent of | |
15 | Texas Instruments Berlin, AG. | |
16 +----------------------------------------------------------------------------- | |
17 | Purpose : This module defines the process body interface | |
18 | for the component RR of the mobile station | |
19 +----------------------------------------------------------------------------- | |
20 */ | |
21 | |
22 #ifndef RR_PEI_C | |
23 #define RR_PEI_C | |
24 | |
25 #define ENTITY_RR | |
26 | |
27 /*==== INCLUDES ===================================================*/ | |
28 | |
29 #include <string.h> | |
30 #include <stdlib.h> | |
31 #include <stddef.h> /* offsetof */ | |
32 #include <stdio.h> /* sprintf */ | |
33 #include "typedefs.h" | |
34 #include "pcm.h" | |
35 #include "pconst.cdg" | |
36 #include "mconst.cdg" | |
37 #include "message.h" | |
38 #include "ccdapi.h" | |
39 #include "vsi.h" | |
40 #include "custom.h" | |
41 #include "gsm.h" | |
42 #include "prim.h" | |
43 #include "cnf_rr.h" | |
44 #include "tok.h" | |
45 #include "rr.h" | |
46 #include "rr_em.h" | |
47 #include "cl_shrd.h" | |
48 | |
49 #if !defined(_SIMULATION_) | |
50 #include "ffs/ffs.h" | |
51 #include "ffs_coat.h" | |
52 #endif /* !_SIMULATION_ */ | |
53 | |
54 /*==== EXPORT =====================================================*/ | |
55 /* | |
56 * several handles for communication with other entities | |
57 */ | |
58 #ifdef TI_PS_HCOMM_CHANGE | |
59 GLOBAL T_HANDLE rr_handle = VSI_ERROR; | |
60 #ifdef GPRS | |
61 GLOBAL T_HANDLE hCommGRR = VSI_ERROR; /* GRR Communication */ | |
62 #endif | |
63 #else /* for hCommHandles backward compatibility */ | |
64 GLOBAL T_HANDLE hCommDL = VSI_ERROR; | |
65 #if defined FF_EOTD | |
66 GLOBAL T_HANDLE hCommLC = VSI_ERROR; | |
67 GLOBAL T_HANDLE hCommRRLP = VSI_ERROR; | |
68 #endif /* FF_EOTD */ | |
69 GLOBAL T_HANDLE hCommMM = VSI_ERROR; | |
70 GLOBAL T_HANDLE hCommPL = VSI_ERROR; | |
71 GLOBAL T_HANDLE rr_handle = VSI_ERROR; | |
72 #ifdef GPRS | |
73 GLOBAL T_HANDLE hCommGRR = VSI_ERROR; /* GRR Communication */ | |
74 #endif | |
75 GLOBAL T_HANDLE hCommMMI = VSI_ERROR; /* EM Communication */ | |
76 #ifdef FF_WAP | |
77 GLOBAL T_HANDLE hCommWAP = VSI_ERROR; /* FMM-WAP Communication */ | |
78 #endif | |
79 | |
80 #endif /* TI_PS_HCOMM_CHANGE */ | |
81 | |
82 | |
83 | |
84 static UBYTE stop_reg = FALSE; | |
85 | |
86 GLOBAL T_RR_DATA rr_data_base; | |
87 | |
88 #ifdef TI_PS_FF_QUAD_BAND_SUPPORT | |
89 const UBYTE std_bands[12] = | |
90 #else | |
91 const UBYTE std_bands[8] = | |
92 #endif | |
93 { | |
94 BAND_GSM_900, /* std = 1 */ | |
95 BAND_GSM_900 | BAND_E_GSM, /* std = 2 */ | |
96 BAND_PCS_1900, /* std = 3 */ | |
97 BAND_DCS_1800, /* std = 4 */ | |
98 BAND_DUAL, /* std = 5 */ | |
99 BAND_DUAL_EXT, /* std = 6 */ | |
100 BAND_GSM_850, /* std = 7 */ | |
101 BAND_DUAL_US /* std = 8 */ | |
102 #ifdef TI_PS_FF_QUAD_BAND_SUPPORT | |
103 ,BAND_GSM_850 | BAND_DCS_1800, /* std = 9 */ | |
104 BAND_GSM_900 | BAND_E_GSM | BAND_PCS_1900, /* std = 10 */ | |
105 BAND_GSM_850 | BAND_GSM_900 | BAND_E_GSM | BAND_DCS_1800, /* std = 11 */ | |
106 BAND_GSM_850 | BAND_GSM_900 | BAND_E_GSM | BAND_PCS_1900 /* std = 12 */ | |
107 #endif | |
108 }; | |
109 | |
110 /*==== PRIVATE ====================================================*/ | |
111 | |
112 LOCAL void pei_not_supported (void *data); | |
113 | |
114 /*==== VARIABLES ==================================================*/ | |
115 #ifdef _SIMULATION_ | |
116 LOCAL BOOL first_access = TRUE; | |
117 #endif /* _SIMULATION_ */ | |
118 | |
119 /*==== FUNCTIONS ==================================================*/ | |
120 | |
121 LOCAL const T_FUNC dl_table[] = { | |
122 MAK_FUNC_0( dat_dl_establish_ind, DL_ESTABLISH_IND ), /* 0x80004003 */ | |
123 MAK_FUNC_0( dat_dl_establish_cnf, DL_ESTABLISH_CNF ), /* 0x80014003 */ | |
124 MAK_FUNC_0( dat_dl_release_ind, DL_RELEASE_IND ), /* 0x80024003 */ | |
125 MAK_FUNC_0( dat_dl_release_cnf, DL_RELEASE_CNF ), /* 0x80034003 */ | |
126 MAK_FUNC_S( for_dl_data_ind, DL_DATA_IND ), /* 0x80044003 */ | |
127 #if defined (REL99) && defined (TI_PS_FF_EMR) | |
128 MAK_FUNC_S( for_dl_short_unitdata_ind, DL_SHORT_UNITDATA_IND ), /* 0x80054003 */ | |
129 #else | |
130 MAK_FUNC_0( pei_not_supported, DL_DATA_CNF ), /* 0x80054003 */ | |
131 #endif | |
132 }; | |
133 | |
134 LOCAL const T_FUNC rr_table[] = { | |
135 MAK_FUNC_0( dat_rr_abort_req, RR_ABORT_REQ ), | |
136 MAK_FUNC_0( att_rr_activate_req, RR_ACTIVATE_REQ ), | |
137 MAK_FUNC_S( dat_rr_data_req, RR_DATA_REQ ), | |
138 MAK_FUNC_0( att_rr_deactivate_req, RR_DEACTIVATE_REQ ), | |
139 MAK_FUNC_S( dat_rr_establish_req, RR_ESTABLISH_REQ ), | |
140 MAK_FUNC_0( att_rr_sync_req, RR_SYNC_REQ ), | |
141 MAK_FUNC_0( att_rr_sync_hplmn_req, RR_SYNC_HPLMN_REQ ) | |
142 }; | |
143 | |
144 LOCAL const T_FUNC mph_table[] = { | |
145 MAK_FUNC_N( pei_not_supported, MPH_BCCH_IND ), | |
146 MAK_FUNC_0( att_mph_measurement_ind, MPH_MEASUREMENT_IND ), | |
147 MAK_FUNC_0( dat_mph_dedicated_cnf, MPH_DEDICATED_CNF ), | |
148 MAK_FUNC_0( dat_mph_dedicated_fail_cnf, MPH_DEDICATED_FAIL_CNF ), | |
149 MAK_FUNC_0( att_mph_error_ind, MPH_ERROR_IND ), | |
150 MAK_FUNC_0( dat_mph_emo_meas_ind, MPH_EMO_MEAS_IND ), | |
151 MAK_FUNC_0( dat_mph_paging_ind, MPH_PAGING_IND ), | |
152 MAK_FUNC_0( cs_mph_power_cnf, MPH_POWER_CNF ), | |
153 MAK_FUNC_0( cs_mph_bsic_cnf, MPH_BSIC_CNF ), | |
154 MAK_FUNC_S( for_mph_unitdata_ind, MPH_UNITDATA_IND ), | |
155 MAK_FUNC_0( dat_mph_random_access_cnf, MPH_RANDOM_ACCESS_CNF ), | |
156 MAK_FUNC_0( att_mph_sync_ind, MPH_SYNC_IND ), | |
157 MAK_FUNC_0( att_mph_meas_order_cnf, MPH_MEAS_ORDER_CNF ), | |
158 #ifdef GPRS | |
159 MAK_FUNC_0( att_mph_ext_meas_cnf, MPH_EXT_MEAS_CNF ), | |
160 #else | |
161 MAK_FUNC_N( pei_not_supported, 0 ), /* 0x0D */ | |
162 #endif | |
163 #if defined FF_EOTD | |
164 MAK_FUNC_0( att_mph_ncell_pos_ind, MPH_NCELL_POS_IND ), | |
165 #else | |
166 MAK_FUNC_N( pei_not_supported, 0 ), /* 0x0E */ | |
167 #endif /* FF_EOTD */ | |
168 MAK_FUNC_0( att_mph_stop_dedicated_cnf, MPH_STOP_DEDICATED_CNF), /* 0x0f */ | |
169 #ifdef GPRS | |
170 MAK_FUNC_0( att_mph_meas_rep_cnf, MPH_MEAS_REP_CNF ) | |
171 #else | |
172 MAK_FUNC_N( pei_not_supported, 0 ) /* 0x10 */ | |
173 #endif | |
174 #ifdef TI_PS_FF_QUAD_BAND_SUPPORT | |
175 , | |
176 MAK_FUNC_N( att_mph_init_rr_ind, MPH_INIT_RR_IND ) /* 0x11 */ | |
177 #endif | |
178 | |
179 }; | |
180 | |
181 #ifdef FF_EM_MODE | |
182 LOCAL const T_FUNC em_ul_table[] = { | |
183 MAK_FUNC_0( dat_em_sc_info_req, EM_SC_INFO_REQ ), /* 0x00*/ | |
184 MAK_FUNC_N( pei_not_supported, 0 ), /* 0x01*/ | |
185 MAK_FUNC_0( dat_em_nc_info_req, EM_NC_INFO_REQ ), /* 0x02*/ | |
186 MAK_FUNC_0( dat_em_loc_pag_info_req, EM_LOC_PAG_INFO_REQ ), /* 0x03*/ | |
187 MAK_FUNC_0( dat_em_plmn_info_req, EM_PLMN_INFO_REQ ), /* 0x04*/ | |
188 MAK_FUNC_0( dat_em_cip_hop_dtx_info_req, EM_CIP_HOP_DTX_INFO_REQ ), /* 0x05*/ | |
189 MAK_FUNC_0( dat_em_mobdata_power_info_req, EM_POWER_INFO_REQ ), /* 0x06*/ | |
190 MAK_FUNC_0( dat_em_mobdata_id_info_req, EM_IDENTITY_INFO_REQ ), /* 0x07*/ | |
191 MAK_FUNC_0( dat_em_mobdata_version_info_req,EM_SW_VERSION_INFO_REQ ), /* 0x08*/ | |
192 MAK_FUNC_N( pei_not_supported, 0 ), /* 0x09*/ | |
193 MAK_FUNC_N( pei_not_supported, 0 ), /* 0x0A*/ | |
194 MAK_FUNC_N( rr_em_rr_event_req, EM_RR_EVENT_REQ ), /* 0x0B*/ | |
195 MAK_FUNC_N (pei_not_supported, 0 ), /* 0x0C */ | |
196 MAK_FUNC_N (pei_not_supported, 0 ), /* 0x0D */ | |
197 MAK_FUNC_N (pei_not_supported, 0 ), /* 0x0E */ | |
198 MAK_FUNC_N (pei_not_supported, 0 ), /* 0x0F */ | |
199 MAK_FUNC_N (pei_not_supported, 0 ), /* 0x10 */ /*SIM - event*/ | |
200 MAK_FUNC_0( rr_em_pco_trace_req, EM_PCO_TRACE_REQ ), /* 0x11*/ /*PCO output*/ | |
201 #ifdef GPRS | |
202 MAK_FUNC_0 (dat_em_fmm_sc_info_req, EM_FMM_SC_INFO_REQ ), /* 0x12 */ | |
203 MAK_FUNC_N (pei_not_supported, 0 ), /* 0x13 */ | |
204 MAK_FUNC_0 (dat_em_fmm_nc_info_req, EM_FMM_NC_INFO_REQ ), /* 0x14 */ | |
205 #else /*GPRS*/ | |
206 MAK_FUNC_N (pei_not_supported, 0 ), /* 0x12 */ | |
207 MAK_FUNC_N (pei_not_supported, 0 ), /* 0x13 */ | |
208 MAK_FUNC_N (pei_not_supported, 0 ), /* 0x14 */ | |
209 #endif /*GPRS*/ | |
210 MAK_FUNC_N (pei_not_supported, 0 ), /* 0x15 */ | |
211 MAK_FUNC_N (pei_not_supported, 0 ), /* 0x16 */ | |
212 MAK_FUNC_N (pei_not_supported, 0 ), /* 0x17 */ | |
213 MAK_FUNC_N (pei_not_supported, 0 ), /* 0x18 */ | |
214 MAK_FUNC_0 (dat_em_amr_info_req, EM_AMR_INFO_REQ ) /* 0x19 */ | |
215 }; | |
216 #endif /* FF_EM_MODE */ | |
217 | |
218 | |
219 #if defined FF_EOTD | |
220 LOCAL const T_FUNC rrlc_table[] = { | |
221 MAK_FUNC_0( dat_rrlc_meas_req, RRLC_MEAS_REQ ) | |
222 }; | |
223 | |
224 LOCAL const T_FUNC rrrrlp_table[] = { | |
225 MAK_FUNC_S( dat_rrrrlp_data_req, RRRRLP_DATA_REQ ) | |
226 }; | |
227 #endif /* FF_EOTD */ | |
228 | |
229 /* | |
230 +--------------------------------------------------------------------+ | |
231 | PROJECT : GSM-PS (6147) MODULE : RR_PEI | | |
232 | STATE : code ROUTINE : pei_primitive | | |
233 +--------------------------------------------------------------------+ | |
234 | |
235 PURPOSE : Process protocol specific primitive. | |
236 | |
237 */ | |
238 | |
239 LOCAL SHORT pei_primitive (void * ptr) | |
240 { | |
241 T_PRIM *prim = ptr; | |
242 | |
243 /* | |
244 * | | | | | |
245 * RR EM RRLC RRRRLP UPLINK | |
246 * | | | | | |
247 * +-------v-------v-------v-------v------+ | |
248 * | | | |
249 * | RR | | |
250 * | | | |
251 * +----------^------------------^--------+ | |
252 * | | | |
253 * MPH DL DOWNLINK | |
254 * | | | |
255 * | |
256 */ | |
257 | |
258 TRACE_FUNCTION ("pei_primitive()"); | |
259 | |
260 /* | |
261 * On keypress may stop the registration timer | |
262 */ | |
263 if (stop_reg) | |
264 { | |
265 stop_reg = FALSE; | |
266 tim_reset_registration_timer (); | |
267 } | |
268 | |
269 if (prim NEQ NULL) | |
270 { | |
271 ULONG opc = prim->custom.opc; | |
272 USHORT n; | |
273 const T_FUNC *table; | |
274 GET_INSTANCE_DATA; | |
275 | |
276 VSI_PPM_REC ((T_PRIM_HEADER*)prim, __FILE__, __LINE__); | |
277 | |
278 PTRACE_IN (opc); | |
279 | |
280 switch (SAP_NR(opc)) | |
281 { | |
282 case SAP_NR(RR_UL) : table = rr_table; n = TAB_SIZE ( rr_table); break; | |
283 case SAP_NR(DL_DL) : table = dl_table; n = TAB_SIZE ( dl_table); break; | |
284 case SAP_NR(MPH_UL) : table = mph_table; n = TAB_SIZE ( mph_table); break; | |
285 #if defined FF_EOTD | |
286 case SAP_NR(RRLC_UL) : table = rrlc_table; n = TAB_SIZE ( rrlc_table); break; | |
287 case SAP_NR(RRRRLP_UL): table = rrrrlp_table; n = TAB_SIZE (rrrrlp_table); break; | |
288 #endif /* FF_EOTD */ | |
289 | |
290 #ifdef GPRS | |
291 case RRGRR_UL: gprs_get_table_n (&table, &n); break; | |
292 #endif /* GPRS */ | |
293 | |
294 #ifdef FF_EM_MODE | |
295 case EM_Ul: table = em_ul_table; n = TAB_SIZE (em_ul_table); break; | |
296 #endif /* FF_EM_MODE*/ | |
297 | |
298 default : table = NULL; n = 0; break; | |
299 } | |
300 | |
301 if (table NEQ NULL) | |
302 { | |
303 if (PRIM_NR(opc) < n) | |
304 { | |
305 table += PRIM_NR(opc); | |
306 #ifdef PALLOC_TRANSITION | |
307 P_SDU(prim) = table->soff ? (T_sdu*) (((char*)&prim->data) + table->soff) : 0; | |
308 #ifndef NO_COPY_ROUTING | |
309 P_LEN(prim) = table->size + sizeof (T_PRIM_HEADER); | |
310 #endif /* NO_COPY_ROUTING */ | |
311 #endif /* PALLOC_TRANSITION */ | |
312 JUMP (table->func) (P2D(prim)); | |
313 | |
314 while (ENTITY_DATA->use_stored_entries) | |
315 { | |
316 ENTITY_DATA->use_stored_entries = FALSE; | |
317 srv_use_stored_prim (); | |
318 } | |
319 } | |
320 #if defined (REL99) && defined (TI_PS_FF_EMR) | |
321 else if (PRIM_NR(opc) EQ DL_SPD_PID ) | |
322 { | |
323 for_dl_short_unitdata_ind((T_DL_SHORT_UNITDATA_IND*) P2D(prim)); | |
324 } | |
325 #endif | |
326 else | |
327 { | |
328 pei_not_supported (P2D(prim)); | |
329 } | |
330 return PEI_OK; | |
331 } | |
332 | |
333 /* | |
334 * Primitive is no GSM Primitive | |
335 * then forward to the environment | |
336 */ | |
337 | |
338 #ifdef GSM_ONLY | |
339 PFREE (P2D(prim)) | |
340 | |
341 return PEI_ERROR; | |
342 #else | |
343 if (opc & SYS_MASK) | |
344 vsi_c_primitive (VSI_CALLER prim); | |
345 else | |
346 { | |
347 PFREE (P2D(prim)); | |
348 return PEI_ERROR; | |
349 } | |
350 #endif | |
351 } | |
352 return PEI_OK; | |
353 } | |
354 | |
355 /* | |
356 +--------------------------------------------------------------------+ | |
357 | PROJECT : GSM-PS (6147) MODULE : RR_PEI | | |
358 | STATE : code ROUTINE : rr_pei_primitive | | |
359 +--------------------------------------------------------------------+ | |
360 | |
361 PURPOSE : used to restart a stored primitive. | |
362 | |
363 */ | |
364 GLOBAL void rr_pei_primitive (T_PRIM * prim) | |
365 { | |
366 pei_primitive (prim); | |
367 } | |
368 | |
369 /* | |
370 +--------------------------------------------------------------------+ | |
371 | PROJECT : GSM-PS (6147) MODULE : RR_PEI | | |
372 | STATE : code ROUTINE : wake_up_rr | | |
373 +--------------------------------------------------------------------+ | |
374 | |
375 PURPOSE : This function can be called from the MMI or keypad driver | |
376 to restart registration if in limited / no service condition. | |
377 | |
378 */ | |
379 /*lint -esym(714,wake_up_rr) | Symbol not referenced */ | |
380 /*lint -esym(765,wake_up_rr) | external could be made static */ | |
381 GLOBAL void wake_up_rr (void) | |
382 { | |
383 GET_INSTANCE_DATA; | |
384 T_TIME status = 0L; | |
385 | |
386 TRACE_FUNCTION ("wake_up_rr()"); | |
387 | |
388 switch (rr_data->ms_data.rr_service) | |
389 { | |
390 case NO_SERVICE: | |
391 case LIMITED_SERVICE: | |
392 if (rr_data->ms_data.reg_counter >= 12) | |
393 { | |
394 TIMER_STATUS (rr_handle, TREG, &status); | |
395 if (status) | |
396 { | |
397 stop_reg = TRUE; | |
398 vsi_c_awake (VSI_CALLER_SINGLE); | |
399 } | |
400 } | |
401 break; | |
402 } | |
403 } | |
404 | |
405 /* | |
406 +--------------------------------------------------------------------+ | |
407 | PROJECT : GSM-PS (6147) MODULE : RR_PEI | | |
408 | STATE : code ROUTINE : pei_not_supported | | |
409 +--------------------------------------------------------------------+ | |
410 | |
411 PURPOSE : An unsupported primitive is received. | |
412 | |
413 */ | |
414 | |
415 static void pei_not_supported (void * data) | |
416 { | |
417 TRACE_FUNCTION ("pei_not_supported()"); | |
418 | |
419 PFREE (data) | |
420 } | |
421 | |
422 /* | |
423 +--------------------------------------------------------------------+ | |
424 | PROJECT : GSM-PS (6147) MODULE : RR_PEI | | |
425 | STATE : code ROUTINE : pei_init | | |
426 +--------------------------------------------------------------------+ | |
427 | |
428 PURPOSE : Initialize Protocol Stack Entity | |
429 | |
430 */ | |
431 LOCAL SHORT pei_init (T_HANDLE handle) | |
432 { | |
433 GET_INSTANCE_DATA; | |
434 rr_handle = handle; | |
435 | |
436 TRACE_FUNCTION ("pei_init()"); | |
437 | |
438 #ifdef TI_PS_HCOMM_CHANGE | |
439 if (!cl_hcom_all_handles_open()) | |
440 { | |
441 return PEI_ERROR; | |
442 } | |
443 | |
444 #ifdef GPRS | |
445 if (hCommGRR < VSI_OK) | |
446 { | |
447 if ((hCommGRR = vsi_c_open (VSI_CALLER GRR_NAME)) < VSI_OK) | |
448 return PEI_ERROR; | |
449 } | |
450 #endif | |
451 #else /* for hCommHandles backward compatibility */ | |
452 if (hCommDL < VSI_OK) | |
453 { | |
454 if ((hCommDL = vsi_c_open (VSI_CALLER DL_NAME)) < VSI_OK) | |
455 return PEI_ERROR; | |
456 } | |
457 #if defined FF_EOTD | |
458 if (hCommLC < VSI_OK) | |
459 { | |
460 if ((hCommLC = vsi_c_open (VSI_CALLER LC_NAME)) < VSI_OK) | |
461 return PEI_ERROR; | |
462 } | |
463 if (hCommRRLP < VSI_OK) | |
464 { | |
465 if ((hCommRRLP = vsi_c_open (VSI_CALLER RRLP_NAME)) < VSI_OK) | |
466 return PEI_ERROR; | |
467 } | |
468 #endif /* FF_EOTD */ | |
469 | |
470 if (hCommMM < VSI_OK) | |
471 { | |
472 if ((hCommMM = vsi_c_open (VSI_CALLER MM_NAME)) < VSI_OK) | |
473 return PEI_ERROR; | |
474 } | |
475 | |
476 if (hCommPL < VSI_OK) | |
477 { | |
478 if ((hCommPL = vsi_c_open (VSI_CALLER PL_NAME)) < VSI_OK) | |
479 return PEI_ERROR; | |
480 } | |
481 | |
482 #ifdef GPRS | |
483 if (hCommGRR < VSI_OK) | |
484 { | |
485 if ((hCommGRR = vsi_c_open (VSI_CALLER GRR_NAME)) < VSI_OK) | |
486 return PEI_ERROR; | |
487 } | |
488 #endif | |
489 | |
490 #ifdef FF_WAP /*FMM*/ | |
491 | |
492 if (hCommWAP < VSI_OK) | |
493 { | |
494 if ((hCommWAP = vsi_c_open (VSI_CALLER WAP_NAME)) < VSI_OK) | |
495 return PEI_ERROR; | |
496 } | |
497 #endif | |
498 | |
499 | |
500 if (hCommMMI < VSI_OK) | |
501 { | |
502 /* | |
503 * Open MMI (Layer 4) | |
504 */ | |
505 | |
506 if ((hCommMMI = vsi_c_open (VSI_CALLER ACI_NAME)) < VSI_OK) | |
507 return PEI_ERROR; | |
508 } | |
509 #endif /* TI_PS_HCOMM_CHANGE */ | |
510 rr_data->ms_data.multislot_class_configured = FALSE; | |
511 rr_data->ms_data.cmsp_configured = FALSE; | |
512 /* | |
513 * Initialize Condat Coder Decoder and | |
514 * processes | |
515 */ | |
516 | |
517 #if !defined(_SIMULATION_) | |
518 // TRACE_EVENT (rr_version()); | |
519 // SYST_TRACE (rr_version()); | |
520 #endif /* !_SIMULATION_ */ | |
521 | |
522 ccd_init (); | |
523 att_init_gsm_data (); | |
524 dat_init_rr_data (); | |
525 cs_init_process (); | |
526 pcm_Init (); | |
527 cl_shrd_init(rr_handle); | |
528 | |
529 #if defined(_SIMULATION_) | |
530 rr_csf_ms_cap (); | |
531 rr_csf_check_rfcap (TRUE); | |
532 #endif | |
533 | |
534 #ifdef GPRS | |
535 gprs_init_gprs_data (); | |
536 #endif | |
537 | |
538 #ifdef FF_EM_MODE | |
539 em_init_rr_event_trace(); | |
540 em_rr_sem_init(); | |
541 em_init_get_hchn (); | |
542 #endif /* FF_EM_MODE */ | |
543 | |
544 return PEI_OK; | |
545 } | |
546 | |
547 /* | |
548 +--------------------------------------------------------------------+ | |
549 | PROJECT : GSM-PS (6147) MODULE : RR_PEI | | |
550 | STATE : code ROUTINE : pei_timeout | | |
551 +--------------------------------------------------------------------+ | |
552 | |
553 PURPOSE : Process timeout | |
554 | |
555 */ | |
556 | |
557 LOCAL SHORT pei_timeout (USHORT index) | |
558 { | |
559 GET_INSTANCE_DATA; | |
560 | |
561 TRACE_FUNCTION ("pei_timeout ()"); | |
562 | |
563 /* | |
564 * Handle Timeouts | |
565 */ | |
566 tim_exec_timeout (index); | |
567 | |
568 while (ENTITY_DATA->use_stored_entries) | |
569 { | |
570 ENTITY_DATA->use_stored_entries = FALSE; | |
571 srv_use_stored_prim (); | |
572 } | |
573 | |
574 return PEI_OK; | |
575 } | |
576 | |
577 #ifdef _SIMULATION_ | |
578 /* | |
579 +--------------------------------------------------------------------+ | |
580 | PROJECT : GSM-PS (6147) MODULE : RR_PEI | | |
581 | STATE : code ROUTINE : pei_exit | | |
582 +--------------------------------------------------------------------+ | |
583 | |
584 PURPOSE : Close Resources and terminate | |
585 | |
586 */ | |
587 | |
588 LOCAL SHORT pei_exit (void) | |
589 { | |
590 TRACE_FUNCTION ("pei_exit()"); | |
591 | |
592 /* | |
593 * clean up communication | |
594 */ | |
595 #ifdef TI_PS_HCOMM_CHANGE | |
596 #else /* for hCommHandles backward compatibility */ | |
597 vsi_c_close (VSI_CALLER hCommDL); | |
598 hCommDL = VSI_ERROR; | |
599 | |
600 #if defined FF_EOTD | |
601 vsi_c_close (VSI_CALLER hCommLC); | |
602 hCommLC = VSI_ERROR; | |
603 | |
604 vsi_c_close (VSI_CALLER hCommRRLP); | |
605 hCommRRLP = VSI_ERROR; | |
606 #endif /* FF_EOTD */ | |
607 | |
608 vsi_c_close (VSI_CALLER hCommMM); | |
609 hCommMM = VSI_ERROR; | |
610 | |
611 vsi_c_close (VSI_CALLER hCommPL); | |
612 hCommPL = VSI_ERROR; | |
613 | |
614 vsi_c_close (VSI_CALLER hCommMMI); | |
615 hCommMMI = VSI_ERROR; | |
616 | |
617 #ifdef FF_WAP /*FFM*/ | |
618 vsi_c_close (VSI_CALLER hCommWAP); | |
619 hCommWAP = VSI_ERROR; | |
620 #endif | |
621 #endif /* TI_PS_HCOMM_CHANGE */ | |
622 | |
623 #ifdef FF_EM_MODE | |
624 em_rr_sem_exit(); | |
625 #endif /* FF_EM_MODE */ | |
626 | |
627 ccd_exit(); | |
628 cl_shrd_exit(); | |
629 | |
630 return PEI_OK; | |
631 } | |
632 #endif /* _SIMULATION_ */ | |
633 | |
634 /* | |
635 +--------------------------------------------------------------------+ | |
636 | PROJECT : GSM-PS (6147) MODULE : RR_PEI | | |
637 | STATE : code ROUTINE : pei_config | | |
638 +--------------------------------------------------------------------+ | |
639 | |
640 PURPOSE : Dynamic Configuration | |
641 | |
642 */ | |
643 | |
644 #if !defined (NCONFIG) | |
645 LOCAL const KW_DATA kwtab[] = { | |
646 #ifdef OPTION_TIMER | |
647 RR_TIMER_SET, TIMER_SET, | |
648 RR_TIMER_RESET, TIMER_RESET, | |
649 RR_TIMER_SPEED_UP, TIMER_SPEED_UP, | |
650 RR_TIMER_SLOW_DOWN, TIMER_SLOW_DOWN, | |
651 RR_TIMER_SUPPRESS, TIMER_SUPPRESS, | |
652 #endif /* OPTION_TIMER */ | |
653 RR_TFAST_CS, TIM_FAST, | |
654 RR_TNORMAL_CS, TIM_NORMAL, | |
655 RR_FCR, FCR, | |
656 RR_SCR, SCR, | |
657 RR_DLE, DLE, | |
658 RR_FCA, FCA, | |
659 RR_FRL, FRL, | |
660 RR_FHO, FHO, | |
661 RR_IHO, IHO, | |
662 RR_NO_SYS_TIME, NO_SYS_TIME, | |
663 RR_GSM_OFFSET, GSM_OFFSET, | |
664 RR_DCS_OFFSET, DCS_OFFSET, | |
665 RR_CTO, CTO, | |
666 RR_NKC, NKC, | |
667 RR_RESTRICTED_BAND, ID_RESTRICTED_BAND, | |
668 RR_BL_CS, BL_CS, | |
669 RR_U_RXT, U_RXT, | |
670 RR_M_RXT, M_RXT, | |
671 RR_L_RXT, L_RXT, | |
672 RR_FBLS, FBLS, | |
673 RR_SHOW_BL, SHOW_BL, | |
674 RR_SHOW_WL, SHOW_WL, | |
675 RR_SET_NPS_DELAY, SET_NPS_DELAY, | |
676 #if defined (_SIMULATION_) | |
677 RR_MT_CALL_NAME, RR_MT_CALL, | |
678 RR_MT_SMS_0_NAME, RR_MT_SMS_0, | |
679 RR_MT_SMS_2_NAME, RR_MT_SMS_2, | |
680 RR_SRV_FULL_NAME, RR_SERVICE_FULL, | |
681 RR_SRV_LIM_NAME, RR_SERVICE_LIMITED, | |
682 RR_SRV_NO, RR_SERVICE_NO, | |
683 RR_PSEUDO_SYNC_HO, ID_PSEUDO_SYNC_HO, | |
684 RR_PCM, ID_PCM, | |
685 RR_DCS_PCLASS_3, DCS_PCLASS_3, | |
686 #endif /* _SIMULATION_ */ | |
687 RR_MULTISLOT_CLASS, ID_MULTISLOT_CLASS, | |
688 RR_CMSP, ID_CMSP, | |
689 #if !defined(_SIMULATION_) | |
690 RR_FFS_CHECK, ID_FFS_CHECK, | |
691 #endif | |
692 #if defined (_SIMULATION_FFS_) | |
693 RR_ERASE_WL, ERASE_WL, | |
694 RR_ERASE_BL, ERASE_BL, | |
695 RR_SHIELD, SHIELD, | |
696 RR_INIT_FFS, INIT_FFS, | |
697 RR_WRITE_FFS, WRITE_FFS, | |
698 #endif /* (_SIMULATION_FFS_)*/ | |
699 RR_SET_WL, SET_WL, | |
700 RR_SET_BL, SET_BL, | |
701 RR_SET_WL_REGION, SET_WL_REGION, | |
702 RR_SET_LAST_USED_SC, SET_LAST_USED_SC, | |
703 RR_SCS, SCS, | |
704 RR_SET_WL_PLMN, SET_WL_PLMN, | |
705 "", 0 | |
706 }; | |
707 | |
708 static const KW_DATA partab[] = { | |
709 #ifdef OPTION_TIMER | |
710 T3110_NAME, T3110, | |
711 T3122_NAME, T3122, | |
712 T3126_NAME, T3126, | |
713 TRESELECT_NAME, T_RESELECT, | |
714 TREG_NAME, TREG, | |
715 TABORT_NAME, TABORT, | |
716 #endif | |
717 "", 0 | |
718 }; | |
719 #endif /*!defined (NCONFIG)*/ | |
720 /* Implements Measure#36 */ | |
721 #if defined(NCONFIG) | |
722 #else /* NCONFIG */ | |
723 LOCAL SHORT pei_config (T_PEI_CONFIG inString) | |
724 { | |
725 GET_INSTANCE_DATA; | |
726 #if !defined (NCONFIG) | |
727 #define NMAX_VAL 20 | |
728 { | |
729 char * s = inString; | |
730 SHORT valno; | |
731 char * keyw; | |
732 char * val [NMAX_VAL]; | |
733 #ifdef OPTION_TIMER | |
734 BOOL t_man = FALSE; | |
735 SHORT t_num = 0; | |
736 LONG t_val = 0; | |
737 | |
738 #endif | |
739 #if defined(_SIMULATION_FFS_) | |
740 UBYTE count = 0,index = 0,mcc[SIZE_MCC]; | |
741 SHORT mcc_val = 0; | |
742 #endif /* _SIMULATION_FFS */ | |
743 | |
744 TRACE_FUNCTION ("pei_config()"); | |
745 | |
746 TRACE_EVENT (s); | |
747 | |
748 tok_init(s); | |
749 | |
750 /* | |
751 * Parse next keyword and number of variables | |
752 */ | |
753 while ((valno = tok_next(&keyw,val)) NEQ TOK_EOCS) | |
754 { | |
755 switch ( tok_key((KW_DATA *)kwtab,keyw)) | |
756 { | |
757 case TOK_NOT_FOUND: | |
758 TRACE_ERROR ("[PEI_CONFIG]: Illegal Keyword"); | |
759 break; | |
760 | |
761 case FCR: /* fast cell reselection */ | |
762 TRACE_EVENT ("[PEI_CONFIG]: FAST CELL RESELECTION"); | |
763 rr_data->dyn_config.fcr = 1; | |
764 break; | |
765 | |
766 case SCS: | |
767 { | |
768 SHORT i = 0; | |
769 PALLOC (error_ind, MPH_ERROR_IND); | |
770 | |
771 TRACE_EVENT(" [PEI_CONFIG]: START CELL SELECTION"); | |
772 | |
773 for( i=0; i < 6; i++) | |
774 rr_data->nc_data[i].bcch_status = NON_DECODED; | |
775 /* | |
776 * Simulating Downlink Failure | |
777 */ | |
778 error_ind->cs = CS_DOWN_LINK_FAIL; | |
779 error_ind->arfcn = rr_data->nc_data[SC_INDEX].arfcn; | |
780 pei_primitive ((T_PRIM *)D2P(error_ind)); | |
781 } | |
782 break; | |
783 | |
784 case SCR: /* slow cell reselection */ | |
785 TRACE_EVENT ("[PEI_CONFIG]: SLOW CELL RESELECTION"); | |
786 rr_data->dyn_config.scr = 1; | |
787 break; | |
788 | |
789 | |
790 case DLE: /* downlink error */ | |
791 { | |
792 PALLOC (error_ind, MPH_ERROR_IND); | |
793 | |
794 TRACE_EVENT ("[PEI_CONFIG]: DOWNLINK ERROR"); | |
795 error_ind->cs = CS_DOWN_LINK_FAIL; | |
796 pei_primitive ((T_PRIM *)D2P(error_ind)); | |
797 } | |
798 break; | |
799 | |
800 case FRL: /* force radio link timeout */ | |
801 { | |
802 PALLOC (error_ind, MPH_ERROR_IND); | |
803 | |
804 TRACE_EVENT ("[PEI_CONFIG]: RADIO LINK ERROR"); | |
805 error_ind->cs = CS_RADIO_LINK_FAIL; | |
806 pei_primitive ((T_PRIM *)D2P(error_ind)); | |
807 } | |
808 break; | |
809 case FCA: /* failed channel assign */ | |
810 TRACE_EVENT ("[PEI_CONFIG]: FAILED CHANNEL ASSIGN"); | |
811 rr_data->dyn_config.fca = 1; | |
812 break; | |
813 | |
814 case FHO: /* forced handover */ | |
815 TRACE_EVENT ("[PEI_CONFIG]: FORCED HANDOVER"); | |
816 rr_data->dyn_config.fho = 1; | |
817 break; | |
818 | |
819 case IHO : /* Lock/Unlock the DUT to the cell it is already camping */ | |
820 TRACE_EVENT_P1("[PEI_CONFIG]: Lock/Unlock the DUT to the cell it is already camping : %s", val[0]); | |
821 rr_data->dyn_config.iho = atoi (val[0]); | |
822 break; | |
823 | |
824 case GSM_OFFSET: /* Offset for GSM channels */ | |
825 rr_data->dyn_config.gsm_offset = atoi (val[0]); | |
826 break; | |
827 | |
828 case DCS_OFFSET: /* Offset for DCS channels */ | |
829 rr_data->dyn_config.dcs_offset = atoi (val[0]); | |
830 break; | |
831 | |
832 case CTO: /* enable cell test operation mode */ | |
833 rr_data->cell_test_operation = TRUE; | |
834 break; | |
835 | |
836 case NKC: /* request to cipher when no ciphering key available */ | |
837 rr_data->dyn_config.nkc = TRUE; | |
838 break; | |
839 case BL_CS: /* Controls Black List search */ | |
840 if(valno) | |
841 { | |
842 valno = atoi (val[0]); | |
843 rr_data->dyn_config.bl_cs_en = valno ? 1 : 0; | |
844 TRACE_EVENT_P1("[PEI_CONFIG]: BL_CS : Black List search : %s", val[0]); | |
845 } | |
846 else | |
847 { | |
848 TRACE_ERROR ("[PEI_CONFIG]: BL_CS-Wrong Number of Parameters"); | |
849 } | |
850 break; | |
851 case U_RXT: /* Upper RxLev threshold Level*/ | |
852 if(valno>0 AND valno<=MAX_NUM_BANDS) | |
853 { | |
854 rr_csf_write_rxlev_thr( U_RXT, valno, val ); | |
855 } | |
856 else | |
857 { | |
858 TRACE_ERROR ("[PEI_CONFIG]: U_RXT-Wrong Number of Parameters"); | |
859 } | |
860 break; | |
861 case M_RXT: /* Medium threshold level*/ | |
862 if(valno>0 AND valno<=MAX_NUM_BANDS) | |
863 { | |
864 rr_csf_write_rxlev_thr( M_RXT, valno, val ); | |
865 } | |
866 else | |
867 { | |
868 TRACE_ERROR ("[PEI_CONFIG]: M_RXT-Wrong Number of Parameters"); | |
869 } | |
870 break; | |
871 case L_RXT: /* Lower threshold level*/ | |
872 if(valno>0 AND valno<=MAX_NUM_BANDS) | |
873 { | |
874 rr_csf_write_rxlev_thr( L_RXT, valno, val ); | |
875 } | |
876 else | |
877 { | |
878 TRACE_ERROR ("[PEI_CONFIG]: L_RXT-Wrong Number of Parameters"); | |
879 } | |
880 break; | |
881 case FBLS: /* Force Black List Search */ | |
882 if((GET_STATE(STATE_ATT) EQ ATT_IDLE) AND | |
883 (rr_data->ms_data.rr_service EQ FULL_SERVICE)) | |
884 { | |
885 #ifdef TI_PS_FF_QUAD_BAND_SUPPORT | |
886 if (rr_data->cs_data.region EQ BOTH_REGIONS) | |
887 { | |
888 if(srv_is_list_set(&rr_data->cs_data.black_list.list[EUROPEAN_REGION]) OR | |
889 srv_is_list_set(&rr_data->cs_data.black_list.list[AMERICAN_REGION])) | |
890 { | |
891 att_start_cell_selection(RR_ORIGINATED,CS_PARALLEL,BLACK_LIST_SEARCH_MODE); | |
892 } | |
893 else | |
894 TRACE_EVENT("Black List empty"); | |
895 } | |
896 else | |
897 { | |
898 #endif | |
899 if(srv_is_list_set( | |
900 &rr_data->cs_data.black_list.list[rr_data->cs_data.region])) | |
901 { | |
902 att_start_cell_selection(RR_ORIGINATED,CS_PARALLEL,BLACK_LIST_SEARCH_MODE); | |
903 } | |
904 else | |
905 TRACE_EVENT("Black List empty"); | |
906 #ifdef TI_PS_FF_QUAD_BAND_SUPPORT | |
907 } | |
908 #endif | |
909 } | |
910 break; | |
911 case ID_RESTRICTED_BAND: | |
912 rr_data->dyn_config.set_band = atoi (val[0]); | |
913 | |
914 switch (GET_STATE (STATE_ATT)) | |
915 { | |
916 case ATT_NULL: | |
917 case ATT_NO_SERVICE: | |
918 case ATT_CS1: | |
919 case ATT_CS2: | |
920 case ATT_CS3: | |
921 case ATT_IDLE: | |
922 rr_data->ms_data.rr_service = NO_SERVICE; | |
923 att_code_rr_abort_ind (RRCS_ABORT_CEL_SEL_FAIL); | |
924 SET_STATE (STATE_ATT, ATT_NO_SERVICE); | |
925 | |
926 rr_data->cs_data.scan_mode = CS_FIRST_SCAN_FIRST_ATTEMPT; | |
927 | |
928 att_reset_old_lai_rac(); | |
929 | |
930 cs_set_null (); | |
931 cs_set_all (); | |
932 cs_start_scan (); | |
933 /* | |
934 * initialise cell selection parameter | |
935 */ | |
936 rr_data->sc_data.selection_type = CELL_SELECTION; | |
937 rr_data->sc_data.mm_started = FALSE; | |
938 rr_data->sc_data.found_entries = 0; | |
939 att_init_cr_data(); | |
940 | |
941 SET_STATE (STATE_ATT, ATT_CS1); | |
942 | |
943 switch (rr_data->dyn_config.set_band) | |
944 { | |
945 case 0: | |
946 TRACE_EVENT ("[PEI_CONFIG]: Set band to default"); | |
947 break; | |
948 case 1: | |
949 TRACE_EVENT ("[PEI_CONFIG]: Set band to GSM 900"); | |
950 break; | |
951 case 2: | |
952 TRACE_EVENT ("[PEI_CONFIG]: Set band to DCS 1800"); | |
953 break; | |
954 } /* switch (rr_data->set_band) */ | |
955 } /* switch (GET_STATE (STATE_ATT)) */ | |
956 break; | |
957 | |
958 case NO_SYS_TIME: | |
959 rr_data->dyn_config.no_sys_time = TRUE; | |
960 break; | |
961 | |
962 case SET_LAST_USED_SC: | |
963 if(valno) | |
964 { | |
965 rr_data->cs_data.white_list.last_sc_arfcn = atoi (val[0]); | |
966 TRACE_EVENT_P1("LAST SC ARFCN = %x",rr_data->cs_data.white_list.last_sc_arfcn); | |
967 } | |
968 else | |
969 { | |
970 TRACE_ERROR ("[PEI_CONFIG]: LAST_USED_SC-Wrong Number of Parameters"); | |
971 } | |
972 break; | |
973 | |
974 #if defined (_SIMULATION_FFS_) | |
975 case INIT_FFS: | |
976 rr_csf_ffs_init(); | |
977 TRACE_EVENT_P1("LAST SC ARFCN = %x",rr_data->cs_data.white_list.last_sc_arfcn); | |
978 break; | |
979 | |
980 case WRITE_FFS: | |
981 { | |
982 rr_csf_write_black_list(&rr_data->cs_data.black_list.list[0]); | |
983 rr_csf_write_white_list(&rr_data->cs_data.white_list); | |
984 } | |
985 break; | |
986 #endif /* _SIMULATION_FFS_ */ | |
987 | |
988 | |
989 #ifdef OPTION_TIMER | |
990 case TIMER_SET: | |
991 if (valno EQ 2) | |
992 { | |
993 t_man = TRUE; | |
994 t_num = tok_key((KW_DATA *)partab,val[0]); | |
995 t_val = atoi(val[1]); | |
996 if (t_val < 0L) | |
997 t_val = 0L; | |
998 } | |
999 else | |
1000 { | |
1001 TRACE_ERROR ("[PEI_CONFIG]: Wrong Number of Parameters"); | |
1002 } | |
1003 break; | |
1004 case TIMER_RESET: | |
1005 case TIMER_SUPPRESS: | |
1006 if (valno EQ 1) | |
1007 { | |
1008 t_man = TRUE; /* Timermanipulation */ | |
1009 t_num = tok_key((KW_DATA *)partab,val[0]); | |
1010 t_val = 0L; | |
1011 } | |
1012 else | |
1013 { | |
1014 TRACE_ERROR ("[PEI_CONFIG]: Wrong Number of Parameters"); | |
1015 } | |
1016 break; | |
1017 case TIMER_SPEED_UP: | |
1018 case TIMER_SLOW_DOWN: | |
1019 if (valno EQ 2) | |
1020 { | |
1021 t_man = TRUE; | |
1022 t_num = tok_key((KW_DATA *)partab,val[0]); | |
1023 t_val = atoi(val[1]); | |
1024 if (t_val <= 0L) | |
1025 t_val = 1L; | |
1026 } | |
1027 else | |
1028 { | |
1029 TRACE_ERROR ("[PEI_CONFIG]: Wrong Number of Parameters"); | |
1030 } | |
1031 break; | |
1032 case TIM_FAST: | |
1033 if(valno) | |
1034 { | |
1035 rr_data->dyn_config.tfast_cs_val = atoi(val[0])*60000; | |
1036 TRACE_EVENT_P1("[PEI_CONFIG]TFAST_CS : %dms",rr_data->dyn_config.tfast_cs_val); | |
1037 if(!rr_data->dyn_config.tfast_cs_val) | |
1038 { | |
1039 if(IS_TIMER_ACTIVE(T_FAST_CS)) | |
1040 TIMERSTOP(T_FAST_CS); | |
1041 } | |
1042 } | |
1043 else | |
1044 { | |
1045 TRACE_ERROR ("[PEI_CONFIG]: TFAST_CS-Wrong Number of Parameters"); | |
1046 } | |
1047 break; | |
1048 case TIM_NORMAL: | |
1049 if(valno) | |
1050 { | |
1051 rr_data->dyn_config.tnormal_cs_val = atoi(val[0])*60000; | |
1052 TRACE_EVENT_P1("[PEI_CONFIG]TNORMAL_CS : %dms",rr_data->dyn_config.tnormal_cs_val); | |
1053 if(!rr_data->dyn_config.tnormal_cs_val) | |
1054 { | |
1055 if(IS_TIMER_ACTIVE(T_NORMAL_CS)) | |
1056 TIMERSTOP(T_NORMAL_CS); | |
1057 } | |
1058 } | |
1059 else | |
1060 { | |
1061 TRACE_ERROR ("[PEI_CONFIG]: TNORMAL_CS-Wrong Number of Parameters"); | |
1062 } | |
1063 break; | |
1064 | |
1065 | |
1066 #endif | |
1067 | |
1068 #if defined (_SIMULATION_) | |
1069 case RR_MT_CALL: | |
1070 /* | |
1071 * Start mobile terminated call | |
1072 * if simulation is enabled | |
1073 */ | |
1074 break; | |
1075 case RR_MT_SMS_0: | |
1076 /* | |
1077 * Start mobile terminated SMS class 0 | |
1078 * if simulation is enabled | |
1079 */ | |
1080 break; | |
1081 case RR_MT_SMS_2: | |
1082 /* | |
1083 * Start mobile terminated SMS class 0 | |
1084 * if simulation is enabled | |
1085 */ | |
1086 break; | |
1087 case RR_SERVICE_FULL: | |
1088 /* | |
1089 * Set full service | |
1090 * if simulation is enabled | |
1091 */ | |
1092 break; | |
1093 case RR_SERVICE_LIMITED: | |
1094 /* | |
1095 * Set limited service | |
1096 * if simulation is enabled | |
1097 */ | |
1098 break; | |
1099 case RR_SERVICE_NO: | |
1100 /* | |
1101 * Set no service | |
1102 * if simulation is enabled | |
1103 */ | |
1104 break; | |
1105 case RR_MO_CONNECT: | |
1106 break; | |
1107 | |
1108 case ID_PSEUDO_SYNC_HO: | |
1109 if (valno) | |
1110 { | |
1111 if (atoi (val[0])) | |
1112 rr_data->ms_data.rf_cap.ps = TRUE; | |
1113 else | |
1114 rr_data->ms_data.rf_cap.ps = FALSE; | |
1115 TRACE_EVENT_P1 ("PSEUDO_SYNC_HO capability changed (%u)", | |
1116 rr_data->ms_data.rf_cap.ps); | |
1117 rr_csf_fit_capability (); | |
1118 } | |
1119 else | |
1120 { | |
1121 TRACE_ERROR("[PEI_CONFIG]: use CONFIG PSEUDO_SYNC_HO=<value>"); | |
1122 } | |
1123 break; | |
1124 case DCS_PCLASS_3 : | |
1125 TRACE_EVENT_P1("DCS_PCLASS_3 old [%d] -> new[3]", | |
1126 rr_data->ms_data.rf_cap.rf_power.pow_class4[IDX_PWRCLASS_1800].pow_class); | |
1127 rr_data->ms_data.rf_cap.rf_power.pow_class4[IDX_PWRCLASS_1800].pow_class = POWER_CLASS_3; | |
1128 break; | |
1129 case ID_PCM: /* sample: COMMAND ("RR CONFIG PCM=<MSCAP,0x0F,0xb7,0b10001010,0,0,0>") */ | |
1130 if (valno) | |
1131 { | |
1132 UBYTE b[NMAX_VAL-1]; | |
1133 UBYTE version,ok=1; | |
1134 USHORT i,n=valno-1; | |
1135 | |
1136 if ( pcm_ReadFile ( val[0], n, b, &version) EQ PCM_OK) | |
1137 { | |
1138 for ( i = 0; i < n; ++i ) | |
1139 { | |
1140 UBYTE c,*p = val[i+1]; | |
1141 int dig,z = 0; | |
1142 UBYTE base; | |
1143 | |
1144 if ( p[0] EQ '0' ) | |
1145 { | |
1146 if ( p[1] EQ 'x' OR p[1] EQ 'X' ) { p += 2; base = 16; } else | |
1147 if ( p[1] EQ 'b' OR p[1] EQ 'B' ) { p += 2; base = 2; } else | |
1148 base = 8; | |
1149 } | |
1150 else | |
1151 base = 10; | |
1152 | |
1153 while ( ok AND (c = *p++) != '\0' ) | |
1154 { | |
1155 if ( c >= '0' AND c <= '9' ) dig = c - '0'; else | |
1156 if ( c >= 'A' AND c <= 'F' ) dig = c - 'A' + 10; else | |
1157 if ( c >= 'a' AND c <= 'f' ) dig = c - 'a' + 10; else | |
1158 { | |
1159 ok = 0; | |
1160 break; | |
1161 } | |
1162 | |
1163 if ( base EQ 2 ) ok = dig >= 0 AND dig <= 1; else | |
1164 if ( base EQ 8 ) ok = dig >= 0 AND dig <= 7; else | |
1165 if ( base EQ 10 ) ok = dig >= 0 AND dig <= 9; else | |
1166 if ( base EQ 16 ) ok = dig >= 0 AND dig <= 15; | |
1167 | |
1168 if ( ok ) | |
1169 z = z * base + dig; | |
1170 }; | |
1171 | |
1172 if ( ok ) | |
1173 { | |
1174 TRACE_EVENT_P4 ( "%s[%d]: 0x%02x -> 0x%02x", val[0], i, b[i], z ); | |
1175 b[i] = z; | |
1176 } | |
1177 else | |
1178 { | |
1179 TRACE_EVENT_P1 ( "invalid number:%s", val[i+1] ); | |
1180 break; | |
1181 } | |
1182 } | |
1183 | |
1184 if ( ok ) | |
1185 { | |
1186 if ( pcm_WriteFile ( val[0], n, b) EQ PCM_OK) | |
1187 { | |
1188 rr_csf_read_rfcap (); | |
1189 rr_csf_fit_capability (); | |
1190 rr_csf_read_imei (&rr_data->ms_data.imei); | |
1191 rr_csf_ms_cap (); | |
1192 | |
1193 } | |
1194 else | |
1195 { | |
1196 TRACE_EVENT ( "cannot perform PCM write action" ); | |
1197 } | |
1198 } | |
1199 } | |
1200 else | |
1201 { | |
1202 TRACE_EVENT ( "cannot perform PCM read action" ); | |
1203 } | |
1204 | |
1205 TRACE_EVENT_P1 ( "PCM '%s' " , val[0] ); | |
1206 } | |
1207 else | |
1208 { | |
1209 TRACE_ERROR("[PEI_CONFIG]: use PCM=<value>"); | |
1210 } | |
1211 break; | |
1212 | |
1213 #endif /* _SIMULATION_ */ | |
1214 #if defined(_SIMULATION_FFS_) | |
1215 case SHIELD: | |
1216 if(!valno) | |
1217 { | |
1218 memset(&rr_data->dyn_config.mcc_shield,0,sizeof(T_shield_mcc)); | |
1219 } | |
1220 else | |
1221 { | |
1222 rr_data->dyn_config.mcc_shield.enabled = TRUE; | |
1223 if(valno > MAX_MCC_SHIELD) | |
1224 { | |
1225 TRACE_ERROR("max configurable mcc shield values are four"); | |
1226 valno = MAX_MCC_SHIELD; | |
1227 } | |
1228 index = rr_data->dyn_config.mcc_shield.index; | |
1229 for(count=0;count< valno;count++) | |
1230 { | |
1231 if(index >= MAX_MCC_SHIELD) | |
1232 { | |
1233 index = 0; | |
1234 } | |
1235 mcc_val = atoi(val[count]); | |
1236 if(!mcc_val) | |
1237 { | |
1238 TRACE_ERROR("mcc value cannot be zero"); | |
1239 } | |
1240 else | |
1241 { | |
1242 mcc[0] = (mcc_val/100); | |
1243 mcc[1] = (mcc_val/10)%10; | |
1244 mcc[2] = (mcc_val % 10); | |
1245 if(!rr_csf_mcc_present(mcc)) | |
1246 { | |
1247 memcpy(rr_data->dyn_config.mcc_shield.mcc[index],mcc,SIZE_MCC); | |
1248 index++; | |
1249 } | |
1250 } | |
1251 } | |
1252 rr_data->dyn_config.mcc_shield.index = index; | |
1253 | |
1254 } | |
1255 rr_csf_write_mcc_shield_to_ffs(); | |
1256 break; | |
1257 #endif /* defined(_SIMULATION_FFS_)*/ | |
1258 case ID_MULTISLOT_CLASS: | |
1259 if (valno EQ 1) | |
1260 { | |
1261 UBYTE ms = atoi (val[0]); | |
1262 TRACE_EVENT_P1 ("MULTISLOT_CLASS changed (%u)", ms); | |
1263 rr_data->ms_data.multislot_class_configured = TRUE; | |
1264 rr_data->ms_data.rf_cap.rf_ms.gprs_ms_class = ms; | |
1265 #ifdef GPRS | |
1266 #ifdef REL99 | |
1267 rr_data->ms_data.ra_cap.ra_cap_values.acc_cap.v_ms_struct = SUPPORTED; | |
1268 rr_data->ms_data.ra_cap.ra_cap_values.acc_cap.ms_struct.gprs_struct.gprs_ms_class = ms; | |
1269 if (rr_data->ms_data.ra_cap.c_ra_cap_r EQ MAX_ADD_RA_CAP) | |
1270 #else | |
1271 rr_data->ms_data.ra_cap.acc_cap.v_ms_struct = SUPPORTED; | |
1272 rr_data->ms_data.ra_cap.acc_cap.ms_struct.gprs_struct.gprs_ms_class = ms; | |
1273 if (rr_data->ms_data.ra_cap.v_ra_cap2) | |
1274 #endif | |
1275 { | |
1276 /* | |
1277 * zero means that the same value for multislot parameters as given | |
1278 * in an earlier access capabilities field within this IE apply | |
1279 * also here. | |
1280 */ | |
1281 #ifdef REL99 | |
1282 rr_data->ms_data.ra_cap.ra_cap_r[0].ra_cap_values.acc_cap.v_ms_struct = FALSE; | |
1283 #else | |
1284 rr_data->ms_data.ra_cap.ra_cap2.acc_cap.v_ms_struct = FALSE; | |
1285 #endif | |
1286 } | |
1287 #endif | |
1288 } | |
1289 else | |
1290 { | |
1291 TRACE_ERROR("[PEI_CONFIG]: use CONFIG MULTISLOT_CLASS=<value>"); | |
1292 } | |
1293 break; | |
1294 case ID_CMSP: | |
1295 if (valno EQ 1) | |
1296 { | |
1297 BOOL cmsp = atoi (val[0]); | |
1298 if (cmsp) | |
1299 cmsp = 1; /* boolean */ | |
1300 TRACE_EVENT_P2 ("CMSP changed (%u->%u)", rr_data->ms_data.rf_cap.cmsp, cmsp); | |
1301 rr_data->ms_data.cmsp_configured = TRUE; | |
1302 rr_data->ms_data.rf_cap.cmsp = cmsp; | |
1303 } | |
1304 else | |
1305 { | |
1306 TRACE_ERROR("[PEI_CONFIG]: use CONFIG CMSP=<0|1>"); | |
1307 } | |
1308 break; | |
1309 #if defined(_TARGET_) | |
1310 #endif /* _TARGET_ */ | |
1311 #if defined (_SIMULATION_FFS_) | |
1312 case ERASE_WL: | |
1313 /*lint -e655 (Warning -- bit-wise operation uses (compatible) enum's)*/ | |
1314 cs_clear_white_list (CLR_WHITE_LIST_RAM | CLR_WHITE_LIST_SIM | CLR_WHITE_LIST_FFS); | |
1315 /*lint +e655 (Warning -- bit-wise operation uses (compatible) enum's)*/ | |
1316 break; | |
1317 case ERASE_BL: | |
1318 /*lint -e655 (Warning -- bit-wise operation uses (compatible) enum's)*/ | |
1319 cs_clear_black_list (CLR_BLACK_LIST_RAM | CLR_BLACK_LIST_FFS); | |
1320 /*lint +e655 (Warning -- bit-wise operation uses (compatible) enum's)*/ | |
1321 break; | |
1322 #endif /* _SIMULATION_FFS_ */ | |
1323 case SHOW_BL: | |
1324 /*lint -e655 (Warning -- bit-wise operation uses (compatible) enum's)*/ | |
1325 srv_trace_black_list (); | |
1326 /*lint +e655 (Warning -- bit-wise operation uses (compatible) enum's)*/ | |
1327 break; | |
1328 case SHOW_WL: | |
1329 /*lint -e655 (Warning -- bit-wise operation uses (compatible) enum's)*/ | |
1330 srv_trace_white_list (); | |
1331 /*lint +e655 (Warning -- bit-wise operation uses (compatible) enum's)*/ | |
1332 break; | |
1333 case SET_WL: | |
1334 if(valno < 2) | |
1335 { | |
1336 TRACE_ERROR("[PEI_CONFIG]: wrong Number of Parameters"); | |
1337 } | |
1338 else | |
1339 { | |
1340 UBYTE c_region; | |
1341 USHORT c_arfcn; | |
1342 UBYTE i; | |
1343 | |
1344 if(valno > 6) | |
1345 valno = 6; /* 1 to 5 ARFCNs can be configured at a time */ | |
1346 | |
1347 c_region = atoi(val[0]); | |
1348 if(cs_check_region(c_region)) | |
1349 { | |
1350 rr_data->cs_data.white_list.region = c_region; | |
1351 | |
1352 for(i=1;i<valno;i++) | |
1353 { | |
1354 c_arfcn = atoi(val[i]); | |
1355 if(cs_check_arfcn_range(c_arfcn)) | |
1356 { | |
1357 srv_set_channel(&rr_data->cs_data.white_list.list,c_arfcn); | |
1358 TRACE_EVENT_P1("Arfcn:%d -> WL", c_arfcn); | |
1359 } /* arfcn */ | |
1360 } /* for */ | |
1361 } /* region */ | |
1362 } /* valno */ | |
1363 break; | |
1364 | |
1365 case SET_BL: | |
1366 if(valno < 2) | |
1367 { | |
1368 TRACE_ERROR("[PEI_CONFIG]: wrong Number of Parameters"); | |
1369 } | |
1370 else | |
1371 { | |
1372 UBYTE c_region; | |
1373 USHORT c_arfcn; | |
1374 UBYTE i; | |
1375 | |
1376 if(valno > 6) | |
1377 valno = 6; /* 1 to 5 ARFCNs can be configured at a time */ | |
1378 | |
1379 c_region = atoi(val[0]); | |
1380 if(cs_check_region(c_region)) | |
1381 { | |
1382 for(i=1;i<valno;i++) | |
1383 { | |
1384 c_arfcn = atoi(val[i]); | |
1385 if(cs_check_arfcn_range(c_arfcn)) | |
1386 { | |
1387 srv_set_channel(&rr_data->cs_data.black_list.list[c_region],c_arfcn); | |
1388 TRACE_EVENT_P1("Arfcn:%d -> BL", c_arfcn); | |
1389 } /* arfcn */ | |
1390 } /* for */ | |
1391 } /* region */ | |
1392 } /* valno */ | |
1393 break; | |
1394 case SET_WL_REGION: | |
1395 if(valno) | |
1396 { | |
1397 if(cs_check_region((U8)atoi (val[0]))) | |
1398 rr_data->cs_data.white_list.region = atoi (val[0]); | |
1399 } | |
1400 else | |
1401 { | |
1402 TRACE_ERROR ("[PEI_CONFIG]: wrong Number of Parameters"); | |
1403 } | |
1404 break; | |
1405 case SET_WL_PLMN: | |
1406 if(valno < 2) | |
1407 { | |
1408 TRACE_ERROR("[PEI_CONFIG]: wrong Number of Parameters"); | |
1409 } | |
1410 else | |
1411 { | |
1412 SHORT plmn = atoi (val[0]); | |
1413 /* copy MCC */ | |
1414 rr_data->cs_data.white_list.last_sc_lac.mcc[0] = (plmn/100); | |
1415 rr_data->cs_data.white_list.last_sc_lac.mcc[1] = (plmn/10)%10; | |
1416 rr_data->cs_data.white_list.last_sc_lac.mcc[2] = (plmn % 10); | |
1417 | |
1418 /* Copy MNC */ | |
1419 plmn = atoi (val[1]); | |
1420 rr_data->cs_data.white_list.last_sc_lac.mnc[0] = (plmn/100); | |
1421 rr_data->cs_data.white_list.last_sc_lac.mnc[1] = (plmn/10)%10; | |
1422 rr_data->cs_data.white_list.last_sc_lac.mnc[2] = (plmn % 10); | |
1423 | |
1424 if(!rr_data->cs_data.white_list.last_sc_lac.mnc[2]) | |
1425 rr_data->cs_data.white_list.last_sc_lac.mnc[2] = 0x0f; | |
1426 | |
1427 TRACE_EVENT_P6( "[PEI_CONFIG]SET_WL_PLMN MCC/MNC r=%x%x%x/%x%x%x", | |
1428 rr_data->cs_data.white_list.last_sc_lac.mcc[0], | |
1429 rr_data->cs_data.white_list.last_sc_lac.mcc[1], | |
1430 rr_data->cs_data.white_list.last_sc_lac.mcc[2], | |
1431 rr_data->cs_data.white_list.last_sc_lac.mnc[0], | |
1432 rr_data->cs_data.white_list.last_sc_lac.mnc[1], | |
1433 rr_data->cs_data.white_list.last_sc_lac.mnc[2]); | |
1434 | |
1435 } | |
1436 break; | |
1437 case SET_NPS_DELAY: | |
1438 if(valno) | |
1439 { | |
1440 rr_data->dyn_config.lim_ser_nps_delay = atoi (val[0]); | |
1441 } | |
1442 else | |
1443 { | |
1444 TRACE_ERROR ("[PEI_CONFIG]: wrong Number of Parameters"); | |
1445 } | |
1446 break; | |
1447 default: | |
1448 break; | |
1449 } | |
1450 | |
1451 #ifdef OPTION_TIMER | |
1452 /* | |
1453 * If timer manipulation | |
1454 */ | |
1455 | |
1456 if (t_man) | |
1457 { | |
1458 t_man = FALSE; | |
1459 if (t_num >= 0 AND t_num < MAX_RR_TIMER) | |
1460 ; /* vsi_t_config is removed in latest GPF */ | |
1461 else | |
1462 { | |
1463 TRACE_ERROR ("[PEI_CONFIG]: Parameter out of Range"); | |
1464 } | |
1465 } | |
1466 #endif | |
1467 } | |
1468 } /*!defined (NCONFIG)*/ | |
1469 #endif /*!defined (NCONFIG)*/ | |
1470 | |
1471 return PEI_OK; | |
1472 } | |
1473 #endif /* NCONFIG */ | |
1474 /* | |
1475 +--------------------------------------------------------------------+ | |
1476 | PROJECT : GSM-PS (6147) MODULE : RR_PEI | | |
1477 | STATE : code ROUTINE : rr_pei_config | | |
1478 +--------------------------------------------------------------------+ | |
1479 | |
1480 PURPOSE : Dynamic Configuration | |
1481 | |
1482 */ | |
1483 /*lint -esym(714,rr_pei_config) | Symbol not referenced | used by Frame */ | |
1484 /*lint -esym(765,rr_pei_config) | external could be made static | used by Frame */ | |
1485 /* Implements Measure#36 */ | |
1486 #if defined(NCONFIG) | |
1487 #else /* NCONFIG */ | |
1488 GLOBAL SHORT rr_pei_config ( char * inString, char * dummy ) | |
1489 { | |
1490 pei_config ( inString ); | |
1491 | |
1492 return PEI_OK; | |
1493 } | |
1494 #endif /* NCONFIG */ | |
1495 | |
1496 | |
1497 /* | |
1498 +--------------------------------------------------------------------+ | |
1499 | PROJECT : GSM-PS (6147) MODULE : RR_PEI | | |
1500 | STATE : code ROUTINE : pei_create | | |
1501 +--------------------------------------------------------------------+ | |
1502 | |
1503 PURPOSE : Create the Protocol Stack Entity | |
1504 | |
1505 */ | |
1506 /*lint -esym(714,rr_pei_create) | Symbol not referenced | used by Frame */ | |
1507 /*lint -esym(765,rr_pei_create) | external could be made static | used by Frame */ | |
1508 GLOBAL SHORT rr_pei_create (T_PEI_INFO **info) | |
1509 { | |
1510 static const T_PEI_INFO pei_info = | |
1511 { | |
1512 "RR", | |
1513 { | |
1514 pei_init, | |
1515 #ifdef _SIMULATION_ | |
1516 pei_exit, | |
1517 #else | |
1518 NULL, | |
1519 #endif | |
1520 pei_primitive, | |
1521 pei_timeout, | |
1522 NULL, /* no signal function */ | |
1523 NULL, /* no run function */ | |
1524 /* Implements Measure#36 */ | |
1525 #if defined(NCONFIG) | |
1526 NULL, /* no pei_config function */ | |
1527 #else /* NCONFIG */ | |
1528 pei_config, | |
1529 #endif /* NCONFIG */ | |
1530 NULL, | |
1531 }, | |
1532 #ifdef GPRS | |
1533 1736, /* Stack Size */ | |
1534 #else | |
1535 1936, /* Stack Size increase from 1436 to 1936 2007/5/31 */ | |
1536 #endif | |
1537 10, /* Queue Entries */ | |
1538 205, /* Priority */ | |
1539 NUM_OF_RR_TIMERS, /* number of timer */ | |
1540 /* flags */ | |
1541 #ifdef _TARGET_ | |
1542 #ifdef GPRS | |
1543 PASSIVE_BODY|COPY_BY_REF|TRC_NO_SUSPEND|PRIM_NO_SUSPEND | |
1544 #else | |
1545 PASSIVE_BODY|COPY_BY_REF|TRC_NO_SUSPEND|PRIM_NO_SUSPEND | |
1546 #endif | |
1547 #else | |
1548 PASSIVE_BODY|COPY_BY_REF | |
1549 #endif | |
1550 }; | |
1551 | |
1552 TRACE_FUNCTION ("pei_create()"); | |
1553 | |
1554 /* | |
1555 * Close Resources if open | |
1556 */ | |
1557 | |
1558 #ifdef _SIMULATION_ | |
1559 if (first_access) | |
1560 first_access = FALSE; | |
1561 else | |
1562 pei_exit (); | |
1563 #endif | |
1564 | |
1565 /* | |
1566 * Export startup configuration data | |
1567 */ | |
1568 | |
1569 *info = (T_PEI_INFO *)&pei_info; | |
1570 | |
1571 return PEI_OK; | |
1572 } | |
1573 #endif |