comparison src/g23m-aci/aci/psa_satp.c @ 1:d393cd9bb723

src/g23m-*: initial import from Magnetite
author Mychaela Falconia <falcon@freecalypso.org>
date Sun, 15 Jul 2018 04:40:46 +0000
parents
children
comparison
equal deleted inserted replaced
0:b6a5e36de839 1:d393cd9bb723
1 /*
2 +-----------------------------------------------------------------------------
3 | Project : GSM-PS (6147)
4 | Modul : PSA_SATP
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 processing functions for the
18 | primitives send to the protocol stack adapter by the
19 | SIM application toolkit.
20 +-----------------------------------------------------------------------------
21 */
22
23 #ifdef SIM_TOOLKIT
24
25 #ifndef PSA_SATP_C
26 #define PSA_SATP_C
27 #endif
28
29 #include "aci_all.h"
30
31 /*==== INCLUDES ===================================================*/
32 #include "aci_cmh.h"
33 #include "aci_mem.h"
34
35 #ifdef FAX_AND_DATA
36 #include "aci_fd.h"
37 #endif /* of #ifdef FAX_AND_DATA */
38
39 #include "aci.h"
40 #include "psa.h"
41 #include "psa_cc.h"
42 #include "psa_sim.h" /* for simShrdPrm declaration */
43 #include "psa_sat.h"
44 #include "psa_sms.h"
45 #include "cmh.h"
46 #include "cmh_sat.h"
47
48 /*==== CONSTANTS ==================================================*/
49
50
51 /*==== TYPES ======================================================*/
52
53
54 /*==== EXPORT =====================================================*/
55 UBYTE temp ;
56
57 /*==== VARIABLES ==================================================*/
58
59 /*==== FUNCTIONS ==================================================*/
60
61 /*
62 +-------------------------------------------------------------------+
63 | PROJECT : GSM-PS (6147) MODULE : PSA_SATP |
64 | ROUTINE : psa_sim_toolkit_ind |
65 +-------------------------------------------------------------------+
66
67 PURPOSE : processes the SIM_TOOLKIT_IND primitive send by SIM.
68 this is an indication that a STK command was received.
69
70 */
71
72 GLOBAL void psa_sim_toolkit_ind
73 ( T_SIM_TOOLKIT_IND *sim_toolkit_ind )
74 {
75 T_ACI_SAT_TERM_RESP resp_data;
76
77 TRACE_FUNCTION ("psa_sim_toolkit_ind()");
78
79 /*
80 *-------------------------------------------------------------------
81 * update shared parameter
82 *-------------------------------------------------------------------
83 */
84
85 satShrdPrm.stkCmdLen = sim_toolkit_ind -> stk_cmd.l_cmd;
86 satShrdPrm.stkCmd = sim_toolkit_ind -> stk_cmd.cmd;
87
88 TRACE_EVENT_P1("%x", satShrdPrm.stkCmd[44] );
89
90 psaSAT_DumpCmd ( &sim_toolkit_ind -> stk_cmd );
91
92 /*
93 *-------------------------------------------------------------------
94 * decode SIM toolkit command
95 *-------------------------------------------------------------------
96 */
97 CCD_START;
98 {
99 UBYTE ccdRet;
100
101 MCAST( cmd, STK_CMD );
102 memset( cmd, 0, sizeof( T_STK_CMD ));
103
104 ccdRet = ccd_decodeMsg (CCDENT_SAT,
105 DOWNLINK,
106 (T_MSGBUF *) &sim_toolkit_ind -> stk_cmd,
107 (UBYTE *) _decodedMsg,
108 STK_CMD);
109
110 if( ccdRet NEQ ccdOK OR !cmd->v_pas_cmd)
111 {
112 cmhSAT_STKCmdInd();
113 }
114 else if( cmd->pas_cmd.v_cmd_details AND cmd->pas_cmd.v_dev_ids )
115 {
116 /* store command details */
117 satShrdPrm.cmdDet.cmdNr = cmd->pas_cmd.cmd_details.cmd_nr;
118 satShrdPrm.cmdDet.cmdType = cmd->pas_cmd.cmd_details.cmd_typ;
119 satShrdPrm.cmdDet.cmdQlf = cmd->pas_cmd.cmd_details.cmd_qlf;
120
121 #ifdef TI_PS_FF_AT_P_CMD_CUST
122 if (simShrdPrm.overall_cust_mode EQ (UBYTE)CUST_MODE_BEHAVIOUR_1)
123 {
124 /*
125 ** Customised behaviour for the Cust1 MMI
126 */
127 switch (cmd->pas_cmd.cmd_details.cmd_typ)
128 {
129 case SAT_CMD_SETUP_CALL:
130 case SAT_CMD_SEND_SMS:
131 case SAT_CMD_SEND_SS:
132 case SAT_CMD_SEND_USSD:
133 if (satShrdPrm.cust1StkCmd != (void *)0)
134 {
135 /*
136 ** The previous command has not been deleted.
137 */
138 ACI_MFREE(satShrdPrm.cust1StkCmd);
139
140 satShrdPrm.cust1StkCmd = (void *)0;
141 satShrdPrm.cust1StkCmdLen = 0;
142 }
143
144 /*
145 ** Allocate memory to store the command
146 */
147 ACI_MALLOC(satShrdPrm.cust1StkCmd, MAX_STK_CMD);
148 if (satShrdPrm.cust1StkCmd EQ (void *)0)
149 {
150 /*
151 ** Memory allocation has failed, return ME Unable to Process Cmd
152 */
153 TRACE_EVENT("Memory Allocation Failure");
154 psaSAT_InitTrmResp( &resp_data );
155 psaSAT_SendTrmResp( RSLT_ME_UNAB_PROC, &resp_data );
156 break;
157 }
158
159 /*
160 ** Save the received data before proceeding
161 */
162 memset(satShrdPrm.cust1StkCmd, 0, MAX_STK_CMD);
163 /*
164 ** stkCmdLen is the BIT length of the received data, so shift right 3 (divide by 8)
165 ** in order to get the BYTE length
166 */
167 memcpy(satShrdPrm.cust1StkCmd, satShrdPrm.stkCmd, satShrdPrm.stkCmdLen >> 3);
168 satShrdPrm.cust1StkCmdLen = satShrdPrm.stkCmdLen;
169
170 /*
171 ** Continue the processing as for normal behaviour,
172 ** special processing will be applied later
173 **
174 ** No Break!
175 */
176 /*lint -fallthrough */
177 case SAT_CMD_EVENT_LIST:
178 /*
179 ** This command is processed normally
180 */
181 if( !cmd->pas_cmd.v_cmd_prms OR !cmd->pas_cmd.cmd_prms.l_cmd_prms )
182 {
183 TRACE_EVENT("no parameters in envelope");
184 psaSAT_dasmMECmd( NULL );
185 }
186 else
187 psaSAT_dasmMECmd( &cmd->pas_cmd.cmd_prms );
188 break;
189
190 case SAT_CMD_REFRESH:
191 /*
192 ** This command is to be forwarded to the MMI, for the user to be given the
193 ** chance to accept or reject the Refresh action. The user response will be
194 ** contained in a SATR Response indication, and we must be prepared to
195 ** process that indication in a different manner.
196 */
197 satShrdPrm.cust1SimRefreshRespRqd = TRUE;
198
199 /*
200 ** Forward the command to the MMI
201 */
202 cmhSAT_STKCmdInd();
203 break;
204
205 default:
206 /*
207 ** If the command is handled by the MMI pass it up in a %SATI indication
208 */
209 if (cmhSAT_IsStkCmdForMmi(cmd->pas_cmd.cmd_details.cmd_typ,
210 cmd->pas_cmd.cmd_details.cmd_qlf) EQ FALSE)
211 {
212 /*
213 ** Otherwise Determine whether the command is handled in the Modem Part
214 */
215 switch (cmd->pas_cmd.cmd_details.cmd_typ)
216 {
217 case( SAT_CMD_SEND_DTMF ):
218 case( SAT_CMD_RUN_AT ):
219 case( SAT_CMD_LAUNCH_BROWSER ):
220 case (SAT_CMD_PROV_LOC_INFO):
221 #ifdef FF_SAT_E
222 case( SAT_CMD_OPEN_CHANNEL ):
223 #endif /* FF_SAT_E */
224 if( !cmd->pas_cmd.v_cmd_prms OR !cmd->pas_cmd.cmd_prms.l_cmd_prms )
225 {
226 TRACE_EVENT("no parameters in envelope");
227 psaSAT_dasmMECmd( NULL );
228 }
229 else
230 psaSAT_dasmMECmd( &cmd->pas_cmd.cmd_prms );
231 break;
232 #ifdef FF_SAT_E
233 /* special handling for CLOSE CHANNEL, no further decoding required.
234 all that is needed can be found in device identities */
235 case( SAT_CMD_CLOSE_CHANNEL ):
236
237 cmhSAT_CloseChannel();
238
239 break;
240
241 /* special handling for SEND DATA, no further decoding required.
242 all that is needed can be found in command details */
243 case( SAT_CMD_SEND_DATA ):
244 cmhSAT_SendData();
245 break;
246
247 /* special handling for GET CHANNEL STATUS, no further decoding required */
248 case( SAT_CMD_GET_CHANNEL_STATUS ):
249 cmhSAT_GetChannelStatus();
250 break;
251
252 /* special handling for RECEIVE DATA, no further decoding required */
253 case( SAT_CMD_RECEIVE_DATA ):
254 cmhSAT_STKUsrNtfy();
255 break;
256 #endif /* FF_SAT_E */
257
258 /*
259 ** If the command is not handled by the Modem Part, return a "Beyond ME
260 ** Capabilities" response to the SIM Entity.
261 */
262 default:
263 TRACE_EVENT("Unable to handle command");
264 psaSAT_InitTrmResp( &resp_data );
265 psaSAT_SendTrmResp( RSLT_ME_CAP, &resp_data );
266 }
267 }
268 }
269 }
270 else
271 #endif /* TI_PS_FF_AT_P_CMD_CUST */
272 {
273 /* if command is addressed to ACI */
274 switch( cmd->pas_cmd.cmd_details.cmd_typ )
275 {
276 case( SAT_CMD_SETUP_CALL ):
277 case( SAT_CMD_SEND_SS ):
278 case( SAT_CMD_SEND_SMS ):
279 case( SAT_CMD_SEND_USSD ):
280 case( SAT_CMD_SEND_DTMF ):
281 case( SAT_CMD_EVENT_LIST ):
282 case( SAT_CMD_RUN_AT ):
283 case( SAT_CMD_LAUNCH_BROWSER ):
284 case (SAT_CMD_PROV_LOC_INFO):
285 #ifdef FF_SAT_E
286 case( SAT_CMD_OPEN_CHANNEL ):
287 #endif /* FF_SAT_E */
288 if( !cmd->pas_cmd.v_cmd_prms OR !cmd->pas_cmd.cmd_prms.l_cmd_prms )
289 {
290 TRACE_EVENT("no parameters in envelope");
291 psaSAT_dasmMECmd( NULL );
292 }
293 else
294 psaSAT_dasmMECmd( &cmd->pas_cmd.cmd_prms );
295 break;
296 #ifdef FF_SAT_E
297 /* special handling for CLOSE CHANNEL, no further decoding required.
298 all that is needed can be found in device identities */
299 case( SAT_CMD_CLOSE_CHANNEL ):
300 /* Channel Id invalid */
301 temp = (UBYTE) cmd->pas_cmd.dev_ids.dest_dev;
302 if ( (CHANNEL_ID_1 NEQ (UBYTE)(temp & 0x0f)) OR ( satShrdPrm.chnTb.lnkStat EQ SIM_NO_LINK ) )
303 {
304 /* Close Channel with an invalid channel identifier */
305 psaSAT_InitTrmResp( &resp_data );
306 resp_data.chnStat = FALSE;
307 resp_data.add_content = ADD_BIP_CHANID_NT_VLD;
308 psaSAT_SendTrmResp( RSLT_BEARIND_PERR, &resp_data );
309 }
310 else
311 {
312 cmhSAT_CloseChannel();
313 }
314 break;
315
316 /* special handling for SEND DATA, no further decoding required.
317 all that is needed can be found in command details */
318 case( SAT_CMD_SEND_DATA ):
319
320 /* Channel Id invalid */
321 temp = (UBYTE) cmd->pas_cmd.dev_ids.dest_dev;
322 if ( (CHANNEL_ID_1 NEQ (UBYTE)(temp & 0x0f)) OR ( satShrdPrm.chnTb.lnkStat EQ SIM_NO_LINK ) )
323 {
324 /* Close Channel with an invalid channel identifier */
325 psaSAT_InitTrmResp( &resp_data );
326 resp_data.chnStat = FALSE;
327 resp_data.add_content = ADD_BIP_CHANID_NT_VLD;
328 psaSAT_SendTrmResp( RSLT_BEARIND_PERR, &resp_data );
329 }
330 else
331 {
332
333 cmhSAT_SendData();
334 }
335 break;
336
337 /* special handling for GET CHANNEL STATUS, no further decoding required */
338 case( SAT_CMD_GET_CHANNEL_STATUS ):
339
340 cmhSAT_GetChannelStatus();
341 break;
342
343 /* special handling for RECEIVE DATA, no further decoding required */
344 case( SAT_CMD_RECEIVE_DATA ):
345
346 cmhSAT_STKUsrNtfy();
347 break;
348 #endif /* FF_SAT_E */
349 /* otherwise pass command to user */
350 default:
351 cmhSAT_STKCmdInd();
352 }
353 }
354 }
355 else
356 {
357 /* respond with "error, required values are missing" */
358 TRACE_EVENT("parameters are missing");
359 psaSAT_InitTrmResp( &resp_data );
360 psaSAT_SendTrmResp( RSLT_ERR_REQ_VAL, &resp_data );
361 }
362 }
363 CCD_END;
364
365 /*
366 *-------------------------------------------------------------------
367 * free the primitive buffer
368 *-------------------------------------------------------------------
369 */
370 PFREE (sim_toolkit_ind);
371
372 }
373
374 /*
375 +-------------------------------------------------------------------+
376 | PROJECT : GSM-PS (6147) MODULE : PSA_SATP |
377 | ROUTINE : psa_sim_toolkit_cnf |
378 +-------------------------------------------------------------------+
379
380 PURPOSE : processes the SIM_TOOLKIT_CNF primitive send by SIM.
381 this is a confirmation to a previous STK command.
382
383 */
384
385 GLOBAL void psa_sim_toolkit_cnf( T_SIM_TOOLKIT_CNF *sim_toolkit_cnf )
386 {
387 void *p = NULL;
388 BOOL SIM_error = FALSE;
389 BOOL not_allw = FALSE;
390 BOOL allw = FALSE;
391 void *p_allw = NULL;
392 UBYTE *p_v_allw = NULL;
393 void *p_not_allw = NULL;
394 UBYTE *p_v_not_allw = NULL;
395 void *p_allw_mdfy = NULL;
396 UBYTE *p_v_allw_mdfy = NULL;
397 SHORT StructSize = 0;
398 UBYTE DynEnv = '\0';
399
400 TRACE_FUNCTION ("psa_sim_toolkit_cnf()");
401 /*
402 *-------------------------------------------------------------------
403 * update shared parameter
404 *-------------------------------------------------------------------
405 */
406 satShrdPrm.stkCmdLen = sim_toolkit_cnf -> stk_cmd.l_cmd;
407 satShrdPrm.stkCmd = sim_toolkit_cnf -> stk_cmd.cmd;
408 satShrdPrm.stkError = sim_toolkit_cnf -> cause;
409
410 psaSAT_DumpCmd ( &sim_toolkit_cnf -> stk_cmd );
411
412 /*
413 *-------------------------------------------------------------------
414 * if request was invoked by MMI pass reply to MMI
415 *-------------------------------------------------------------------
416 */
417 if( sim_toolkit_cnf -> req_id EQ SRQ_MMI )
418 {
419 cmhSAT_STKCmdCnf();
420 }
421
422 /*
423 *-------------------------------------------------------------------
424 * if request was invoked by ACI decode envelope command result
425 *-------------------------------------------------------------------
426 */
427 else if( sim_toolkit_cnf -> req_id EQ SRQ_ACI )
428 {
429 if( sim_toolkit_cnf -> stk_cmd.l_cmd EQ 0 OR
430 sim_toolkit_cnf -> cause EQ SIM_CAUSE_SAT_BUSY)
431 {
432 SIM_error = TRUE;
433
434 switch ( sim_toolkit_cnf -> cause )
435 {
436 case SIM_CAUSE_OTHER_ERROR:
437 case SIM_CAUSE_SAT_BUSY:
438 case SIM_CAUSE_CARD_REMOVED:
439 case SIM_CAUSE_PIN1_EXPECT:
440 case SIM_CAUSE_PIN1_BLOCKED:
441 case SIM_CAUSE_PUK1_EXPECT:
442 case SIM_CAUSE_PUK1_BLOCKED:
443 case SIM_CAUSE_PIN2_EXPECT:
444 case SIM_CAUSE_PIN2_BLOCKED:
445 case SIM_CAUSE_PUK2_EXPECT:
446 case SIM_CAUSE_PUK2_BLOCKED:
447 /* in case of certain errors, assume not allowed */
448 not_allw = TRUE;
449 sim_toolkit_cnf -> stk_cmd.cmd[0] = CCR_NOT_ALLW;
450 break;
451
452 default:
453 /* in case of a positive result without further info,
454 assume allowed not modified */
455 allw = TRUE;
456 sim_toolkit_cnf -> stk_cmd.cmd[0] = CCR_ALLW_NO_MDFY;
457 break;
458 }
459 sim_toolkit_cnf -> stk_cmd.cmd[1] = 0; /* no extra TLVs */
460 satShrdPrm.stkCmdLen = 2<<3; /* 2 bytes result */
461 }
462
463 else
464 {
465 SIM_error = FALSE;
466 }
467
468
469 {
470 CCD_START;
471 {
472 UBYTE ccdRet;
473 MCAST( env, ENV_RES );
474 MCAST( smc_env, ENV_RES_SMC );
475
476 switch( satShrdPrm.SIMCCParm.ccAct )
477 {
478 case( CC_ACT_CAL ):
479 case( CC_ACT_SS ):
480 case( CC_ACT_USSD ):
481 memset( env, 0, sizeof( T_ENV_RES ));
482 p_v_not_allw = &env->v_ccr_not_allw;
483 p_v_allw = &env->v_ccr_allw;
484 p_v_allw_mdfy = &env->v_ccr_allw_mdfy;
485 p_not_allw = &env->ccr_not_allw;
486 p_allw = &env->ccr_allw;
487 p_allw_mdfy = &env->ccr_allw_mdfy;
488 DynEnv = ENV_RES;
489 break;
490 case( SMC_ACT_MO ):
491 memset( smc_env, 0, sizeof( T_ENV_RES_SMC ));
492 p_v_not_allw = &smc_env->v_smcr_not_allw;
493 p_v_allw = &smc_env->v_smcr_allw;
494 p_v_allw_mdfy = &smc_env->v_smcr_allw_mdfy;
495 p_not_allw = &smc_env->smcr_not_allw;
496 p_allw = &smc_env->smcr_allw;
497 p_allw_mdfy = &smc_env->smcr_allw_mdfy;
498 DynEnv = ENV_RES_SMC;
499 break;
500 }
501
502 if (SIM_error)
503 {
504 if(p_v_not_allw AND p_v_allw) /* To avoid the NULL poiner usage, 613 lint warning */
505 {
506 *p_v_not_allw = not_allw;
507 *p_v_allw = allw;
508 }
509 }
510 /* otherwise decode message */
511 else
512 {
513 ccdRet = ccd_decodeMsg (CCDENT_SAT,
514 DOWNLINK,
515 (T_MSGBUF *) &sim_toolkit_cnf -> stk_cmd,
516 (UBYTE *) _decodedMsg,
517 DynEnv );
518
519 if( ccdRet NEQ ccdOK )
520 {
521 /* in case of a result failure, pretend allowed not modified */
522 if(p_v_not_allw AND p_v_allw AND p_v_allw_mdfy) /* To avoid the NULL poiner usage, 613 lint warning */
523
524 {
525 if( psaSAT_ccdErrChk() NEQ 0 AND
526 (!(*p_v_allw) AND !(*p_v_not_allw) AND !(*p_v_allw_mdfy)))
527 {
528 memset( env, 0, StructSize );
529 *p_v_allw = TRUE;
530 sim_toolkit_cnf -> stk_cmd.cmd[0] = CCR_ALLW_NO_MDFY;
531 sim_toolkit_cnf -> stk_cmd.cmd[1] = 0;
532 satShrdPrm.stkCmdLen = 2<<3; /* 2 bytes result */
533 }
534 }
535 }
536 }
537
538 /* process result */
539 if(p_v_not_allw AND p_v_allw AND p_v_allw_mdfy) /* To avoid the NULL poiner usage, 613 lint warning */
540
541 {
542 if ( *p_v_allw ) p = p_allw;
543 else if( *p_v_not_allw ) p = p_not_allw;
544 else if( *p_v_allw_mdfy ) p = p_allw_mdfy;
545
546
547 satShrdPrm.ntfy = USR_NTF_CC_SIM;
548 cmhSAT_STKUsrNtfy();
549
550 switch( satShrdPrm.SIMCCParm.ccAct )
551 {
552 case( CC_ACT_CAL ):
553
554 if( cmhSAT_ResCalCntrlBySIM( sim_toolkit_cnf -> stk_cmd.cmd, p ))
555 {
556 /* keep primitive for terminal response */
557 satShrdPrm.stkCnfPrim = sim_toolkit_cnf;
558 CCD_END;
559 return;
560 }
561 break;
562
563 case( CC_ACT_SS ):
564
565 if( cmhSAT_ResSSCntrlBySIM( sim_toolkit_cnf -> stk_cmd.cmd, p ))
566 {
567 /* keep primitive for terminal response */
568 satShrdPrm.stkCnfPrim = sim_toolkit_cnf;
569 CCD_END;
570 return;
571 }
572 break;
573
574 case( CC_ACT_USSD ):
575
576 if( cmhSAT_ResUSSDCntrlBySIM( sim_toolkit_cnf -> stk_cmd.cmd, p ))
577 {
578 /* keep primitive for terminal response */
579 /*satShrdPrm.stkCnfPrim = sim_toolkit_cnf;*/
580 CCD_END;
581 return;
582 }
583 break;
584
585 case( SMC_ACT_MO ):
586 if( cmhSAT_ResSMCntrlBySIM( sim_toolkit_cnf -> stk_cmd.cmd, p ))
587 {
588 /* keep primitive for terminal response */
589 /*satShrdPrm.stkCnfPrim = sim_toolkit_cnf;*/
590 CCD_END;
591 return;
592 }
593 break;
594
595 default:
596 TRACE_EVENT("UNEXP CC ACTION IN SAT PARMS");
597 break;
598 }
599 }
600 }
601 satShrdPrm.SIMCCParm.ccAct = NO_CC_ACT;
602 CCD_END;
603 }
604 }
605
606 /*
607 *-------------------------------------------------------------------
608 * free the primitive buffer
609 *-------------------------------------------------------------------
610 */
611 PFREE (sim_toolkit_cnf);
612
613 }
614
615 /*
616 +-------------------------------------------------------------------+
617 | PROJECT : GSM-PS (6147) MODULE : PSA_SATP |
618 | ROUTINE : psa_sim_file_update_ind |
619 +-------------------------------------------------------------------+
620
621 PURPOSE : processes the FILE_UPDATE_IND primitive send by SIM.
622 It provides a list of updated EFs.
623
624 */
625
626 GLOBAL void psa_sim_file_update_ind
627 ( T_SIM_FILE_UPDATE_IND *sim_file_update_ind )
628 {
629 SHORT i;
630 BOOL send_confirm_now=TRUE;
631
632 TRACE_FUNCTION ("psa_sim_file_update_ind()");
633
634 /*
635 *-------------------------------------------------------------------
636 * store the primitive and start processing
637 *-------------------------------------------------------------------
638 */
639 satShrdPrm.fu_ind = sim_file_update_ind;
640
641 /*
642 * Broadcast %SIMEF unsolicited event to all interested parties.
643 */
644 for(i=CMD_SRC_LCL;i<CMD_SRC_MAX;i++)
645 {
646 if (simShrdPrm.SIMEFMode[i] EQ SIMEF_MODE_ON)
647 {
648 /*
649 * As we have reported the EF update, it is not now the
650 * responsibility of this function to send the response
651 * immediately.
652 */
653 send_confirm_now=FALSE;
654
655 R_AT(RAT_P_SIMEF,(T_ACI_CMD_SRC)i)(sim_file_update_ind);
656
657 }
658 }
659
660 /*
661 * If we didn't report the EF update to anyone we must send
662 * the response now.
663 */
664 if (send_confirm_now NEQ FALSE)
665 psaSAT_FUConfirm (-1, NOT_PRESENT_16BIT);
666 }
667
668 #endif /* #ifdef SIM_TOOLKIT */
669
670 /*==== EOF =========================================================*/