FreeCalypso > hg > freecalypso-citrine
comparison g23m-aci/aci/psa_satf.c @ 0:75a11d740a02
initial import of gsm-fw from freecalypso-sw rev 1033:5ab737ac3ad7
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Thu, 09 Jun 2016 00:02:41 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:75a11d740a02 |
---|---|
1 /* | |
2 +----------------------------------------------------------------------------- | |
3 | Project : GSM-PS (6147) | |
4 | Modul : PSA_SATF | |
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 functions for the protocol | |
18 | stack adapter for the SIM application toolkit. | |
19 +----------------------------------------------------------------------------- | |
20 */ | |
21 | |
22 #include "config.h" | |
23 #include "fixedconf.h" | |
24 #include "condat-features.h" | |
25 #include "aci_conf.h" | |
26 | |
27 #ifdef SIM_TOOLKIT | |
28 | |
29 #ifndef PSA_SATF_C | |
30 #define PSA_SATF_C | |
31 #endif | |
32 | |
33 #include "aci_all.h" | |
34 | |
35 /*==== INCLUDES ===================================================*/ | |
36 #include "aci_cmh.h" | |
37 #include "aci_mem.h" | |
38 | |
39 #ifdef GPRS | |
40 #include "gaci_cmh.h" | |
41 #endif | |
42 | |
43 #ifdef FAX_AND_DATA | |
44 #include "aci_fd.h" | |
45 #endif /* of #ifdef FAX_AND_DATA */ | |
46 | |
47 | |
48 #include "aci.h" | |
49 #include "psa.h" | |
50 #include "psa_cc.h" | |
51 #include "psa_sat.h" | |
52 #include "psa_util.h" | |
53 #include "cmh.h" | |
54 #include "cmh_sat.h" | |
55 | |
56 #include "psa_mm.h" | |
57 #include "psa_ss.h" | |
58 #include "psa_sim.h" | |
59 #include "cmh_cc.h" | |
60 | |
61 #include "ksd.h" | |
62 | |
63 /*==== CONSTANTS ==================================================*/ | |
64 | |
65 #define ITM_WDT (14) /* item width in chars */ | |
66 #define HDR_WDT (10) /* header width in chars */ | |
67 | |
68 /*==== TYPES ======================================================*/ | |
69 | |
70 | |
71 /*==== EXPORT =====================================================*/ | |
72 | |
73 | |
74 /*==== VARIABLES ==================================================*/ | |
75 LOCAL UBYTE ssResPrms[MAXIMUM( sizeof(BUF_res_params_sat), | |
76 MAXIMUM(sizeof(BUF_rej_params_sat), | |
77 sizeof(BUF_err_params_sat)))]; | |
78 | |
79 /*==== FUNCTIONS ==================================================*/ | |
80 | |
81 LOCAL void psaSAT_getTonNpi(CHAR *inSeq, BOOL call_active, | |
82 UBYTE *ton, UBYTE *npi); | |
83 | |
84 | |
85 | |
86 /* | |
87 +-------------------------------------------------------------------+ | |
88 | PROJECT : GSM-PS (6147) MODULE : SAT | | |
89 | ROUTINE : psaSAT_BuildEnvCC | | |
90 +-------------------------------------------------------------------+ | |
91 | |
92 PURPOSE : Build envelope call control command. | |
93 | |
94 */ | |
95 | |
96 GLOBAL void psaSAT_BuildEnvCC ( SHORT cId, | |
97 T_CLPTY_PRM *ss_cldPty, | |
98 T_sat_ussd *ussd, | |
99 T_MNCC_bcconf *ccp1, | |
100 T_MNCC_bcconf *ccp2) | |
101 { | |
102 T_CC_CALL_TBL *pCtbNtry = ccShrdPrm.ctb[cId]; | |
103 UBYTE ton; | |
104 UBYTE npi; | |
105 | |
106 /* | |
107 *------------------------------------------------------------------- | |
108 * build envelope call control command | |
109 *------------------------------------------------------------------- | |
110 */ | |
111 { | |
112 MCAST( env, ENV_CMD ); | |
113 | |
114 memset( env, 0, sizeof( T_ENV_CMD )); | |
115 | |
116 env->v_cc_cmd = TRUE; | |
117 | |
118 /* device identities */ | |
119 env->cc_cmd.v_dev_ids = TRUE; | |
120 env->cc_cmd.dev_ids.src_dev = DEV_SRC_ME; | |
121 env->cc_cmd.dev_ids.dest_dev = DEV_DST_SIM; | |
122 | |
123 if( cId NEQ NO_ENTRY ) | |
124 { | |
125 /* address */ | |
126 env->cc_cmd.v_addr = TRUE; | |
127 | |
128 if( (pCtbNtry->SATinv & SAT_REDIAL_ECCBE) AND | |
129 (rdlPrm.rdlState) ) | |
130 { | |
131 memcpy(&env->cc_cmd.addr, &satRdlCCEnv.addr, sizeof(T_addr)); | |
132 } | |
133 else | |
134 { | |
135 /* address */ | |
136 env->cc_cmd.addr.v_noa = TRUE; | |
137 env->cc_cmd.addr.noa = pCtbNtry->cldPty.ton; | |
138 | |
139 env->cc_cmd.addr.v_npi = TRUE; | |
140 env->cc_cmd.addr.npi = pCtbNtry->cldPty.npi; | |
141 | |
142 env->cc_cmd.addr.c_bcdDigit = pCtbNtry->cldPty.c_called_num; | |
143 memcpy( env->cc_cmd.addr.bcdDigit, | |
144 pCtbNtry->cldPty.called_num, | |
145 pCtbNtry->cldPty.c_called_num ); | |
146 } | |
147 | |
148 #ifdef SIM_TOOLKIT | |
149 if ( !rdlPrm.rdlState ) | |
150 { | |
151 memcpy(&satRdlCCEnv.addr, &env->cc_cmd.addr, sizeof(T_addr)); | |
152 } | |
153 #endif | |
154 | |
155 | |
156 /* capability configuration parameters 1*/ | |
157 if( ccp1 ) | |
158 { | |
159 env->cc_cmd.v_cap_cnf_parms = TRUE; | |
160 env->cc_cmd.cap_cnf_parms.l_cap_cnf_parms = ccp1->bc_len<<3; | |
161 | |
162 memcpy( env->cc_cmd.cap_cnf_parms.b_cap_cnf_parms, ccp1->bc, | |
163 ccp1->bc_len ); | |
164 } | |
165 | |
166 /* capability configuration parameters 2*/ | |
167 if( ccp2 ) | |
168 { | |
169 env->cc_cmd.v_cap_cnf_parms_2 = TRUE; | |
170 env->cc_cmd.cap_cnf_parms_2.l_cap_cnf_parms_2 = ccp2->bc_len<<3; | |
171 | |
172 memcpy( env->cc_cmd.cap_cnf_parms_2.b_cap_cnf_parms_2, ccp2->bc, | |
173 ccp2->bc_len ); | |
174 } | |
175 | |
176 /* If ccp is present in the setUpCall */ | |
177 if ((satShrdPrm.capParm.cntxt EQ CTX_SAT_SETUP) AND satShrdPrm.stk_ccp.l_cap_cnf_parms ) | |
178 { | |
179 env->cc_cmd.v_cap_cnf_parms = TRUE; | |
180 /* Storing the ccp if ECCBE is enabled */ | |
181 if( (ccShrdPrm.ctb[cId]->SATinv & SAT_REDIAL_ECCBE) AND | |
182 (rdlPrm.rdlState) ) | |
183 { | |
184 memcpy(&env->cc_cmd.cap_cnf_parms, &satRdlCCEnv.ccp, sizeof(BUF_cap_cnf_parms)); | |
185 } | |
186 else | |
187 { | |
188 env->cc_cmd.cap_cnf_parms.l_cap_cnf_parms = satShrdPrm.stk_ccp.l_cap_cnf_parms; | |
189 memcpy( env->cc_cmd.cap_cnf_parms.b_cap_cnf_parms, &satShrdPrm.stk_ccp.b_cap_cnf_parms, | |
190 satShrdPrm.stk_ccp.l_cap_cnf_parms ); | |
191 } | |
192 #ifdef SIM_TOOLKIT | |
193 if ( !rdlPrm.rdlState ) | |
194 { | |
195 memcpy( &satRdlCCEnv.ccp, &env->cc_cmd.cap_cnf_parms, sizeof(BUF_cap_cnf_parms)); | |
196 } | |
197 #endif | |
198 } | |
199 | |
200 /* subaddress */ | |
201 if( pCtbNtry->cldPtySub.c_subaddr ) | |
202 { | |
203 env->cc_cmd.v_subaddr = TRUE; | |
204 | |
205 if( (pCtbNtry->SATinv & SAT_REDIAL_ECCBE) AND | |
206 (rdlPrm.rdlState) ) | |
207 { | |
208 memcpy( &env->cc_cmd.subaddr, &satRdlCCEnv.sub_addr, sizeof(T_subaddr) ); | |
209 } | |
210 else | |
211 { | |
212 | |
213 env->cc_cmd.subaddr.v_tos = TRUE; | |
214 env->cc_cmd.subaddr.tos = pCtbNtry->cldPtySub.tos; | |
215 | |
216 env->cc_cmd.subaddr.v_oei = TRUE; | |
217 env->cc_cmd.subaddr.oei = pCtbNtry->cldPtySub.odd_even; | |
218 | |
219 env->cc_cmd.subaddr.c_subadr_str = pCtbNtry->cldPtySub.c_subaddr; | |
220 memcpy( env->cc_cmd.subaddr.subadr_str, pCtbNtry->cldPtySub.subaddr, | |
221 pCtbNtry->cldPtySub.c_subaddr ); | |
222 } | |
223 | |
224 #ifdef SIM_TOOLKIT | |
225 if ( !rdlPrm.rdlState ) | |
226 { | |
227 memcpy( &satRdlCCEnv.sub_addr, &env->cc_cmd.subaddr, sizeof(T_subaddr)); | |
228 } | |
229 #endif | |
230 | |
231 } | |
232 } | |
233 | |
234 else if( ss_cldPty NEQ NULL ) | |
235 { | |
236 /* SS string */ | |
237 env->cc_cmd.v_ss_string = TRUE; | |
238 | |
239 psaSAT_getTonNpi(ss_cldPty->num, FALSE, &ton, &npi); | |
240 | |
241 env->cc_cmd.ss_string.v_noa = TRUE; | |
242 env->cc_cmd.ss_string.noa = ton; | |
243 env->cc_cmd.ss_string.v_npi = TRUE; | |
244 env->cc_cmd.ss_string.npi = npi; | |
245 | |
246 env->cc_cmd.ss_string.c_ss_ctrl_string = | |
247 (UBYTE)utl_dialStr2BCD (ss_cldPty->num, /*ssStr,*/ | |
248 env->cc_cmd.ss_string.ss_ctrl_string, | |
249 MAX_SS_STRING_LEN); | |
250 } | |
251 | |
252 else if( ussd NEQ NULL ) | |
253 { | |
254 /* USSD string */ | |
255 env->cc_cmd.v_ussd_string = TRUE; | |
256 | |
257 env->cc_cmd.ussd_string.dcs = ussd->dcs; | |
258 env->cc_cmd.ussd_string.c_ussd_str = MINIMUM (ussd->c_ussd_str, MAX_SAT_USSD_LEN); | |
259 | |
260 memcpy( env->cc_cmd.ussd_string.ussd_str, | |
261 ussd->ussd_str, | |
262 env->cc_cmd.ussd_string.c_ussd_str); | |
263 } | |
264 | |
265 /* location information */ | |
266 | |
267 /* code MCC */ | |
268 env->cc_cmd.cc_smc_loc_info.mnc_mcc |= ((mmShrdPrm.usedPLMN.mcc[1]<<4) + mmShrdPrm.usedPLMN.mcc[0]) <<16; | |
269 env->cc_cmd.cc_smc_loc_info.mnc_mcc |= ((mmShrdPrm.usedPLMN.mnc[2]<<4) + mmShrdPrm.usedPLMN.mcc[2]) << 8; | |
270 | |
271 /* code MNC */ | |
272 env->cc_cmd.cc_smc_loc_info.mnc_mcc |= (mmShrdPrm.usedPLMN.mnc[1]<<4)+mmShrdPrm.usedPLMN.mnc[0]; | |
273 | |
274 /* code LAC */ | |
275 env->cc_cmd.cc_smc_loc_info.lac = mmShrdPrm.lac; | |
276 | |
277 /* code CID */ | |
278 env->cc_cmd.cc_smc_loc_info.cid = mmShrdPrm.cid; | |
279 | |
280 env->cc_cmd.v_cc_smc_loc_info = TRUE; | |
281 } | |
282 } | |
283 | |
284 | |
285 /* | |
286 +--------------------------------------------------------------------+ | |
287 | PROJECT : GSM-PS (6147) MODULE : psa_sat | | |
288 | STATE : code ROUTINE : psaSAT_getTonNpi | | |
289 +--------------------------------------------------------------------+ | |
290 | |
291 PURPOSE : Get TON and NPI. The SS string in inSeq will be | |
292 decoded to check if it contains a phone number. If | |
293 SS String contains a number, its TON and NPI will be | |
294 returned. Otherwise TON and NPI will be set to FF as | |
295 required in GSM 11.14/GSM 11.11. | |
296 */ | |
297 LOCAL void psaSAT_getTonNpi(CHAR *inSeq, BOOL call_active, | |
298 UBYTE *ton, UBYTE *npi) | |
299 { | |
300 T_KSD_SEQGRP grp; | |
301 CHAR *rest; | |
302 T_KSD_SEQPARAM para; | |
303 CHAR seq[MAX_DIAL_LEN]; | |
304 | |
305 *ton = MNCC_TON_NOT_PRES; | |
306 *npi = MNCC_NPI_NOT_PRES; | |
307 | |
308 strcpy(seq, inSeq); | |
309 | |
310 /* decode sequence */ | |
311 ksd_decode(seq, call_active, &grp, &rest, ¶); | |
312 | |
313 /* analyse TON and NPI */ | |
314 switch( grp ) | |
315 { | |
316 case SEQGRP_CF: | |
317 | |
318 if ( (para.cf.num NEQ NULL) AND (para.cf.num[0] NEQ 0) ) | |
319 { | |
320 *ton = para.cf.ton; | |
321 *npi = para.cf.npi; | |
322 } | |
323 break; | |
324 | |
325 case SEQGRP_DIAL: | |
326 | |
327 if ( ( para.dial.number NEQ NULL ) AND | |
328 ( para.dial.number[0] EQ 0 ) ) | |
329 { | |
330 if ( para.dial.number[0] EQ '+' ) | |
331 { | |
332 *ton = TON_International; | |
333 } | |
334 else | |
335 { | |
336 *ton = TON_Unknown; | |
337 } | |
338 *npi = NPI_IsdnTelephony; | |
339 } | |
340 | |
341 break; | |
342 | |
343 #ifdef SMI | |
344 case SEQGRP_SET_ABBR_DIAL: | |
345 | |
346 if ( (para.abbrDial.number NEQ NULL) AND | |
347 ( para.abbrDial.number[0] EQ 0 ) ) | |
348 { | |
349 if ( para.abbrDial.number[0] EQ '+' ) | |
350 { | |
351 *ton = TON_International; | |
352 } | |
353 else | |
354 { | |
355 *ton = TON_Unknown; | |
356 } | |
357 *npi = NPI_IsdnTelephony; | |
358 } | |
359 break; | |
360 #endif /* SMI */ | |
361 | |
362 default: | |
363 /* Sequence group does not contain number. TON and NPI still set to FF */ | |
364 break; | |
365 } | |
366 } | |
367 | |
368 /* | |
369 +-------------------------------------------------------------------+ | |
370 | PROJECT : GSM-PS (6147) MODULE : SAT | | |
371 | ROUTINE : psaSAT_BuildEnvCB | | |
372 +-------------------------------------------------------------------+ | |
373 | |
374 PURPOSE : Build envelope cell broadcast data download command. | |
375 | |
376 */ | |
377 | |
378 GLOBAL void psaSAT_BuildEnvCB ( UBYTE *cbMsg, SHORT cbLen ) | |
379 { | |
380 | |
381 /* | |
382 *------------------------------------------------------------------- | |
383 * build envelope cell broadcast data download command | |
384 *------------------------------------------------------------------- | |
385 */ | |
386 { | |
387 MCAST( env, ENV_CMD ); | |
388 | |
389 memset( env, 0, sizeof( T_ENV_CMD )); | |
390 | |
391 env->v_cbd_cmd = TRUE; | |
392 | |
393 /* device identities */ | |
394 env->cbd_cmd.v_dev_ids = TRUE; | |
395 env->cbd_cmd.dev_ids.src_dev = DEV_SRC_NTW; | |
396 env->cbd_cmd.dev_ids.dest_dev = DEV_DST_SIM; | |
397 | |
398 /* CB message */ | |
399 env->cbd_cmd.v_cb_page = TRUE; | |
400 env->cbd_cmd.cb_page.l_cb_page = cbLen<<3; | |
401 env->cbd_cmd.cb_page.o_cb_page = 0; | |
402 | |
403 memcpy( env->cbd_cmd.cb_page.b_cb_page, cbMsg, cbLen ); | |
404 } | |
405 } | |
406 | |
407 /* | |
408 +-------------------------------------------------------------------+ | |
409 | PROJECT : GSM-PS (6147) MODULE : SAT | | |
410 | ROUTINE : psaSAT_BuildEnvMoSmCntr | | |
411 +-------------------------------------------------------------------+ | |
412 | |
413 PURPOSE : Build envelope cell broadcast data download command. | |
414 | |
415 */ | |
416 | |
417 GLOBAL void psaSAT_BuildEnvMoSmCntr ( T_rp_addr sc_addr, | |
418 T_tp_da dest_addr ) | |
419 { | |
420 | |
421 /* | |
422 *------------------------------------------------------------------- | |
423 * build envelope | |
424 *------------------------------------------------------------------- | |
425 */ | |
426 { | |
427 MCAST( env, ENV_CMD ); | |
428 | |
429 memset( env, 0, sizeof( T_ENV_CMD )); | |
430 | |
431 env->v_smc_cmd = TRUE; | |
432 | |
433 /* device identities */ | |
434 env->smc_cmd.v_dev_ids = TRUE; | |
435 env->smc_cmd.dev_ids.src_dev = DEV_DST_ME; | |
436 env->smc_cmd.dev_ids.dest_dev = DEV_DST_SIM; | |
437 | |
438 /* short message address */ | |
439 env->smc_cmd.v_sm_addr = TRUE; | |
440 | |
441 env->smc_cmd.sm_addr.v_noa = TRUE; | |
442 env->smc_cmd.sm_addr.noa = sc_addr.ton; | |
443 | |
444 env->smc_cmd.sm_addr.v_npi = TRUE; | |
445 env->smc_cmd.sm_addr.npi = sc_addr.npi; | |
446 | |
447 env->smc_cmd.sm_addr.c_bcdDigit = sc_addr.c_num; | |
448 memcpy(&(env->smc_cmd.sm_addr.bcdDigit[0]), | |
449 &(sc_addr.num[0]), | |
450 sc_addr.c_num /*MAX_SMS_DIGIT_LEN*/); | |
451 | |
452 /* address 2 */ | |
453 env->smc_cmd.v_sm_addr_2 = TRUE; | |
454 | |
455 env->smc_cmd.sm_addr_2.v_noa = TRUE; | |
456 env->smc_cmd.sm_addr_2.noa = dest_addr.ton; | |
457 | |
458 env->smc_cmd.sm_addr_2.v_npi = TRUE; | |
459 env->smc_cmd.sm_addr_2.npi = dest_addr.npi; | |
460 | |
461 env->smc_cmd.sm_addr_2.c_bcdDigit = dest_addr.c_num; | |
462 memcpy(&(env->smc_cmd.sm_addr_2.bcdDigit[0]), | |
463 &(dest_addr.num[0]), | |
464 dest_addr.c_num /*MAX_SMS_DIGIT_LEN*/); | |
465 | |
466 /* location information */ | |
467 | |
468 /* code MCC */ | |
469 env->smc_cmd.cc_smc_loc_info.mnc_mcc |= ((mmShrdPrm.usedPLMN.mcc[1]<<4) + mmShrdPrm.usedPLMN.mcc[0]) <<16; | |
470 env->smc_cmd.cc_smc_loc_info.mnc_mcc |= ((mmShrdPrm.usedPLMN.mnc[2]<<4) + mmShrdPrm.usedPLMN.mcc[2]) << 8; | |
471 | |
472 /* code MNC */ | |
473 env->smc_cmd.cc_smc_loc_info.mnc_mcc |= (mmShrdPrm.usedPLMN.mnc[1]<<4)+mmShrdPrm.usedPLMN.mnc[0]; | |
474 | |
475 /* code LAC */ | |
476 env->smc_cmd.cc_smc_loc_info.lac = mmShrdPrm.lac; | |
477 | |
478 /* code CID */ | |
479 env->smc_cmd.cc_smc_loc_info.cid = mmShrdPrm.cid; | |
480 | |
481 env->smc_cmd.v_cc_smc_loc_info = TRUE; | |
482 | |
483 } | |
484 } | |
485 | |
486 | |
487 | |
488 /* | |
489 +-------------------------------------------------------------------+ | |
490 | PROJECT : GSM-PS (6147) MODULE : SAT | | |
491 | ROUTINE : psaSAT_BuildEnvEventDwn | | |
492 +-------------------------------------------------------------------+ | |
493 | |
494 PURPOSE : Build envelope event download command. | |
495 | |
496 */ | |
497 | |
498 GLOBAL BOOL psaSAT_BuildEnvEventDwn ( UBYTE event, SHORT callId, T_CC_INITIATER actionSrc ) | |
499 { | |
500 T_CC_CALL_TBL * pCtbNtry; /* holds pointer to call table entry */ | |
501 BOOL MT_flag; | |
502 UBYTE trans_id = 0xFF; | |
503 UBYTE ti_flag = 0xFF; /* lint: initialization warning */ | |
504 | |
505 TRACE_FUNCTION("psaSAT_BuildEnvEventDwn()"); | |
506 | |
507 pCtbNtry = ccShrdPrm.ctb[callId]; | |
508 | |
509 /* | |
510 *------------------------------------------------------------------- | |
511 * build envelope | |
512 *------------------------------------------------------------------- | |
513 */ | |
514 { | |
515 MCAST( env, ENV_CMD ); | |
516 | |
517 memset( env, 0, sizeof( T_ENV_CMD )); | |
518 | |
519 env->v_evd_cmd = TRUE; | |
520 | |
521 /* event */ | |
522 env->evd_cmd.v_ev_list = TRUE; | |
523 env->evd_cmd.ev_list.c_event = 1; | |
524 env->evd_cmd.ev_list.event[0] = event; | |
525 | |
526 /* device identities */ | |
527 env->evd_cmd.v_dev_ids = TRUE; | |
528 env->evd_cmd.dev_ids.dest_dev = DEV_DST_SIM; | |
529 switch( actionSrc ) | |
530 { | |
531 case( NEAR_END ): | |
532 env->evd_cmd.dev_ids.src_dev = DEV_SRC_ME; | |
533 break; | |
534 | |
535 case( FAR_END ): | |
536 env->evd_cmd.dev_ids.src_dev = DEV_SRC_NTW; | |
537 break; | |
538 | |
539 default: | |
540 env->evd_cmd.v_dev_ids = FALSE; | |
541 } | |
542 | |
543 if ( event EQ EVENT_MT_CALL OR | |
544 event EQ EVENT_CALL_CONN OR | |
545 event EQ EVENT_CALL_DISC ) | |
546 { | |
547 /* process ti identifier */ | |
548 env->evd_cmd.v_ti_list = TRUE; | |
549 env->evd_cmd.ti_list.c_ti_oct = 1; | |
550 | |
551 MT_flag = pCtbNtry -> ti & 0x08; /* TRUE if MS terminated transaction */ | |
552 trans_id = ( pCtbNtry -> ti) & 0x07; /* see GSM 04.07 ?1.2.3.1.3 */ | |
553 } | |
554 | |
555 switch( event ) | |
556 { | |
557 case( EVENT_MT_CALL ): | |
558 | |
559 /* ti identifier */ | |
560 /* MNCC_SETUP_IND means message sent from the side that originated the TI */ | |
561 env->evd_cmd.ti_list.ti_oct[0].ti = /*lint -e(644) */ trans_id; | |
562 | |
563 /* address */ | |
564 if (pCtbNtry->clgPty.c_num NEQ 0) | |
565 { | |
566 env->evd_cmd.v_addr = TRUE; | |
567 | |
568 env->evd_cmd.addr.v_noa = TRUE; | |
569 env->evd_cmd.addr.noa = pCtbNtry->clgPty.ton; | |
570 | |
571 env->evd_cmd.addr.v_npi = TRUE; | |
572 env->evd_cmd.addr.npi = pCtbNtry->clgPty.npi; | |
573 | |
574 env->evd_cmd.addr.c_bcdDigit = pCtbNtry->clgPty.c_num; | |
575 memcpy(&(env->evd_cmd.addr.bcdDigit[0]), | |
576 &(pCtbNtry->clgPty.num[0]), | |
577 pCtbNtry->clgPty.c_num); | |
578 } | |
579 | |
580 /* called party subaddress */ | |
581 if (pCtbNtry->clgPtySub.c_subaddr NEQ 0) | |
582 { | |
583 env->evd_cmd.v_subaddr = TRUE; | |
584 | |
585 env->evd_cmd.subaddr.v_tos = TRUE; | |
586 env->evd_cmd.subaddr.tos = pCtbNtry -> clgPtySub.tos; | |
587 | |
588 env->evd_cmd.subaddr.v_oei = TRUE; | |
589 env->evd_cmd.subaddr.oei = pCtbNtry -> clgPtySub.odd_even; | |
590 | |
591 env->evd_cmd.subaddr.c_subadr_str = pCtbNtry->clgPtySub.c_subaddr; | |
592 memcpy(&(env->evd_cmd.subaddr.subadr_str[0]), | |
593 &(pCtbNtry->clgPtySub.subaddr[0]), | |
594 pCtbNtry->clgPtySub.c_subaddr); | |
595 } | |
596 break; | |
597 | |
598 | |
599 case( EVENT_CALL_CONN ): | |
600 /* ti identifier */ | |
601 /* MNCC_SETUP_CNF context with MO Call | |
602 or: MNCC_SETUP_RES context with MT Call | |
603 means: message sent to the side that originates the TI */ | |
604 ti_flag = 0x08; | |
605 env->evd_cmd.ti_list.ti_oct[0].ti = trans_id | ti_flag; | |
606 break; | |
607 | |
608 | |
609 case( EVENT_CALL_DISC ): | |
610 /* ti identifier */ | |
611 /* | |
612 means: message sent to the side that originates the TI */ | |
613 switch (actionSrc) | |
614 { | |
615 case( NEAR_END ): | |
616 /* MNCC_REJ_IND / MNCC_DISC_REQ / MNCC_REL_REQ */ | |
617 if ( /*lint -e(644) */ MT_flag ) | |
618 ti_flag = 0x08; | |
619 else | |
620 ti_flag = 0x00; | |
621 break; | |
622 | |
623 case( FAR_END ): | |
624 /* MNCC_DISC_IND / MNCC_REL_IND / MNCC_REL_REQ */ | |
625 if ( MT_flag ) | |
626 ti_flag = 0x00; | |
627 else | |
628 ti_flag = 0x08; | |
629 break; | |
630 } | |
631 env->evd_cmd.ti_list.ti_oct[0].ti = trans_id | ti_flag; | |
632 | |
633 /* Cause */ | |
634 env->evd_cmd.v_cause = TRUE; | |
635 if (pCtbNtry -> numRawCauseBytes EQ 0) | |
636 { | |
637 if (GET_CAUSE_VALUE(pCtbNtry -> rejCs) NEQ NOT_PRESENT_8BIT) /* radio-link failure */ | |
638 { | |
639 env->evd_cmd.cause.c_cs = 0; | |
640 } | |
641 else | |
642 { | |
643 if (GET_CAUSE_VALUE(pCtbNtry -> nrmCs) NEQ NOT_PRESENT_8BIT) | |
644 { | |
645 env->evd_cmd.cause.c_cs = 2; | |
646 | |
647 /*Location is user : 0 and coding standard defined for the GSM PLMNS : 3 */ | |
648 env->evd_cmd.cause.cs[0] =0xE0; | |
649 | |
650 env->evd_cmd.cause.cs[1] = GET_CAUSE_VALUE(pCtbNtry -> nrmCs) |0x80 ; | |
651 } | |
652 else | |
653 { | |
654 env->evd_cmd.v_cause = FALSE; | |
655 } | |
656 } | |
657 } | |
658 else | |
659 { | |
660 env->evd_cmd.cause.c_cs = pCtbNtry -> numRawCauseBytes; | |
661 memcpy( env->evd_cmd.cause.cs, | |
662 pCtbNtry -> rawCauseBytes, | |
663 pCtbNtry -> numRawCauseBytes ); | |
664 } | |
665 break; | |
666 | |
667 | |
668 case( EVENT_LOC_STATUS ): | |
669 env->evd_cmd.v_loc_state = TRUE; | |
670 | |
671 switch( satShrdPrm.locInfo.regStatus ) | |
672 { | |
673 case( NO_VLD_RS ): | |
674 env->evd_cmd.v_loc_state = FALSE; | |
675 break; | |
676 | |
677 case( RS_NO_SRV ): | |
678 env->evd_cmd.loc_state = 0x02; | |
679 break; | |
680 | |
681 case( RS_LMTD_SRV ): | |
682 env->evd_cmd.loc_state = 0x01; | |
683 break; | |
684 | |
685 case( RS_FULL_SRV ): | |
686 env->evd_cmd.loc_state = 0x00; | |
687 | |
688 /*--------------------------------------------------- | |
689 only in this case would location info be included | |
690 ----------------------------------------------------*/ | |
691 | |
692 /* location information */ | |
693 | |
694 /* code MCC */ | |
695 env->evd_cmd.cc_smc_loc_info.mnc_mcc |= | |
696 ((satShrdPrm.locInfo.currPLMN.mcc[1]<<4) + satShrdPrm.locInfo.currPLMN.mcc[0]) <<16; | |
697 env->evd_cmd.cc_smc_loc_info.mnc_mcc |= | |
698 ((satShrdPrm.locInfo.currPLMN.mnc[2]<<4) + satShrdPrm.locInfo.currPLMN.mcc[2]) << 8; | |
699 | |
700 /* code MNC */ | |
701 env->evd_cmd.cc_smc_loc_info.mnc_mcc |= | |
702 (satShrdPrm.locInfo.currPLMN.mnc[1]<<4)+satShrdPrm.locInfo.currPLMN.mnc[0]; | |
703 | |
704 /* code LAC */ | |
705 env->evd_cmd.cc_smc_loc_info.lac = satShrdPrm.locInfo.lac; | |
706 | |
707 /* code CID */ | |
708 env->evd_cmd.cc_smc_loc_info.cid = satShrdPrm.locInfo.cid; | |
709 | |
710 env->evd_cmd.v_cc_smc_loc_info = TRUE; | |
711 | |
712 break; | |
713 } | |
714 | |
715 break; | |
716 | |
717 #ifdef FF_SAT_E | |
718 case( EVENT_CHAN_STAT ): | |
719 env->evd_cmd.v_chan_stat = TRUE; | |
720 env->evd_cmd.chan_stat.chan_id = CHANNEL_ID_1; | |
721 env->evd_cmd.chan_stat.chan_stat_link = LINK_NO_ESTABL; | |
722 env->evd_cmd.chan_stat.chan_stat_inf2 = LINK_DROPPED; | |
723 break; | |
724 #endif /* FF_SAT_E */ | |
725 | |
726 default: | |
727 env->v_evd_cmd = FALSE; | |
728 TRACE_EVENT("wrong event id for SAT event download"); | |
729 break; | |
730 } | |
731 /* | |
732 *------------------------------------------------------------------- | |
733 * check if a call control request is already in progress | |
734 *------------------------------------------------------------------- | |
735 */ | |
736 if( satShrdPrm.SIMCCParm.busy EQ TRUE ) | |
737 { | |
738 /* event has to be queued */ | |
739 T_SAT_QUEUE *p_queue; | |
740 | |
741 if (satShrdPrm.event.c_queued >= MAX_EVENT_QUEUED - 1 ) | |
742 { | |
743 TRACE_EVENT("Too many events have been queued: failed to queue this new event"); | |
744 return FALSE; | |
745 } | |
746 | |
747 p_queue = &satShrdPrm.event.queued[satShrdPrm.event.c_queued - 1]; | |
748 p_queue->owner = (T_OWN)satShrdPrm.owner; | |
749 | |
750 if (p_queue->stk_cmd NEQ NULL) | |
751 { | |
752 MFREE (p_queue->stk_cmd); /* Should not happen */ | |
753 } | |
754 ACI_MALLOC (p_queue->stk_cmd, sizeof (T_stk_cmd)); | |
755 if (psaSAT_STKBuildCmd (p_queue->stk_cmd) < 0) | |
756 { | |
757 ACI_MFREE (p_queue->stk_cmd); | |
758 p_queue->stk_cmd = NULL; | |
759 TRACE_ERROR ("problem encoding SAT cmd"); | |
760 return FALSE; | |
761 } | |
762 satShrdPrm.event.c_queued++; | |
763 } | |
764 return TRUE; | |
765 } | |
766 } | |
767 | |
768 | |
769 | |
770 | |
771 /* | |
772 +-------------------------------------------------------------------+ | |
773 | PROJECT : GSM-PS (6147) MODULE : SAT | | |
774 | ROUTINE : psaSAT_SendTrmResp | | |
775 +-------------------------------------------------------------------+ | |
776 | |
777 PURPOSE : Send a terminal response for a previous SAT command. | |
778 | |
779 */ | |
780 | |
781 GLOBAL void psaSAT_InitTrmResp ( T_ACI_SAT_TERM_RESP *init_resp ) | |
782 { | |
783 init_resp->addLen = 0; | |
784 init_resp->add = NULL; | |
785 init_resp->add_content = 0; | |
786 init_resp->resCC = NULL; | |
787 init_resp->text = NULL; | |
788 init_resp->at_resp = NULL; | |
789 init_resp->at_resp_count = 0; | |
790 #ifdef FF_SAT_E | |
791 init_resp->chnStat = FALSE; | |
792 init_resp->bearDesc = FALSE; | |
793 init_resp->bufSize = FALSE; | |
794 #endif /* FF_SAT_E */ | |
795 memset (init_resp->dtt_buf, 0xFF, TIME_STAMP_LENGTH); | |
796 memset (init_resp->lang, 0xFF, CLAN_CODE_LEN); | |
797 } | |
798 | |
799 LOCAL void sat_build_cc_action_resp(UBYTE rspId, | |
800 UBYTE addLen, | |
801 UBYTE *add, | |
802 UBYTE *resCC, | |
803 T_TERM_RESP *res) | |
804 { | |
805 UBYTE byteLen; /* holds byte length */ | |
806 UBYTE *p; /* byte pointer */ | |
807 | |
808 if( satShrdPrm.stkCnfPrim OR resCC ) | |
809 { | |
810 p = (resCC)? resCC : satShrdPrm.stkCnfPrim->stk_cmd.cmd; | |
811 | |
812 if( p[1] EQ 0x81 ) | |
813 { | |
814 byteLen = p[2]; | |
815 p = &p[3]; | |
816 } | |
817 else | |
818 { | |
819 byteLen = p[1]; | |
820 p = &p[2]; | |
821 } | |
822 | |
823 res->v_cc_req_act = TRUE; | |
824 res->cc_req_act.l_cc_req_act = byteLen<<3; | |
825 memcpy( res->cc_req_act.b_cc_req_act, p, byteLen ); | |
826 | |
827 /* result 2 */ | |
828 res->v_res_2 = TRUE; | |
829 res->res_2.gen = res->res.gen; | |
830 | |
831 /* adjust first result according to second result (GSM 11.14 / 9.1) */ | |
832 if( rspId <= 0x1F ) | |
833 | |
834 res->res.gen = RSLT_PERF_MDFY_SIM; | |
835 | |
836 else if( rspId >= 0x20 AND rspId <= 0x2F ) | |
837 | |
838 res->res.gen = RSLT_CC_SIM_TMP; | |
839 | |
840 else if( rspId >= 0x30 AND rspId <= 0x3F ) | |
841 { | |
842 res->res.gen = RSLT_CC_SIM_PRM; | |
843 res->res.v_add = TRUE; | |
844 res->res.add.l_add = 8; | |
845 res->res.add.b_add[0] = ADD_CC_REQ_CHNG; | |
846 } | |
847 if( addLen ) | |
848 { | |
849 if( res->res.gen NEQ RSLT_CC_SIM_PRM ) res->res.v_add = FALSE; | |
850 res->res_2.v_add = TRUE; | |
851 res->res_2.add.l_add = addLen<<3; | |
852 memcpy( res->res_2.add.b_add, | |
853 add, | |
854 addLen ); | |
855 } | |
856 | |
857 /* free the primitive */ | |
858 if( satShrdPrm.stkCnfPrim ) | |
859 { | |
860 PFREE( satShrdPrm.stkCnfPrim ); | |
861 satShrdPrm.stkCnfPrim = NULL; | |
862 } | |
863 } | |
864 } | |
865 | |
866 GLOBAL BOOL psaSAT_SendTrmResp ( UBYTE rspId, | |
867 T_ACI_SAT_TERM_RESP *data_for_term_resp) | |
868 { | |
869 TRACE_FUNCTION("psaSAT_SendTrmResp()"); | |
870 | |
871 /* | |
872 *------------------------------------------------------------------- | |
873 * build terminal response | |
874 *------------------------------------------------------------------- | |
875 */ | |
876 CCD_START; | |
877 { | |
878 MCAST( res, TERM_RESP ); | |
879 | |
880 memset( res, 0, sizeof( T_TERM_RESP )); | |
881 | |
882 /* init of data_for_term_resp */ | |
883 /* return network error cause GSM 11.14 / 12.12.3 (it's mandatory) */ | |
884 if( ( data_for_term_resp->add_content NEQ 0 ) OR | |
885 ( rspId EQ RSLT_NTW_UNAB_PROC ) ) | |
886 { | |
887 data_for_term_resp->add = &(data_for_term_resp->add_content); | |
888 data_for_term_resp->addLen = 1; | |
889 } | |
890 | |
891 /* device identities */ | |
892 res->v_cmd_details = TRUE; | |
893 res->cmd_details.cmd_nr = satShrdPrm.cmdDet.cmdNr; | |
894 res->cmd_details.cmd_typ = satShrdPrm.cmdDet.cmdType; | |
895 res->cmd_details.cmd_qlf = satShrdPrm.cmdDet.cmdQlf; | |
896 | |
897 /* device identities */ | |
898 res->v_dev_ids = TRUE; | |
899 res->dev_ids.src_dev = DEV_SRC_ME; | |
900 res->dev_ids.dest_dev = DEV_DST_SIM; | |
901 | |
902 /* result */ | |
903 res->v_res = TRUE; | |
904 res->res.gen = (rspId EQ RSLT_PERF_SUCCESS AND cmpFlg)? | |
905 RSLT_PERF_PART_CMPR:rspId; | |
906 if( data_for_term_resp->addLen ) | |
907 { | |
908 res->res.v_add = TRUE; | |
909 res->res.add.l_add = data_for_term_resp->addLen<<3; | |
910 memcpy( res->res.add.b_add, data_for_term_resp->add, data_for_term_resp->addLen ); | |
911 } | |
912 | |
913 /* call control requested action */ | |
914 sat_build_cc_action_resp( rspId, | |
915 data_for_term_resp->addLen, | |
916 data_for_term_resp->add, | |
917 data_for_term_resp->resCC, | |
918 res ); | |
919 | |
920 /* USSD related terminal response */ | |
921 if( data_for_term_resp->text NEQ NULL ) | |
922 { | |
923 res->v_text = TRUE; | |
924 res->text.dcs = data_for_term_resp->text->dcs; | |
925 res->text.c_text_str = data_for_term_resp->text->c_text_str; | |
926 memcpy( &(res->text.text_str), | |
927 data_for_term_resp->text->text_str, | |
928 data_for_term_resp->text->c_text_str); | |
929 } | |
930 | |
931 /* Run AT related terminal response */ | |
932 if( data_for_term_resp->at_resp NEQ NULL ) | |
933 { | |
934 res->v_at_resp = TRUE; | |
935 | |
936 memcpy( res->at_resp.text_str, | |
937 data_for_term_resp->at_resp, | |
938 data_for_term_resp->at_resp_count ); | |
939 | |
940 res->at_resp.c_text_str = (UBYTE)data_for_term_resp->at_resp_count; | |
941 } | |
942 | |
943 /* | |
944 Provide Local Information (date, time and time zone) | |
945 related terminal response | |
946 */ | |
947 if( data_for_term_resp->dtt_buf[0] NEQ 0xFF) | |
948 { | |
949 res->v_dtt = TRUE; | |
950 | |
951 memcpy( res->dtt.text_str, | |
952 data_for_term_resp->dtt_buf, | |
953 TIME_STAMP_LENGTH ); | |
954 | |
955 res->dtt.c_text_str = (UBYTE)TIME_STAMP_LENGTH; | |
956 } | |
957 | |
958 /* | |
959 Provide Local Information (Language Setting) | |
960 */ | |
961 | |
962 if( data_for_term_resp->lang[0] NEQ 0xFF) | |
963 { | |
964 res->v_lang = TRUE; | |
965 | |
966 memcpy( res->lang.lang_buf, | |
967 data_for_term_resp->lang, | |
968 CLAN_CODE_LEN ); | |
969 | |
970 res->lang.c_lang_buf = (UBYTE)CLAN_CODE_LEN; | |
971 } | |
972 | |
973 #ifdef FF_SAT_E | |
974 /* add channel status to terminal response */ | |
975 if( data_for_term_resp->chnStat NEQ FALSE ) | |
976 { | |
977 /* restricted to only one channel for class e */ | |
978 res->v_chan_stat = TRUE; | |
979 res->c_chan_stat = 1; | |
980 res->chan_stat[0].chan_id = CHANNEL_ID_1; | |
981 | |
982 res->chan_stat[0].chan_stat_inf2 = NO_FURTH_INFO; | |
983 res->chan_stat[0].chan_stat_link = LINK_NO_ESTABL; | |
984 | |
985 if( satShrdPrm.chnTb.chnUsdFlg ) | |
986 { | |
987 switch( satShrdPrm.chnTb.lnkStat ) | |
988 { | |
989 case( SIM_LINK_CNCT ): | |
990 | |
991 res->chan_stat[0].chan_stat_link = LINK_ESTABL; | |
992 break; | |
993 | |
994 case( SIM_LINK_DROP ): | |
995 | |
996 res->chan_stat[0].chan_stat_inf2 = LINK_DROPPED; | |
997 break; | |
998 | |
999 default: /* already handled by pre-setting */ | |
1000 | |
1001 break; | |
1002 } | |
1003 } | |
1004 } | |
1005 /* add bearer description to terminal response */ | |
1006 if( data_for_term_resp->bearDesc NEQ FALSE AND satShrdPrm.opchPrm ) | |
1007 { | |
1008 if( satShrdPrm.opchType EQ B_CSD ) | |
1009 { | |
1010 res->v_bear_desc = TRUE; | |
1011 res->bear_desc.bear_type = BT_CSD; | |
1012 res->bear_desc.v_csd_bear_prm = TRUE; | |
1013 res->bear_desc.csd_bear_prm = ((T_SAT_CSD_PRM*)satShrdPrm.opchPrm)->csd_bear_prm; | |
1014 } | |
1015 if( satShrdPrm.opchType EQ B_GPRS ) | |
1016 { | |
1017 res->v_bear_desc = TRUE; | |
1018 res->bear_desc.bear_type = BT_GPRS; | |
1019 res->bear_desc.v_gprs_bear_prm = TRUE; | |
1020 res->bear_desc.gprs_bear_prm = ((T_SAT_GPRS_PRM*)satShrdPrm.opchPrm)->gprs_bear_prm; | |
1021 } | |
1022 } | |
1023 /* add buffer size to terminal response */ | |
1024 if( data_for_term_resp->bufSize NEQ FALSE ) | |
1025 { | |
1026 res->v_buffer_size = TRUE; | |
1027 res->buffer_size = satShrdPrm.buffer_size; | |
1028 } | |
1029 #endif /* FF_SAT_E */ | |
1030 | |
1031 cmpFlg = FALSE; | |
1032 } | |
1033 | |
1034 /* | |
1035 *------------------------------------------------------------------- | |
1036 * send terminal response | |
1037 *------------------------------------------------------------------- | |
1038 */ | |
1039 satShrdPrm.owner = OWN_SRC_INV; | |
1040 | |
1041 satShrdPrm.ownSAT = FALSE; | |
1042 memset( &satShrdPrm.stk_ccp, 0, sizeof(BUF_cap_cnf_parms)); | |
1043 | |
1044 | |
1045 #ifdef TI_PS_FF_AT_P_CMD_CUST | |
1046 if (satShrdPrm.cust1StkCmd != (void *)0) | |
1047 { | |
1048 ACI_MFREE(satShrdPrm.cust1StkCmd); /* Free the dynamically allocated Cust1 Stk Cmd memory */ | |
1049 | |
1050 satShrdPrm.cust1StkCmd = (void *)0; | |
1051 satShrdPrm.cust1StkCmdLen = 0; | |
1052 } | |
1053 #endif /* TI_PS_FF_AT_P_CMD_CUST */ | |
1054 | |
1055 if( psaSAT_STKResponse() < 0 ) /* STK command response */ | |
1056 { | |
1057 TRACE_EVENT( "FATAL RETURN SAT in send term resp" ); | |
1058 CCD_END; | |
1059 return( FALSE ); | |
1060 } | |
1061 | |
1062 CCD_END; | |
1063 return (TRUE); | |
1064 } | |
1065 | |
1066 /* | |
1067 +-------------------------------------------------------------------+ | |
1068 | PROJECT : GSM-PS (6147) MODULE : PSA_SATF | | |
1069 | ROUTINE : psaSAT_dasmMECmd | | |
1070 +-------------------------------------------------------------------+ | |
1071 | |
1072 PURPOSE : disassemble ME proactive SIM command. | |
1073 */ | |
1074 | |
1075 GLOBAL BOOL psaSAT_dasmMECmd ( BUF_cmd_prms *cmdPrm ) | |
1076 { | |
1077 UBYTE ccdRet, err; | |
1078 T_ACI_SAT_TERM_RESP resp_data; | |
1079 | |
1080 BOOL aciOnlyEvents; /* holds information whether only ACI events are in SET UP | |
1081 EVENT LIST */ | |
1082 BOOL sendRes; /* holds temporaly return result whether to send response | |
1083 or not */ | |
1084 | |
1085 /* response message in the case of SET UP EVENT LIST, only ACI events */ | |
1086 static UBYTE TRSetEventOk [12] = | |
1087 { | |
1088 0x81, /* command details tag */ | |
1089 0x03, /* command details length */ | |
1090 0x00, /* will be updated to current cmd num */ | |
1091 0x05, /* command SETUP EVENT LIST */ | |
1092 0x00, /* not used */ | |
1093 0x82, /* device details tag */ | |
1094 0x02, /* device details length */ | |
1095 0x82, /* source ME */ | |
1096 0x81, /* destination SIM */ | |
1097 0x83, /* result tag */ | |
1098 0x01, /* result length */ | |
1099 0x00 /* result OK */ | |
1100 }; | |
1101 | |
1102 TRACE_FUNCTION("psaSAT_dasmMECmd"); | |
1103 | |
1104 psaSAT_InitTrmResp( &resp_data ); | |
1105 | |
1106 #ifdef TI_PS_FF_AT_P_CMD_CUST | |
1107 if ((satShrdPrm.cmdDet.cmdType NEQ SAT_CMD_EVENT_LIST) AND /* ACI has to process the event before */ | |
1108 (simShrdPrm.overall_cust_mode EQ (UBYTE)CUST_NORMAL_BEHAVIOUR)) /* and NOT Cust1 behaviour */ | |
1109 #else | |
1110 if (satShrdPrm.cmdDet.cmdType NEQ SAT_CMD_EVENT_LIST) | |
1111 #endif /* TI_PS_FF_AT_P_CMD_CUST */ | |
1112 cmhSAT_STKUsrNtfy(); | |
1113 | |
1114 if( cmdPrm EQ NULL ) /* no parameter */ | |
1115 { | |
1116 memset(&satShrdPrm.stkCmdPrm, 0, | |
1117 sizeof(satShrdPrm.stkCmdPrm)); | |
1118 } | |
1119 else | |
1120 { | |
1121 memcpy( &satShrdPrm.stkCmdPrm, cmdPrm, | |
1122 sizeof(satShrdPrm.stkCmdPrm)); | |
1123 | |
1124 ccdRet = ccd_decodeMsg (CCDENT_SAT, | |
1125 DOWNLINK, | |
1126 (T_MSGBUF *) &satShrdPrm.stkCmdPrm, | |
1127 (UBYTE *) _decodedMsg, | |
1128 satShrdPrm.cmdDet.cmdType ); | |
1129 | |
1130 /* check for CCD error */ | |
1131 if( ccdRet NEQ ccdOK ) | |
1132 { | |
1133 TRACE_EVENT_P1( "CCD Decoding Error: %d", ccdRet ); | |
1134 | |
1135 err = psaSAT_ccdErrChk(); | |
1136 if( err NEQ 0 ) | |
1137 { | |
1138 psaSAT_SendTrmResp( err, &resp_data ); | |
1139 return( FALSE ); | |
1140 } | |
1141 } | |
1142 } | |
1143 | |
1144 /* continue processing */ | |
1145 switch( satShrdPrm.cmdDet.cmdType ) | |
1146 { | |
1147 case( SAT_CMD_SETUP_CALL ): | |
1148 { | |
1149 MCAST( calCmd, SETUP_CALL ); | |
1150 | |
1151 return( cmhSAT_setupCall( calCmd )); | |
1152 } | |
1153 | |
1154 case( SAT_CMD_SEND_SS ): | |
1155 { | |
1156 MCAST( ssCmd, SEND_SS ); | |
1157 | |
1158 return( cmhSAT_sendSS( ssCmd )); | |
1159 } | |
1160 | |
1161 case( SAT_CMD_SEND_USSD ): | |
1162 { | |
1163 MCAST( ussdCmd, SEND_USSD ); | |
1164 | |
1165 return( cmhSAT_sendUSSD( ussdCmd )); | |
1166 } | |
1167 | |
1168 case( SAT_CMD_SEND_SMS ): | |
1169 { | |
1170 MCAST( smCmd, SEND_SM ); | |
1171 | |
1172 return( cmhSAT_sendSM( smCmd )); | |
1173 } | |
1174 | |
1175 case( SAT_CMD_SEND_DTMF ): | |
1176 { | |
1177 MCAST( dtmfCmd, SEND_DTMF ); | |
1178 | |
1179 return( cmhSAT_sendDTMF( dtmfCmd )); | |
1180 } | |
1181 | |
1182 case( SAT_CMD_EVENT_LIST ): | |
1183 { | |
1184 MCAST( setEvent, SETUP_EVENT ); | |
1185 | |
1186 if (cmhSAT_setupEvent_Test( setEvent, &aciOnlyEvents )) | |
1187 { | |
1188 /* ACI-SPR-18200: If there are no Events to be processed by MMI | |
1189 ACI bypasses the MMI functionality and returns TR by itself */ | |
1190 | |
1191 /* something went wrong, temp event list is empty --> TR(30) */ | |
1192 if ( satShrdPrm.event.temp_list EQ 0L ) | |
1193 { | |
1194 psaSAT_SendTrmResp( RSLT_PERF_SUCCESS, &resp_data ); | |
1195 return FALSE; | |
1196 } | |
1197 | |
1198 if ( aciOnlyEvents ) | |
1199 { | |
1200 /* prepare response to signal OK to SATK */ | |
1201 TRSetEventOk[2] = satShrdPrm.cmdDet.cmdNr; | |
1202 satShrdPrm.setPrm[satShrdPrm.owner].stkCmd = TRSetEventOk; | |
1203 satShrdPrm.setPrm[satShrdPrm.owner].stkCmdLen = 12; | |
1204 | |
1205 /* inform SIM about acknowledged event list */ | |
1206 sendRes = cmhSAT_CheckSetEventResp( ); | |
1207 | |
1208 if (sendRes) | |
1209 { | |
1210 if( psaSAT_STKResponse() < 0 ) /* respond to STK command */ | |
1211 { | |
1212 TRACE_EVENT( "FATAL RETURN - TR could not be send" ); | |
1213 } | |
1214 } | |
1215 } | |
1216 else /* signal MMI to process further events */ | |
1217 { | |
1218 cmhSAT_STKCmdInd(); | |
1219 } | |
1220 return TRUE; | |
1221 } | |
1222 else | |
1223 { | |
1224 if ( satShrdPrm.event.temp_list NEQ 0L ) | |
1225 { | |
1226 satShrdPrm.event.temp_list = 0L; /* reinitialize temp_event_list */ | |
1227 psaSAT_SendTrmResp( RSLT_ME_CAP, &resp_data ); | |
1228 } | |
1229 } | |
1230 } | |
1231 break; | |
1232 | |
1233 case( SAT_CMD_RUN_AT ): | |
1234 { | |
1235 MCAST( calCmd, RUN_AT ); | |
1236 | |
1237 return( cmhSAT_runAt( calCmd )); | |
1238 } | |
1239 | |
1240 case( SAT_CMD_LAUNCH_BROWSER ): | |
1241 { | |
1242 MCAST( launchBrowserCmd, LAUNCH_BROWSER ); | |
1243 | |
1244 return( cmhSAT_launchBrowser( launchBrowserCmd )); | |
1245 } | |
1246 | |
1247 case( SAT_CMD_PROV_LOC_INFO): | |
1248 { | |
1249 return( cmhSAT_provLocalInfo()); | |
1250 } | |
1251 #ifdef FF_SAT_E | |
1252 case( SAT_CMD_OPEN_CHANNEL ): | |
1253 { | |
1254 MCAST( opchCmd, OPEN_CHANNEL ); | |
1255 | |
1256 return( cmhSAT_OpenChannelReq( opchCmd )); | |
1257 } | |
1258 #endif /* FF_SAT_E */ | |
1259 } | |
1260 return( FALSE ); | |
1261 } | |
1262 | |
1263 /* | |
1264 +-------------------------------------------------------------------+ | |
1265 | PROJECT : GSM-PS (6147) MODULE : PSA_SATF | | |
1266 | ROUTINE : psaSAT_SSResComp | | |
1267 +-------------------------------------------------------------------+ | |
1268 | |
1269 PURPOSE : SS result component handling. | |
1270 */ | |
1271 | |
1272 GLOBAL void psaSAT_SSResComp ( T_res_comp* resCmp ) | |
1273 { | |
1274 UBYTE addLen = 0; | |
1275 T_ACI_SAT_TERM_RESP resp_data; | |
1276 | |
1277 psaSAT_InitTrmResp( &resp_data ); | |
1278 | |
1279 /* Add the operation code and parameters to terminal response | |
1280 (reference: section 12.12.1 "Additional information for SEND SS" of 11.14) | |
1281 */ | |
1282 if( resCmp -> v_sequence AND | |
1283 resCmp -> sequence.v_op_code ) | |
1284 { | |
1285 ssResPrms[0] = resCmp -> sequence.op_code; | |
1286 | |
1287 if( resCmp -> sequence.params.l_params ) | |
1288 { | |
1289 addLen = resCmp -> sequence.params.l_params >> 3; | |
1290 | |
1291 memcpy( &ssResPrms[1], resCmp -> sequence.params.b_params, addLen); | |
1292 } | |
1293 ++addLen; | |
1294 } | |
1295 resp_data.add = ssResPrms; | |
1296 resp_data.addLen = addLen; | |
1297 | |
1298 psaSAT_SendTrmResp( RSLT_PERF_SUCCESS, &resp_data ); | |
1299 } | |
1300 | |
1301 /* | |
1302 +-------------------------------------------------------------------+ | |
1303 | PROJECT : GSM-PS (6147) MODULE : PSA_SATF | | |
1304 | ROUTINE : psaSAT_SSErrComp | | |
1305 +-------------------------------------------------------------------+ | |
1306 | |
1307 PURPOSE : SS error result component handling. | |
1308 */ | |
1309 | |
1310 GLOBAL void psaSAT_SSErrComp ( T_fac_inf* errCmp, BOOL is_fac_ussd ) | |
1311 { | |
1312 UBYTE ccdRet; | |
1313 UBYTE addLen = 1; | |
1314 T_ACI_SAT_TERM_RESP resp_data; | |
1315 | |
1316 MCAST( com, COMP_SAT ); | |
1317 | |
1318 TRACE_FUNCTION("psaSAT_SSErrComp()"); | |
1319 | |
1320 psaSAT_InitTrmResp( &resp_data ); | |
1321 *ssResPrms = ADD_NO_CAUSE; | |
1322 | |
1323 memset( com, 0, sizeof( T_COMP_SAT )); | |
1324 | |
1325 ccdRet = ccd_decodeMsg (CCDENT_FAC, | |
1326 DOWNLINK, | |
1327 (T_MSGBUF *) errCmp, | |
1328 (UBYTE *) _decodedMsg, | |
1329 COMP_SAT); | |
1330 | |
1331 if( ccdRet NEQ ccdOK ) | |
1332 { | |
1333 TRACE_EVENT_P1("CCD Decoding Error: %d",ccdRet ); | |
1334 } | |
1335 else | |
1336 { | |
1337 if( com->err_comp_sat.err_desc_sat.err_params_sat. | |
1338 l_err_params_sat ) | |
1339 { | |
1340 addLen = com->err_comp_sat.err_desc_sat.err_params_sat. | |
1341 l_err_params_sat >> 3; | |
1342 | |
1343 memcpy( ssResPrms,com->err_comp_sat.err_desc_sat.err_params_sat. | |
1344 b_err_params_sat, addLen ); | |
1345 } | |
1346 } | |
1347 resp_data.add = ssResPrms; | |
1348 resp_data.addLen = addLen; | |
1349 | |
1350 if( is_fac_ussd ) | |
1351 { | |
1352 psaSAT_SendTrmResp( RSLT_USSD_ERR, &resp_data ); | |
1353 } | |
1354 else | |
1355 { | |
1356 psaSAT_SendTrmResp( RSLT_SS_ERR, &resp_data ); | |
1357 } | |
1358 } | |
1359 | |
1360 /* | |
1361 +-------------------------------------------------------------------+ | |
1362 | PROJECT : GSM-PS (6147) MODULE : PSA_SATF | | |
1363 | ROUTINE : psaSAT_SSRejComp | | |
1364 +-------------------------------------------------------------------+ | |
1365 | |
1366 PURPOSE : SS reject component handling. | |
1367 */ | |
1368 | |
1369 GLOBAL void psaSAT_SSRejComp ( UBYTE cRejectInfo ) | |
1370 { | |
1371 UBYTE addLen = 1; | |
1372 T_ACI_SAT_TERM_RESP resp_data; | |
1373 | |
1374 TRACE_FUNCTION("psaSAT_SSRejComp()"); | |
1375 | |
1376 psaSAT_InitTrmResp( &resp_data ); | |
1377 *ssResPrms = ADD_NO_CAUSE; | |
1378 | |
1379 resp_data.add = ssResPrms; | |
1380 resp_data.addLen = addLen; | |
1381 | |
1382 psaSAT_SendTrmResp( cRejectInfo, &resp_data ); | |
1383 } | |
1384 | |
1385 /* | |
1386 +-------------------------------------------------------------------+ | |
1387 | PROJECT : GSM-PS (6147) MODULE : PSA_SATF | | |
1388 | ROUTINE : psaSAT_ss_end_ind | | |
1389 +-------------------------------------------------------------------+ | |
1390 | |
1391 PURPOSE : handles SAT responses to SAT after a SAT originated SS. | |
1392 */ | |
1393 | |
1394 GLOBAL T_ACI_RETURN psaSAT_ss_end_ind ( SHORT sId, | |
1395 T_COMPONENT *com, | |
1396 T_MNSS_END_IND *mnss_end_ind, | |
1397 BOOL is_fac_ussd ) | |
1398 { | |
1399 TRACE_FUNCTION("psaSAT_ss_end_ind()"); | |
1400 | |
1401 if( com->v_res_comp ) | |
1402 { | |
1403 if( is_fac_ussd EQ FALSE ) /* not for USSD !! */ | |
1404 { | |
1405 //TISH, patch for ASTec20762 | |
1406 //start | |
1407 psaSS_dasmResultCmp( sId, &com->res_comp ); | |
1408 //end | |
1409 psaSAT_SSResComp( &com->res_comp ); | |
1410 } | |
1411 else | |
1412 { | |
1413 psaSS_dasmResultCmp( sId, &com->res_comp ); | |
1414 } | |
1415 return( AT_EXCT ); | |
1416 } | |
1417 | |
1418 if( com->v_err_comp ) | |
1419 { | |
1420 ssShrdPrm.stb[sId].failType = SSF_SS_ERR; | |
1421 psaSAT_SSErrComp( &mnss_end_ind -> fac_inf, is_fac_ussd ); | |
1422 return( AT_FAIL ); | |
1423 } | |
1424 | |
1425 if( com->v_rej_comp ) | |
1426 { | |
1427 UBYTE cRejectInfo = RSLT_NTW_UNAB_PROC; | |
1428 | |
1429 /* check for protocol incompatibility for USSD */ | |
1430 if ( (is_fac_ussd) AND | |
1431 (com->rej_comp.v_inv_problem) ) | |
1432 { | |
1433 switch( com->rej_comp.inv_problem ) | |
1434 { | |
1435 case 0x01 : /* invoke problem code #1 */ | |
1436 { | |
1437 if (psaSS_asmUSSDProt1(sId)) | |
1438 { | |
1439 /* facility with Protocole 1 format has been sent: wait for answer */ | |
1440 return( AT_CMPL ); | |
1441 } | |
1442 cRejectInfo = RSLT_NTW_UNAB_PROC; | |
1443 break; | |
1444 } | |
1445 case 0x02 : /* invoke problem code #2 */ | |
1446 { | |
1447 cRejectInfo = RSLT_USSD_ERR; | |
1448 break; | |
1449 } | |
1450 default : | |
1451 { | |
1452 TRACE_EVENT_P1("psaSAT_ss_end_ind(): unknown invoke problem: %x", com->rej_comp.inv_problem ); | |
1453 break; | |
1454 } | |
1455 } | |
1456 ssShrdPrm.stb[sId].failType = SSF_INV_PRB; | |
1457 } | |
1458 | |
1459 /* check for protocol incompatibility for USSD */ | |
1460 if ((is_fac_ussd EQ FALSE) AND (com->rej_comp.v_gen_problem)) | |
1461 { | |
1462 ssShrdPrm.stb[sId].failType = SSF_GEN_PRB; | |
1463 /* for 27.22.4.11.1 Seq. 1.3 SEND SS */ | |
1464 if (com->rej_comp.gen_problem EQ GEN_PROB_UNRECOG_CMP) | |
1465 { | |
1466 cRejectInfo = RSLT_SS_ERR; | |
1467 } | |
1468 } | |
1469 | |
1470 psaSAT_SSRejComp( cRejectInfo ); | |
1471 return( AT_FAIL ); | |
1472 } | |
1473 return(AT_FAIL); | |
1474 } | |
1475 | |
1476 /* | |
1477 +-------------------------------------------------------------------+ | |
1478 | PROJECT : GSM-PS (6147) MODULE : PSA_SATF | | |
1479 | ROUTINE : psaSAT_ccdErrChk | | |
1480 +-------------------------------------------------------------------+ | |
1481 | |
1482 PURPOSE : CCD error checking. The function returns a SAT result | |
1483 value unequal to 0 if the operation is must be terminated. | |
1484 Otherwise the condition is only a warning and the operation | |
1485 should be proceeded. | |
1486 */ | |
1487 | |
1488 GLOBAL UBYTE psaSAT_ccdErrChk ( void ) | |
1489 { | |
1490 USHORT parLst[MAX_ERR_PAR]; | |
1491 UBYTE ccdErr; | |
1492 UBYTE fstFlg = TRUE; | |
1493 | |
1494 TRACE_FUNCTION("psaSAT_ccdErrChk()"); | |
1495 | |
1496 /* | |
1497 *------------------------------------------------------------------- | |
1498 * handling of first error | |
1499 *------------------------------------------------------------------- | |
1500 */ | |
1501 do | |
1502 { | |
1503 memset (parLst,0, sizeof (parLst)); | |
1504 | |
1505 if( fstFlg ) | |
1506 { | |
1507 ccdErr = ccd_getFirstError (CCDENT_SAT, parLst); | |
1508 fstFlg = FALSE; | |
1509 } | |
1510 else | |
1511 | |
1512 ccdErr = ccd_getNextError (CCDENT_SAT, parLst); | |
1513 | |
1514 switch (ccdErr) | |
1515 { | |
1516 case( ERR_IE_NOT_EXPECTED ): /* unexpected element */ | |
1517 if( !((UBYTE)parLst[0] & 0x80) ) | |
1518 { | |
1519 cmpFlg = TRUE; | |
1520 break; | |
1521 } | |
1522 /* otherwise continue, no break */ | |
1523 /*lint -fallthrough*/ | |
1524 case( ERR_COMPREH_REQUIRED ): /* comprehension required */ | |
1525 | |
1526 return( RSLT_UNKN_DATA ); | |
1527 | |
1528 case( ERR_MAND_ELEM_MISS ): /* mandatory elements missing */ | |
1529 | |
1530 return( RSLT_ERR_REQ_VAL ); | |
1531 } | |
1532 } while( ccdErr NEQ ERR_NO_MORE_ERROR ); | |
1533 | |
1534 return( 0 ); | |
1535 } | |
1536 | |
1537 /* | |
1538 +-------------------------------------------------------------------+ | |
1539 | PROJECT : GSM-PS (6147) MODULE : PSA_SAT | | |
1540 | ROUTINE : psaSAT_DumpCmd | | |
1541 +-------------------------------------------------------------------+ | |
1542 | |
1543 PURPOSE : Dump SAT command to debug output. | |
1544 | |
1545 */ | |
1546 | |
1547 GLOBAL void psaSAT_DumpCmd ( T_stk_cmd * cmd ) | |
1548 { | |
1549 #define SAT_TRC_LEN 32 | |
1550 | |
1551 CHAR strBuf[2*SAT_TRC_LEN+1]; /* holds string buffer */ | |
1552 ULONG idx, cnt, mcnt; /* buffer index */ | |
1553 CHAR *pDest; /* points to destination */ | |
1554 | |
1555 TRACE_FUNCTION("psaSAT_DumpCmd()"); | |
1556 | |
1557 /* | |
1558 *------------------------------------------------------------------- | |
1559 * format command | |
1560 *------------------------------------------------------------------- | |
1561 */ | |
1562 TRACE_EVENT( "SAT CMD SENT/RECEIVED:" ); | |
1563 | |
1564 mcnt = (ULONG)cmd->l_cmd >> 3; | |
1565 | |
1566 if( !mcnt ) | |
1567 { | |
1568 TRACE_EVENT_P1("an empty envelope. (%d)", (ULONG)cmd->l_cmd); | |
1569 return; | |
1570 } | |
1571 | |
1572 for( cnt = 0; cnt < mcnt; cnt += SAT_TRC_LEN ) | |
1573 { | |
1574 pDest = strBuf; | |
1575 | |
1576 for( idx = 0; idx < SAT_TRC_LEN AND (idx + cnt) < mcnt; idx++ ) | |
1577 { | |
1578 /* Implements Measure#32: Row 1277 */ | |
1579 pDest += sprintf( pDest, format_2X_str, (UBYTE)cmd->cmd[idx + cnt] ); | |
1580 } | |
1581 | |
1582 *pDest = 0x0; | |
1583 | |
1584 TRACE_EVENT_P1("%s", strBuf ); | |
1585 } | |
1586 } | |
1587 | |
1588 /* | |
1589 +-------------------------------------------------------------------+ | |
1590 | PROJECT : GSM-PS (6147) MODULE : PSA_SAT | | |
1591 | ROUTINE : psaSAT_FURegister | | |
1592 +-------------------------------------------------------------------+ | |
1593 | |
1594 PURPOSE : Register a handler for FILE UPDATE. | |
1595 | |
1596 */ | |
1597 | |
1598 GLOBAL BOOL psaSAT_FURegister ( T_SAT_FU_FUNC fu_func ) | |
1599 { | |
1600 int i; | |
1601 | |
1602 TRACE_FUNCTION("psaSAT_FURegister()"); | |
1603 | |
1604 for (i = 0; i < MAX_FU_OPS; i++) | |
1605 { | |
1606 if (satShrdPrm.fu_func[i] EQ fu_func) | |
1607 { | |
1608 TRACE_EVENT ("FU func already registered"); | |
1609 return TRUE; | |
1610 } | |
1611 if (satShrdPrm.fu_func[i] EQ NULL) | |
1612 { | |
1613 satShrdPrm.fu_func[i] = fu_func; | |
1614 return TRUE; | |
1615 } | |
1616 } | |
1617 return FALSE; | |
1618 } | |
1619 | |
1620 /* | |
1621 +-------------------------------------------------------------------+ | |
1622 | PROJECT : GSM-PS (6147) MODULE : PSA_SAT | | |
1623 | ROUTINE : psaSAT_FUConfirm | | |
1624 +-------------------------------------------------------------------+ | |
1625 | |
1626 PURPOSE : Confirm a handled FILE UPDATE. The parameter is the same | |
1627 with which the handler was called and refers to the entry | |
1628 of the callback table. | |
1629 | |
1630 */ | |
1631 | |
1632 GLOBAL void psaSAT_FUConfirm (int currFU, USHORT resFU) | |
1633 { | |
1634 BOOL fu_active; | |
1635 BOOL aci_sent_no_primitive; | |
1636 | |
1637 TRACE_EVENT_P2("psaSAT_FUConfirm(): currFU: %d, resFU: %d", currFU, resFU); | |
1638 | |
1639 if (resFU EQ SIM_FU_ERROR) /*If there is one error, the rest of the procedure is to be cancelled */ | |
1640 { | |
1641 PALLOC (fu_res, SIM_FILE_UPDATE_RES); | |
1642 | |
1643 fu_res->source = SRC_MMI; | |
1644 fu_res->fu_rsc = SIM_FU_ERROR; | |
1645 | |
1646 if (satShrdPrm.fu_func_notif) | |
1647 (void)satShrdPrm.fu_func_notif((int)fu_res->fu_rsc,satShrdPrm.fu_ind); /*Sends the final result to MMI */ | |
1648 | |
1649 PSENDX (SIM, fu_res); | |
1650 | |
1651 return; | |
1652 } | |
1653 | |
1654 TRACE_EVENT_P1("satShrdPrm.fu_ind: %d", satShrdPrm.fu_ind); | |
1655 | |
1656 if (satShrdPrm.fu_ind NEQ NULL AND currFU < MAX_FU_OPS) | |
1657 { | |
1658 if (currFU < 0) | |
1659 { | |
1660 if (satShrdPrm.fu_func_notif) | |
1661 { /*Sends the file update request notification to MMI */ | |
1662 if (!satShrdPrm.fu_func_notif(-1,satShrdPrm.fu_ind)) | |
1663 { | |
1664 PALLOC (fu_res, SIM_FILE_UPDATE_RES); /* If rejected, send negative response to SIM */ | |
1665 | |
1666 fu_res->source = SRC_MMI; | |
1667 fu_res->fu_rsc = SIM_FU_ERROR; | |
1668 PSENDX (SIM, fu_res); | |
1669 } | |
1670 | |
1671 } | |
1672 currFU = 0; | |
1673 /*satShrdPrm.fu_rsc = SIM_FU_ERROR;*/ /* default*/ | |
1674 fu_active = FALSE; | |
1675 } | |
1676 else | |
1677 { | |
1678 ++currFU; | |
1679 | |
1680 if ( (resFU EQ SIM_FU_SUCC_ADD) AND (satShrdPrm.fu_rsc NEQ SIM_FU_ERROR) ) | |
1681 { | |
1682 satShrdPrm.fu_rsc = resFU; | |
1683 } | |
1684 | |
1685 /* | |
1686 switch (resFU) | |
1687 { | |
1688 case SIM_FU_SUCCESS: | |
1689 if (satShrdPrm.fu_rsc EQ SIM_FU_SUCC_ADD) | |
1690 break; | |
1691 case SIM_FU_SUCC_ADD: | |
1692 satShrdPrm.fu_rsc = resFU; | |
1693 } | |
1694 */ | |
1695 fu_active = TRUE; | |
1696 } | |
1697 | |
1698 for ( ; currFU < MAX_FU_OPS; currFU++) | |
1699 { | |
1700 if (satShrdPrm.fu_func[currFU] EQ NULL) | |
1701 continue; | |
1702 /* else | |
1703 fu_active = TRUE;*/ | |
1704 | |
1705 aci_sent_no_primitive = satShrdPrm.fu_func[currFU](currFU, satShrdPrm.fu_ind); | |
1706 | |
1707 if (!aci_sent_no_primitive) | |
1708 { | |
1709 return; /* otherwise, result would be sent directly, and not at the end */ | |
1710 } | |
1711 } | |
1712 | |
1713 { | |
1714 PALLOC (fu_res, SIM_FILE_UPDATE_RES); | |
1715 | |
1716 fu_res->source = SRC_MMI; | |
1717 fu_res->fu_rsc = (fu_active)? satShrdPrm.fu_rsc: SIM_FU_SUCCESS; | |
1718 | |
1719 if (satShrdPrm.fu_func_notif) | |
1720 (void)satShrdPrm.fu_func_notif((int)fu_res->fu_rsc,satShrdPrm.fu_ind); /*Sends the final result to MMI */ | |
1721 | |
1722 TRACE_EVENT("FREE satShrdPrm.fu_ind"); | |
1723 PFREE (satShrdPrm.fu_ind); | |
1724 satShrdPrm.fu_ind = NULL; | |
1725 | |
1726 PSENDX (SIM, fu_res); | |
1727 simShrdPrm.fuRef = -1; | |
1728 } | |
1729 } | |
1730 } | |
1731 | |
1732 | |
1733 /* | |
1734 +-------------------------------------------------------------------+ | |
1735 | PROJECT : GSM-PS (6147) MODULE : PSA_SAT | | |
1736 | ROUTINE : psaSAT_FUNotifyRegister | | |
1737 +-------------------------------------------------------------------+ | |
1738 | |
1739 PURPOSE : Register a handler for FILE UPDATE. | |
1740 | |
1741 */ | |
1742 | |
1743 GLOBAL BOOL psaSAT_FUNotifyRegister ( T_SAT_FU_FUNC fu_func ) | |
1744 { | |
1745 | |
1746 TRACE_FUNCTION("psaSAT_FUNotifyRegister()"); | |
1747 | |
1748 if (fu_func) | |
1749 { | |
1750 satShrdPrm.fu_func_notif = fu_func; | |
1751 return TRUE; | |
1752 } | |
1753 else | |
1754 return FALSE; | |
1755 } | |
1756 | |
1757 | |
1758 | |
1759 /* | |
1760 +-------------------------------------------------------------------+ | |
1761 | PROJECT : GSM-PS (6147) MODULE : PSA_SAT | | |
1762 | ROUTINE : psaSAT_Init | | |
1763 +-------------------------------------------------------------------+ | |
1764 | |
1765 PURPOSE : initialize the protocol stack adapter for SAT. | |
1766 | |
1767 */ | |
1768 | |
1769 /* MACRO: initializer for set parameter */ | |
1770 #define INIT_SAT_SET_PARM( dest, def )\ | |
1771 for( LpCnt = 0; LpCnt < OWN_SRC_MAX; LpCnt++ )\ | |
1772 satShrdPrm.setPrm[LpCnt].dest = def | |
1773 | |
1774 GLOBAL void psaSAT_Init ( void ) | |
1775 { | |
1776 | |
1777 TRACE_FUNCTION("psaSAT_Init()"); | |
1778 /* | |
1779 *------------------------------------------------------------------- | |
1780 * set default parms | |
1781 *------------------------------------------------------------------- | |
1782 */ | |
1783 memset( &satShrdPrm, 0, sizeof(T_SAT_SHRD_PRM)); | |
1784 satShrdPrm.dur = -1; | |
1785 satShrdPrm.SentUSSDid = NO_ENTRY; | |
1786 satShrdPrm.fu_rsc = SIM_FU_SUCCESS; | |
1787 satShrdPrm.fu_ind = NULL; | |
1788 satShrdPrm.sId_pwd_requested = NO_ENTRY; | |
1789 #ifdef TI_PS_FF_AT_P_CMD_CUST | |
1790 satShrdPrm.cust1SimRefreshRespRqd = FALSE; | |
1791 #endif /* TI_PS_FF_AT_P_CMD_CUST */ | |
1792 satShrdPrm.locInfo.currPLMN.v_plmn = INVLD_PLMN; | |
1793 satShrdPrm.Cbch_EvtDnl = FALSE; | |
1794 satShrdPrm.ownSAT = FALSE; | |
1795 } | |
1796 | |
1797 /* | |
1798 +-------------------------------------------------------------------+ | |
1799 | PROJECT : GSM-PS (6147) MODULE : SAT | | |
1800 | ROUTINE : psaSAT_ChkEventList | | |
1801 +-------------------------------------------------------------------+ | |
1802 | |
1803 PURPOSE : Check if the event is monitored and shall alert SAT. | |
1804 | |
1805 */ | |
1806 | |
1807 GLOBAL BOOL psaSAT_ChkEventList( UBYTE eventNr ) | |
1808 { | |
1809 BOOL event_listed = FALSE; | |
1810 | |
1811 TRACE_FUNCTION("psaSAT_ChkEventList()"); | |
1812 | |
1813 event_listed = (satShrdPrm.event.list >> eventNr ) & 0x01; | |
1814 | |
1815 if( event_listed ) | |
1816 return( TRUE ); | |
1817 | |
1818 return( FALSE ); | |
1819 } | |
1820 | |
1821 #ifdef FF_SAT_E | |
1822 | |
1823 /* | |
1824 +-------------------------------------------------------------------+ | |
1825 | PROJECT : GSM-PS (6147) MODULE : SAT | | |
1826 | ROUTINE : psaSAT_ctbFindActCall | | |
1827 +-------------------------------------------------------------------+ | |
1828 | |
1829 PURPOSE : Return the call id of a call which is in an active state. | |
1830 If no call could be found the function returns NO_ENTRY. | |
1831 | |
1832 */ | |
1833 | |
1834 GLOBAL SHORT psaSAT_ctbFindActCall( void ) | |
1835 { | |
1836 UBYTE ctbIdx; | |
1837 SHORT actId = NO_ENTRY; | |
1838 | |
1839 TRACE_FUNCTION("psaSAT_ctbFindActCall()"); | |
1840 | |
1841 for( ctbIdx = 0; ctbIdx < MAX_CALL_NR; ctbIdx++ ) | |
1842 { | |
1843 if (ccShrdPrm.ctb[ctbIdx] NEQ NULL) | |
1844 { | |
1845 switch( psaCC_ctb(ctbIdx)->calStat ) | |
1846 { | |
1847 case( CS_ACT ): | |
1848 case( CS_ACT_REQ ): | |
1849 case( CS_MDF_REQ ): | |
1850 | |
1851 actId = ctbIdx; | |
1852 break; | |
1853 } | |
1854 } | |
1855 } | |
1856 | |
1857 return( actId ); | |
1858 } | |
1859 | |
1860 /* | |
1861 +-------------------------------------------------------------------+ | |
1862 | PROJECT : GSM-PS (6147) MODULE : SAT | | |
1863 | ROUTINE : psaSAT_gprsFindFreeCntxt| | |
1864 +-------------------------------------------------------------------+ | |
1865 | |
1866 PURPOSE : Return a free context id, if busy return NO_ENTRY. | |
1867 | |
1868 */ | |
1869 #ifdef GPRS | |
1870 GLOBAL SHORT psaSAT_gprsFindFreeCntxt( void ) | |
1871 { | |
1872 BOOL cntxtStat[MAX_CID+1]; | |
1873 SHORT cntxtId[MAX_CID+1]; | |
1874 SHORT cid = NO_ENTRY; | |
1875 UBYTE idx; | |
1876 | |
1877 TRACE_FUNCTION("psaSAT_gprsFindFreeCntxt()"); | |
1878 | |
1879 if( qAT_PlusCGACT( CMD_SRC_LCL, cntxtStat, cntxtId ) NEQ AT_CMPL ) | |
1880 | |
1881 return( NO_ENTRY ); | |
1882 | |
1883 for( idx = 0; idx < MAX_CID; idx++ ) | |
1884 { | |
1885 if( cntxtId[idx] NEQ INVALID_CID AND cntxtStat[idx] EQ TRUE ) continue; | |
1886 | |
1887 cid = (cntxtId[idx] EQ INVALID_CID)? idx+1:cntxtId[idx]; | |
1888 break; | |
1889 } | |
1890 | |
1891 return( cid ); | |
1892 | |
1893 } | |
1894 #endif /* GPRS */ | |
1895 | |
1896 #endif /* FF_SAT_E */ | |
1897 | |
1898 #endif /* #ifdef SIM_TOOLKIT */ | |
1899 | |
1900 /*==== EOF ========================================================*/ |