FreeCalypso > hg > freecalypso-citrine
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 ========================================================*/ |