comparison g23m-aci/aci/cmh_sats.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 : CMH_SATS
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 provides the set functions related to the
18 | SIM application toolkit module.
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 CMH_SATS_C
30 #define CMH_SATS_C
31 #endif
32
33 #include "aci_all.h"
34 /*==== INCLUDES ===================================================*/
35 #include "aci_cmh.h"
36
37 #ifdef GPRS
38 #include "gaci_cmh.h"
39 #endif
40
41 #ifdef FAX_AND_DATA
42 #include "aci_fd.h"
43 #endif /* of #ifdef FAX_AND_DATA */
44
45 #include "psa.h"
46 #include "psa_cc.h"
47 #include "psa_sat.h"
48 #include "psa_sim.h"
49 #include "cmh.h"
50 #include "cmh_sat.h"
51
52 #include "cmh_cc.h"
53 /*==== CONSTANTS ==================================================*/
54
55 /*==== EXPORT =====================================================*/
56
57 /*==== VARIABLES ==================================================*/
58
59 /*==== FUNCTIONS ==================================================*/
60
61 /*
62 +--------------------------------------------------------------------+
63 | PROJECT : GSM-PS (6147) MODULE : CMH_SATS |
64 | STATE : code ROUTINE : sAT_PercentSATC |
65 +--------------------------------------------------------------------+
66
67 PURPOSE : This is the functional counterpart to the %SATC AT command
68 which is responsible to configure the SIM toolkit profile.
69 */
70
71 GLOBAL T_ACI_RETURN sAT_PercentSATC ( T_ACI_CMD_SRC srcId,
72 SHORT len, UBYTE *satCnfg )
73 {
74 SHORT idx; /* holds profile index */
75 UBYTE *mmiMask;
76
77 TRACE_FUNCTION ("sAT_PercentSATC()");
78 /*
79 *-------------------------------------------------------------------
80 * check command source
81 *-------------------------------------------------------------------
82 */
83 if (!cmh_IsVldCmdSrc (srcId))
84 return AT_FAIL;
85
86 /*
87 *-------------------------------------------------------------------
88 * check parameters
89 *-------------------------------------------------------------------
90 */
91 if (len < 0 OR !satCnfg)
92 return ( AT_FAIL );
93
94 if (len > MAX_STK_PRF)
95 {
96 for (idx = MAX_STK_PRF; idx < len; idx++)
97 {
98 if (satCnfg[idx] NEQ 0) /* TP bit set beyond MAX_STK_PRF? */
99 return AT_FAIL;
100 }
101 }
102 /*
103 *-------------------------------------------------------------------
104 * update SIM toolkit profile
105 *-------------------------------------------------------------------
106 */
107 #ifdef TI_PS_FF_AT_P_CMD_CUST
108 if (simShrdPrm.setPrm[srcId].cust_mode EQ (UBYTE)CUST_MODE_BEHAVIOUR_1)
109 mmiMask = satMaskCust1Prfl;
110 else
111 #endif /* TI_PS_FF_AT_P_CMD_CUST */
112 mmiMask = satMaskMMIPrfl;
113
114 for( idx = 0; idx < MAX_STK_PRF; idx++ )
115 {
116 simShrdPrm.setPrm[srcId].STKprof[idx] =
117 ((idx < len)? (satCnfg[idx] & mmiMask[idx]): 0)
118 | satDefPrfl[idx];
119 }
120 return AT_CMPL;
121 }
122
123 /*
124 +--------------------------------------------------------------------+
125 | PROJECT : GSM-PS (6147) MODULE : CMH_SATS |
126 | STATE : code ROUTINE : sAT_PercentSATR |
127 +--------------------------------------------------------------------+
128
129 PURPOSE : This is the functional counterpart to the %SATR AT command
130 which is responses to a previous SIM toolkit command.
131 */
132
133 GLOBAL T_ACI_RETURN sAT_PercentSATR ( T_ACI_CMD_SRC srcId,
134 SHORT len, UBYTE *satCmd )
135 {
136 BOOL sendRes = TRUE; /* holds indicator whether to send terminal res or not */
137
138 TRACE_FUNCTION ("sAT_PercentSATR()");
139 /*
140 *-------------------------------------------------------------------
141 * send STK command
142 *-------------------------------------------------------------------
143 */
144 if(!cmh_IsVldCmdSrc (srcId))
145
146 return( AT_FAIL );
147
148 /*
149 *-------------------------------------------------------------------
150 * update SIM toolkit profile
151 *-------------------------------------------------------------------
152 */
153 if( len > MAX_SAT_CMD_LEN OR !satCmd ) return ( AT_FAIL );
154
155 satShrdPrm.setPrm[srcId].stkCmd = satCmd;
156 satShrdPrm.setPrm[srcId].stkCmdLen = (UBYTE)len;
157 satShrdPrm.owner = srcId;
158
159 #ifdef TI_PS_FF_AT_P_CMD_CUST
160 /*
161 *-------------------------------------------------------------------
162 * If Cust1 and Refresh Response Expected
163 *-------------------------------------------------------------------
164 */
165 if ((simShrdPrm.overall_cust_mode EQ (UBYTE)CUST_MODE_BEHAVIOUR_1) AND
166 (satShrdPrm.cust1SimRefreshRespRqd EQ TRUE))
167 {
168 psaSAT_SendRefreshUserRes(len, satCmd);
169 satShrdPrm.cust1SimRefreshRespRqd = FALSE;
170 return(AT_CMPL);
171 }
172 #endif /* TI_PS_FF_AT_P_CMD_CUST */
173
174 /*
175 * check if MMI answers a setup event list and process it
176 */
177 sendRes = cmhSAT_CheckSetEventResp( );
178
179 if( sendRes )
180 {
181 if( psaSAT_STKResponse() < 0 ) /* respond to STK command */
182 {
183 TRACE_EVENT( "FATAL RETURN psaSIM in %%SATR" );
184 return( AT_FAIL );
185 }
186 }
187 return (AT_CMPL);
188 }
189
190 /*
191 +--------------------------------------------------------------------+
192 | PROJECT : GSM-PS (6147) MODULE : CMH_SATS |
193 | STATE : code ROUTINE : sAT_PercentSATE |
194 +--------------------------------------------------------------------+
195
196 PURPOSE : This is the functional counterpart to the %SATE AT command
197 which envelopes a SIM toolkit command.
198 */
199
200 GLOBAL T_ACI_RETURN sAT_PercentSATE ( T_ACI_CMD_SRC srcId,
201 SHORT len, UBYTE *satCmd )
202 {
203
204 TRACE_FUNCTION ("sAT_PercentSATE()");
205 /*
206 *-------------------------------------------------------------------
207 * check command source
208 *-------------------------------------------------------------------
209 */
210 if(!cmh_IsVldCmdSrc (srcId))
211
212 return( AT_FAIL );
213
214 /*
215 *-------------------------------------------------------------------
216 * check entity status
217 *-------------------------------------------------------------------
218 */
219 if( satEntStat.curCmd NEQ AT_CMD_NONE )
220
221 return( AT_BUSY );
222
223 /*
224 *-------------------------------------------------------------------
225 * send STK command
226 *-------------------------------------------------------------------
227 */
228 if( len > MAX_SAT_CMD_LEN OR !satCmd ) return ( AT_FAIL );
229
230 satShrdPrm.setPrm[srcId].stkCmd = satCmd;
231 satShrdPrm.setPrm[srcId].stkCmdLen = (UBYTE)len;
232
233 satEntStat.curCmd = AT_CMD_SATE;
234 satShrdPrm.owner = (UBYTE)srcId;
235 satEntStat.entOwn = srcId;
236
237 if( psaSAT_STKEnvelope (NULL) < 0 ) /* envelope STK command */
238 {
239 TRACE_EVENT( "FATAL RETURN psaSIM in %%SATE" );
240 return( AT_FAIL );
241 }
242
243 return (AT_EXCT);
244 }
245
246 /*
247 +--------------------------------------------------------------------+
248 | PROJECT : GSM-PS (6147) MODULE : CMH_SATS |
249 | STATE : code ROUTINE : sAT_PercentSATT |
250 +--------------------------------------------------------------------+
251
252 PURPOSE : This is the functional counterpart to the %SATT AT command
253 which terminates a SAT session.
254 */
255
256 GLOBAL T_ACI_RETURN sAT_PercentSATT( T_ACI_CMD_SRC srcId,
257 T_ACI_SATT_CS cause )
258 {
259 SHORT cId, dtmfId;
260 T_ACI_SAT_TERM_RESP resp_data;
261
262 psaSAT_InitTrmResp( &resp_data );
263
264 TRACE_FUNCTION ("sAT_PercentSATT()");
265
266 /*
267 *-------------------------------------------------------------------
268 * check command source
269 *-------------------------------------------------------------------
270 */
271 if(!cmh_IsVldCmdSrc (srcId))
272
273 return( AT_FAIL );
274
275
276 cId = psaCC_ctbFindCall( OWN_SRC_INV, CS_SAT_REQ, NO_VLD_CT );
277
278 if( cId EQ NO_ENTRY )
279 {
280 /* Try to stop processing of proactive command SEND DTMF */
281 dtmfId = cmhCC_find_call_for_DTMF();
282 if( dtmfId NEQ NO_ENTRY )
283 {
284 if (psaCC_ctb(dtmfId)->dtmfSrc EQ OWN_SRC_SAT)
285 {
286 ccShrdPrm.dtmf.cnt = 0; /* to avoid double terminal response to SAT */
287 psaCC_StopDTMF( dtmfId );
288 psaSAT_SendTrmResp( RSLT_SESS_USR_TERM, &resp_data );
289 return( AT_CMPL );
290 }
291 /* else it means there is a Send DTMF on process */
292 }
293 }
294
295 #ifdef FF_SAT_E
296 if( cId EQ NO_ENTRY )
297
298 cId = psaCC_ctbFindCall( OWN_SRC_INV, CS_SAT_CSD_REQ, NO_VLD_CT );
299
300 if( (cId EQ NO_ENTRY OR !psaCC_ctb(cId)->SATinv) AND
301 !( satShrdPrm.opchStat NEQ OPCH_IDLE AND
302 (satShrdPrm.cmdDet.cmdType EQ SAT_CMD_OPEN_CHANNEL OR
303 satShrdPrm.cmdDet.cmdType EQ SAT_CMD_SEND_DATA))
304 )
305 {
306 return( AT_FAIL );
307 }
308 #else
309
310 if( cId EQ NO_ENTRY OR
311 !psaCC_ctb(cId)->SATinv OR
312 psaCC_ctb(cId)->calStat NEQ CS_SAT_REQ)
313 {
314 return( AT_FAIL );
315 }
316 #endif /* else, #ifdef FF_SAT_E */
317
318 /*
319 *-------------------------------------------------------------------
320 * check termination cause
321 *-------------------------------------------------------------------
322 */
323 switch( cause )
324 {
325 case( SATT_CS_UserRedialStop ):
326 case( SATT_CS_EndRedial ):
327
328 if ((cId EQ NO_ENTRY) OR
329 (cause EQ SATT_CS_UserRedialStop))
330 {
331 /* respond with "user cleared down..." */
332 psaSAT_SendTrmResp( RSLT_USR_CLR_DWN, &resp_data );
333 }
334 else
335 {
336 /* return network error cause GSM 11.14 / 12.12.3 */
337 /*
338 * Use ctb here because TI compiler 1.22e may have a problem otherwise here.
339 * See cmhCC_SndDiscRsn() for the details.
340 */
341 cmhSAT_NtwErr ((UBYTE)((GET_CAUSE_VALUE(psaCC_ctb(cId)->nrmCs) NEQ NOT_PRESENT_8BIT) ?
342 (psaCC_ctb(cId)->nrmCs|0x80) : ADD_NO_CAUSE));
343 }
344 break;
345 case( SATT_CS_EndSession ):
346 /* respond with "session terminated by user" */
347 psaSAT_SendTrmResp( RSLT_SESS_USR_TERM, &resp_data );
348 break;
349 }
350
351 if( cId NEQ NO_ENTRY )
352 psaCC_FreeCtbNtry (cId);
353
354 #ifdef FF_SAT_E
355 if( satShrdPrm.opchStat NEQ OPCH_IDLE AND
356 (satShrdPrm.cmdDet.cmdType EQ SAT_CMD_OPEN_CHANNEL OR
357 satShrdPrm.cmdDet.cmdType EQ SAT_CMD_SEND_DATA) )
358 {
359 cmhSAT_cleanupOpChnPrms();
360 satShrdPrm.chnTb.chnUsdFlg = FALSE;
361 }
362 #endif /* FF_SAT_E */
363
364 return( AT_CMPL );
365 }
366
367 /*
368 +-------------------------------------------------------------------+
369 | PROJECT : GSM-PS (6147) MODULE : CMH_SATS |
370 | ROUTINE : sAT_PercentEFRSLT |
371 +-------------------------------------------------------------------+
372
373 PURPOSE :
374 */
375 GLOBAL T_ACI_RETURN sAT_PercentEFRSLT (T_ACI_CMD_SRC srcId,
376 T_ACI_EFRSLT_RES result)
377 {
378 TRACE_FUNCTION("sAT_PercentEFRSLT()");
379
380 if(!cmh_IsVldCmdSrc(srcId))
381 {
382 return(AT_FAIL);
383 }
384
385 switch(result)
386 {
387 case EFRSLT_RES_FAIL:
388 psaSAT_FUConfirm(simShrdPrm.fuRef,SIM_FU_ERROR);
389 break;
390
391 case EFRSLT_RES_OK:
392 psaSAT_FUConfirm(simShrdPrm.fuRef,SIM_FU_SUCCESS);
393 break;
394
395 default:
396 ACI_ERR_DESC(ACI_ERR_CLASS_Ext,EXT_ERR_Parameter);
397 return(AT_FAIL);
398 }
399
400 return(AT_CMPL);
401 }
402
403 /*
404 +-------------------------------------------------------------------+
405 | PROJECT : GSM-PS (6147) MODULE : CMH_SATS |
406 | ROUTINE : sAT_PercentSIMEF |
407 +-------------------------------------------------------------------+
408
409 PURPOSE :
410 */
411 GLOBAL T_ACI_RETURN sAT_PercentSIMEF (T_ACI_CMD_SRC srcId,
412 T_ACI_SIMEF_MODE mode)
413 {
414 TRACE_FUNCTION("sAT_PercentSIMEF()");
415
416 if(!cmh_IsVldCmdSrc(srcId))
417 {
418 return(AT_FAIL);
419 }
420
421 switch(mode)
422 {
423 case SIMEF_MODE_ON:
424 case SIMEF_MODE_OFF:
425 simShrdPrm.SIMEFMode[srcId]=mode;
426 break;
427
428 default:
429 ACI_ERR_DESC(ACI_ERR_CLASS_Ext,EXT_ERR_Parameter);
430 return(AT_FAIL);
431 }
432 return(AT_CMPL);
433 }
434
435 #endif /* #ifdef SIM_TOOLKIT */
436
437 /*==== EOF ========================================================*/