comparison src/aci2/aci/cmh_f.c @ 3:93999a60b835

src/aci2, src/condat2: import of g23m/condat source pieces from TCS211
author Mychaela Falconia <falcon@freecalypso.org>
date Mon, 26 Sep 2016 00:29:36 +0000
parents
children
comparison
equal deleted inserted replaced
2:c41a534f33c6 3:93999a60b835
1 /*
2 +-----------------------------------------------------------------------------
3 | Project : GSM-PS (6147)
4 | Modul : CMH_F
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 global functions of the command
18 | handler.
19 +-----------------------------------------------------------------------------
20 */
21
22 #ifndef CMH_F_C
23 #define CMH_F_C
24 #endif
25
26 #include "aci_all.h"
27
28 /*==== INCLUDES ===================================================*/
29
30 #include "aci_cmh.h"
31 #include "cphs.h"
32 #include "aci_cphs.h"
33 #include "ati_cmd.h"
34 #include "aci_cmd.h"
35 #include "ksd.h"
36 #include "l4_tim.h"
37
38 #include "aci_io.h"
39
40 #ifdef FAX_AND_DATA
41 #include "aci_fd.h"
42 #endif
43
44 #ifdef DTI
45 #include "dti.h" /* functionality of the dti library */
46 #include "dti_conn_mng.h"
47 #endif
48 #include "psa.h"
49 #include "psa_mm.h"
50 #include "psa_sim.h"
51 #include "psa_cc.h"
52 #include "psa_sms.h"
53 #include "psa_ss.h"
54 #include "cmh.h"
55 #include "cmh_mm.h"
56 #include "cmh_sim.h"
57 #include "cmh_cc.h"
58 #include "cmh_sms.h"
59 #include "cmh_ss.h"
60
61 #include "aci.h"
62 #include "phb.h"
63 #include "aci_lst.h"
64 #include "conc_sms.h"
65
66
67 #ifdef FAX_AND_DATA
68 #include "psa_ra.h"
69 #include "cmh_ra.h"
70 #include "psa_l2r.h"
71 #include "cmh_l2r.h"
72 #include "psa_tra.h"
73
74 #ifdef FF_FAX
75 #include "psa_t30.h"
76 #include "cmh_t30.h"
77 #endif /* FF_FAX */
78
79 #endif /* FAX_AND_DATA */
80
81 #ifdef GPRS
82 #include "gaci.h"
83 #include "gaci_cmh.h"
84 #include "pcm.h"
85 #include "psa_gmm.h"
86 #include "cmh_gmm.h"
87 #include "psa_sm.h"
88 #include "cmh_sm.h"
89 #include "psa_gppp.h"
90 #include "cmh_gppp.h"
91
92 #endif /* GPRS */
93
94 #ifdef _CONC_TESTING_
95 #include "aci_mfw.h"
96 #endif
97
98 #ifdef UART
99 #include "psa_uart.h"
100 #include "cmh_uart.h"
101 #endif
102
103 #ifdef FF_PSI
104 #include "psa_psi.h"
105 #include "cmh_psi.h"
106 #endif /*FF_PSI*/
107
108
109 #include "rx.h"
110
111 #ifndef _SIMULATION_
112 #include "ffs/ffs.h"
113 #include "ffs_coat.h"
114 #endif
115
116 /*==== CONSTANTS ==================================================*/
117
118 /*==== GLOBALS ====================================================*/
119 #ifdef FF_ATI
120 EXTERN T_CIEV_SIGNAL_BUFFER asCievSignalBuf;
121 EXTERN T_CIEV_SMSFULL_BUFFER asCievSmsFullBuf;
122 #endif /* FF_ATI */
123
124 /*==== TYPES ======================================================*/
125
126
127 /*==== EXPORT =====================================================*/
128 /* MACRO CB_VC() for call-backs used by the voice stack */
129 #ifdef FF_BAT
130
131 #ifdef FF_ATI
132 #if defined SMI OR defined MFW OR defined FF_MMI_RIV
133 #define CB_VC( cbNam ){rAT_##cbNam,rCI_##cbNam,rBAT_##cbNam}
134 #define CB_VC_EXT( cbNam ){rAT_##cbNam##_Ext,rCI_##cbNam,rBAT_##cbNam}
135 #else
136 #define CB_VC( cbNam ){0,rCI_##cbNam,rBAT_##cbNam} /* ACI only */
137 #ifdef _CONC_TESTING_ /* for _CONC_TESTING for ACI-only */
138 #define CB_VC_EXT( cbNam ){rAT_##cbNam##_Ext,rCI_##cbNam,rBAT_##cbNam}
139 #else
140 #define CB_VC_EXT( cbNam ){0,rCI_##cbNam,rBAT_##cbNam}
141 #endif
142 #endif
143 #else
144 #if defined SMI OR defined MFW OR defined FF_MMI_RIV
145 #define CB_VC( cbNam ){rAT_##cbNam,0,rBAT_##cbNam}
146 #define CB_VC_EXT( cbNam ){rAT_##cbNam##_Ext,0,rBAT_##cbNam}
147 #else
148 #define CB_VC( cbNam ){0,0,0}
149 #define CB_EXT( cbNam ){0,0,0}
150 #endif
151 #endif
152
153 /* MACRO CB_FD() for call-backs used by the F&D stack */
154 #ifdef FAX_AND_DATA
155 #define CB_FD( cbNam ){0,rCI_##cbNam,rBAT_##cbNam}
156 #else
157 #define CB_FD( cbNam ){0,0,0}
158 #endif
159
160 /* MACRO CB_ST() for call-backs used by SIM toolkit */
161 #ifdef SIM_TOOLKIT
162 #ifdef FF_ATI
163 #if defined SMI OR defined MFW OR defined FF_MMI_RIV
164 #define CB_ST( cbNam ){rAT_##cbNam,rCI_##cbNam,rBAT_##cbNam}
165 #else
166 #define CB_ST( cbNam ){0,rCI_##cbNam,rBAT_##cbNam}
167 #endif
168 #else
169 #if defined SMI OR defined MFW OR defined FF_MMI_RIV
170 #define CB_ST( cbNam ){rAT_##cbNam,0,rBAT_##cbNam}
171 #else
172 #define CB_ST( cbNam ){0,0,0}
173 #endif
174 #endif
175 #else
176 #define CB_ST( cbNam ){0,0,0}
177 #endif
178
179 /* MACRO CB_GP() for call-backs used by GPRS */
180 #ifdef GPRS
181 #ifdef FF_ATI
182 #if defined SMI OR defined MFW OR defined FF_MMI_RIV
183 #define CB_GP( cbNam ){rAT_##cbNam,rCI_##cbNam,rBAT_##cbNam}
184 #else
185 #define CB_GP( cbNam ){0,rCI_##cbNam,rBAT_##cbNam}
186 #endif
187 #else
188 #if defined SMI OR defined MFW OR defined FF_MMI_RIV
189 #define CB_GP( cbNam ){rAT_##cbNam,0,rBAT_##cbNam}
190 #else
191 #define CB_GP( cbNam ){0,0,0}
192 #endif
193 #endif
194 #else
195 #define CB_GP( cbNam ){0,0,0}
196 #endif /* GPRS */
197
198 #else
199
200 #ifdef FF_ATI
201 #if defined SMI OR defined MFW OR defined FF_MMI_RIV
202 #define CB_VC( cbNam ){rAT_##cbNam,rCI_##cbNam}
203 #define CB_VC_EXT( cbNam ){rAT_##cbNam##_Ext,rCI_##cbNam}
204 #else
205 #define CB_VC( cbNam ){0,rCI_##cbNam}
206 #ifdef _CONC_TESTING_ /* for _CONC_TESTING for ACI-only */
207 #define CB_VC_EXT( cbNam ){rAT_##cbNam##_Ext,rCI_##cbNam}
208 #else
209 #define CB_VC_EXT( cbNam ){0,rCI_##cbNam}
210 #endif
211 #endif
212 #else
213 #if defined SMI OR defined MFW OR defined FF_MMI_RIV
214 #define CB_VC( cbNam ){rAT_##cbNam,0}
215 #define CB_VC_EXT( cbNam ){rAT_##cbNam##_Ext,0}
216 #else
217 #define CB_VC( cbNam ){0,0}
218 #define CB_EXT( cbNam ){0,0}
219 #endif
220 #endif
221
222 /* MACRO CB_FD() for call-backs used by the F&D stack */
223 #ifdef FAX_AND_DATA
224 #define CB_FD( cbNam ){0,rCI_##cbNam}
225 #else
226 #define CB_FD( cbNam ){0,0}
227 #endif
228
229 /* MACRO CB_ST() for call-backs used by SIM toolkit */
230 #ifdef SIM_TOOLKIT
231 #ifdef FF_ATI
232 #if defined SMI OR defined MFW OR defined FF_MMI_RIV
233 #define CB_ST( cbNam ){rAT_##cbNam,rCI_##cbNam}
234 #else
235 #define CB_ST( cbNam ){0,rCI_##cbNam}
236 #endif
237 #else
238 #if defined SMI OR defined MFW OR defined FF_MMI_RIV
239 #define CB_ST( cbNam ){rAT_##cbNam,0}
240 #else
241 #define CB_ST( cbNam ){0,0}
242 #endif
243 #endif
244 #else
245 #define CB_ST( cbNam ){0,0}
246 #endif
247
248 /* MACRO CB_GP() for call-backs used by GPRS */
249 #ifdef GPRS
250 #ifdef FF_ATI
251 #if defined SMI OR defined MFW OR defined FF_MMI_RIV
252 #define CB_GP( cbNam ){rAT_##cbNam,rCI_##cbNam}
253 #else
254 #define CB_GP( cbNam ){0,rCI_##cbNam}
255 #endif
256 #else
257 #if defined SMI OR defined MFW OR defined FF_MMI_RIV
258 #define CB_GP( cbNam ){rAT_##cbNam,0}
259 #else
260 #define CB_GP( cbNam ){0,0}
261 #endif
262 #endif
263 #else
264 #define CB_GP( cbNam )
265 #endif /* GPRS */
266
267 #endif /* FF_BAT */
268
269 /* call back jump table */
270 GLOBAL const T_VOID_FUNC RATJmpTbl[RAT_MAX][CMD_MODE_MAX] =
271 {
272 CB_VC( OK ), /* RAT_OK */
273 CB_VC( CONNECT ), /* RAT_CONNECT */
274 CB_VC( PlusCME ), /* RAT_CME */
275 CB_VC( NO_CARRIER ), /* RAT_NO_CARRIER */
276 CB_VC( PlusCRING ), /* RAT_CRING */
277 CB_FD( PlusDR ), /* RAT_DR */
278 CB_FD( PlusCR ), /* RAT_CR */
279 CB_VC( PlusCPIN ), /* RAT_CPIN */
280 CB_VC( PlusCOPS ), /* RAT_COPS */
281 CB_VC( PlusCREG ), /* RAT_CREG */
282 CB_VC( PlusCCWA ), /* RAT_CCWA */
283 CB_VC( PlusCLIP ), /* RAT_CLIP */
284 CB_VC( PlusCDIP ), /* RAT_CDIP */
285 CB_VC( PlusCOLP ), /* RAT_COLP */
286 CB_VC( PlusCRING_OFF ), /* RAT_CRING_OFF */
287
288 #if defined (FF_FAX) AND defined (DTI)
289 CB_FD( PlusFCO ), /* RAT_FCO */
290 CB_FD( PlusFIS ), /* RAT_FIS */
291 CB_FD( PlusFTI ), /* RAT_FTI */
292 CB_FD( PlusFCS ), /* RAT_FCS */
293 CB_FD( PlusFCI ), /* RAT_FCI */
294 #endif /* FF_FAX */
295
296 CB_VC( PlusCMS ), /* RAT_CMS */
297 CB_VC( PlusCSMS ), /* RAT_CSMS */
298 CB_VC( PlusCMGS ), /* RAT_CMGS */
299 CB_VC( PlusCMSS ), /* RAT_CMSS */
300 CB_VC( PlusCMGW ), /* RAT_CMGW */
301 CB_VC( PlusCDS ), /* RAT_CDS */
302 CB_VC( PlusCMGC ), /* RAT_CMGC */
303 CB_VC( PlusCMGD ), /* RAT_CMGD */
304 CB_VC( PlusCMGR ), /* RAT_CMGR */
305 CB_VC( PlusCMGL ), /* RAT_CMGL */
306 #ifdef _CONC_TESTING_
307 CB_VC_EXT( PlusCMTI ), /* RAT_CMTI */
308 CB_VC_EXT( PlusCMT ), /* RAT_CMT */
309 #else
310 CB_VC( PlusCMTI ), /* RAT_CMTI */
311 CB_VC( PlusCMT ), /* RAT_CMT */
312 #endif
313 CB_VC( PlusCBM ), /* RAT_CBM */
314 CB_VC( PlusCPMS ), /* RAT_CPMS */
315
316 #if defined (FF_FAX) AND defined (DTI)
317
318 CB_FD( PlusFHT ), /* RAT_FHT */
319 CB_FD( PlusFHR ), /* RAT_FHR */
320 CB_FD( PlusFSA ), /* RAT_FSA */
321 CB_FD( PlusFPA ), /* RAT_FPA */
322 CB_FD( PlusFPW ), /* RAT_FPW */
323 CB_FD( PlusFET ), /* RAT_FET */
324 CB_FD( PlusFVO ), /* RAT_FVO */
325 CB_FD( PlusFPO ), /* RAT_FPO */
326 CB_FD( PlusFPI ), /* RAT_FPI */
327 CB_FD( PlusFNF ), /* RAT_FNF */
328 CB_FD( PlusFNS ), /* RAT_FNS */
329 CB_FD( PlusFNC ), /* RAT_FNC */
330 CB_FD( PlusFHS ), /* RAT_FHS */
331 CB_FD( PlusFPS ), /* RAT_FPS */
332 CB_FD( PlusFTC ), /* RAT_FTC */
333 #endif /* FF_FAX */
334
335 CB_FD( PlusILRR ), /* RAT_ILRR */
336 CB_VC( BUSY ), /* RAT_BUSY */
337 CB_VC( NO_ANSWER ), /* RAT_NO_ANSWER */
338 CB_VC( PercentSIMREM ), /* RAT_SIMREM */
339 CB_VC( PlusCLIR ), /* RAT_CLIR */
340 CB_VC( PercentCOLR ), /* RAT_COLR */
341 CB_VC( PlusCSSI ), /* RAT_CSSI */
342 CB_VC( PlusCSSU ), /* RAT_CSSU */
343 CB_VC( PlusCUSD ), /* RAT_CUSD */
344 CB_VC( PlusCCFC ), /* RAT_CCFC */
345 CB_VC( PlusCLCK ), /* RAT_CLCK */
346 CB_VC( PlusCIMI ), /* RAT_CIMI */
347 CB_ST( PercentSATI ), /* RAT_SATI */
348 CB_ST( PercentSATE ), /* RAT_SATE */
349 CB_VC( PercentKSIR ), /* RAT_KSIR */
350 CB_VC( PercentCPI ), /* RAT_CPI */
351 CB_VC( PercentCTYI ), /* RAT_CTYI */
352 CB_VC( PlusCNUM ), /* RAT_CNUM */
353 CB_VC( PlusCPOL ), /* RAT_CPOL */
354 CB_VC( PlusCCCM ), /* RAT_CCCM */
355 CB_VC( PercentCTV ), /* RAT_CTV */
356 CB_ST( PercentSATN ), /* RAT_SATN */
357 CB_ST( PercentSATA ), /* RAT_SATA */
358 CB_VC( sms_ready), /* RAT_SMS_READY */
359 CB_VC( phb_status), /* RAT_PHB_STATUS */
360 CB_VC( PercentSIMINS ), /* RAT_SIMINS */
361 CB_VC( PlusCRSM ), /* RAT_CRSM */
362 CB_VC( PlusCSIM ), /* RAT_CSIM */
363 CB_VC( PercentCCBS ), /* RAT_CCBS */
364 CB_VC( PlusCCWV ), /* RAT_CCWV */
365 CB_VC( PercentCNAP ), /* RAT_CNAP */
366 CB_VC( SignalSMS ), /* RAT_SIG_SMS */
367 CB_VC( PlusCLAN ), /* RAT_CLAN */
368 CB_VC( PlusCLAE ), /* RAT_CLAE */
369 CB_VC( PercentCSQ ), /* RAT_CSQ */
370 CB_VC( PercentALS ), /* RAT_ALS */
371
372 CB_VC( PlusCTZV ), /* RAT_CTZR */
373 CB_VC( PercentCREG ), /* RAT_P_CREG */
374
375
376 #ifdef GPRS
377
378 CB_GP( PlusCGACT ), /* RAT_CGACT */
379 CB_GP( PlusCGDATA ), /* RAT_CGDATA */
380 CB_GP( PlusCGANS ), /* RAT_CGANS */
381 CB_GP( PlusCGEREP ), /* RAT_CGEREP */
382 CB_GP( PlusCGREG ), /* RAT_CGREG */
383 CB_GP( changedQOS ), /* RAT_QOS_MOD */
384 CB_GP( PercentSNCNT ), /* RAT_SNCNT */
385 CB_GP( PercentCGREG ), /* RAT_P_CGREG */
386 CB_GP( PercentCGEV ), /* RAT_P_CGEV */
387 #endif /* GPRS */
388
389 #ifdef FF_EM_MODE
390 CB_VC( PercentEM ), /* RAT_EM */
391 CB_VC( PercentEMET ), /* RAT_EMET */
392 CB_VC( PercentEMETS ), /* RAT_EMETS */
393 #endif /* FF_EM_MODE */
394
395 #ifdef FF_CPHS
396 CB_VC( PercentCPNUMS ), /* RAT_CPNUMS */
397 CB_VC( PercentCPVWI ), /* RAT_CPVWI */
398 CB_VC( PercentCPROAM ), /* RAT_CPROAM */
399 #endif /* FF_CPHS */
400 CB_VC( PlusCIEV ), /* RAT_CIEV */
401 CB_VC( PercentRDL ), /* RAT_RDL */
402 CB_VC( PercentRDLB ), /* RAT_RDLB */
403 CB_VC( PercentCCCN ), /* RAT_CCCN */
404 CB_VC( PercentCSSN ), /* RAT_CSSN */
405
406
407 CB_VC( PercentCSTAT ), /* RAT_CSTAT */
408
409
410
411 CB_VC( Z ), /* RAT_Z */
412
413
414 CB_VC( PercentCPRSM ), /* RAT_CPRSM */
415
416 CB_VC( PercentCTZV ), /*RAT_P_CTZV*/
417 CB_VC( PercentCPRI ), /*RAT_P_CPRI*/
418 CB_VC( PercentSIMEF ), /*RAT_P_SIMEF*/
419
420 CB_VC( PercentCNIV ), /*RAT_P_CNIV*/
421
422 CB_VC( PercentCOPS ), /* RAT_P_COPS */
423 CB_VC( PercentCMGR ), /* RAT_P_CMGR */
424 CB_VC( PercentCMGL ) /* RAT_P_CMGL */
425
426 };
427
428 /*==== VARIABLES ==================================================*/
429 /* needed for function percentCSTAT_indication() */
430 static UBYTE percentCSTAT_stateField;
431
432 LOCAL T_ACI_CMD_MODE aci_cmd_src_mode[CMD_SRC_MAX];
433
434 /*==== FUNCTIONS ==================================================*/
435
436 /*
437 +-------------------------------------------------------------------+
438 | PROJECT : GSM-PS (6147) MODULE : CMH |
439 | ROUTINE : cmh_Init |
440 +-------------------------------------------------------------------+
441
442 PURPOSE : initialize the command handler.
443
444 */
445
446
447 GLOBAL void cmh_Init ( void )
448 {
449 T_ACI_CMD_SRC index;
450
451 TRACE_FUNCTION ("cmh_Init()");
452
453 mmEntStat.curCmd = AT_CMD_NONE;
454 mmEntStat.entOwn = OWN_NONE;
455 simEntStat.curCmd = AT_CMD_NONE;
456 simEntStat.entOwn = OWN_NONE;
457 smsShrdPrm.smsEntStat.curCmd = AT_CMD_NONE;
458 smsShrdPrm.smsEntStat.entOwn = OWN_NONE;
459
460 #ifdef UART
461 for (index=CMD_SRC_LCL; index<CMD_SRC_MAX; index++)
462 {
463 uartEntcurCmd[index] = AT_CMD_NONE;
464 }
465
466 uartShrdPrm.dtr_behaviour = DTR_BEHAVIOUR_Ignore;
467 uartShrdPrm.dtr_clearcall = FALSE;
468 cmhUART_init_ipr_params();
469 #endif
470
471 #ifdef FF_PSI
472 psiShrdPrm.dtr_behaviour = DTR_BEHAVIOUR_Ignore;
473 psiShrdPrm.dtr_clearcall = FALSE;
474 #endif /*FF_PSI*/
475
476
477 #ifdef FAX_AND_DATA
478 #ifdef FF_FAX
479 t30EntStat.curCmd = AT_CMD_NONE;
480 t30EntStat.entOwn = OWN_NONE;
481 #endif
482
483 l2rEntStat.curCmd = AT_CMD_NONE;
484 l2rEntStat.entOwn = OWN_NONE;
485 raEntStat.curCmd = AT_CMD_NONE;
486 raEntStat.entOwn = OWN_NONE;
487 #endif
488
489 #ifndef _SIMULATION_
490 /* Read status of ALSlock */
491 if (FFS_fread ("/gsm/com/ALSlock",&ALSlock,sizeof(ALSlock)) NEQ sizeof(ALSlock))
492 /* if failed, reset to default */
493 ALSlock = ALS_MOD_NOTPRESENT;
494 else if (ALSlock NEQ ALS_MOD_SPEECH AND ALSlock NEQ ALS_MOD_AUX_SPEECH)
495 /* if unknown value was stored */
496 ALSlock = ALS_MOD_NOTPRESENT;
497 #else
498 ALSlock = ALS_MOD_NOTPRESENT;
499 #endif
500
501 #ifdef GPRS
502 gaci_init();
503 #endif
504
505 #ifdef FF_ATI
506 for( index=0; index < CIEV_BUF_SIZE; index++ )
507 {
508
509 asCievSignalBuf.asBufferValues[index] = CIND_SIGNAL_INDICATOR_INVALID;
510 asCievSmsFullBuf.asBufferValues[index] = CIND_SMSFULL_INDICATOR_INVALID;
511
512 }
513
514 asCievSignalBuf.uiLastIndex = 0;
515 asCievSmsFullBuf.uiLastIndex = 0;
516 #endif /* FF_ATI */
517
518 rx_Init(NULL); /* reset the signal strength callback */
519
520 for(percentCSTAT_stateField = 0,index = 0;
521 index < STATE_MSG_MAX_ENTITIES; index++)
522 {
523 percentCSTAT_stateField |= 1U << index;
524 }
525
526 }
527
528 /*
529 +-------------------------------------------------------------------+
530 | PROJECT : GSM-PS (6147) MODULE : CMH |
531 | ROUTINE : cmh_Reset |
532 +-------------------------------------------------------------------+
533
534 PURPOSE : Reset the command handler to defaults.
535 */
536
537 /* MACRO: initializer for command parameter */
538 #define INIT_PARM( entity, dest, def )\
539 {cmhPrm[srcId].entity##CmdPrm.dest = def;}
540
541 #ifdef FAX_AND_DATA
542 #define INIT_PARM_FND( entity, dest, def )\
543 {fnd_cmhPrm[srcId].entity##CmdPrm.dest = def;}
544 #endif /* FAX_AND_DATA */
545
546 GLOBAL void cmh_Reset ( T_ACI_CMD_SRC srcId, BOOL atz )
547 {
548 UINT uiCount;
549
550 TRACE_EVENT_P1("Parameters reset for source: %d", srcId);
551
552 /* set default parms for command parameters */
553
554 INIT_PARM( cc, CLIRmode, CLIR_MOD_Subscript );
555 INIT_PARM( cc, DCDmode, DCD_DISABLE_AFTER_CALL );
556 INIT_PARM( cc, CSTAtoa.ton, TON_Unknown );
557 INIT_PARM( cc, CSTAtoa.npi, NPI_IsdnTelephony ); /* according to GSM 07.07 description of AT+CSTA */
558 INIT_PARM( cc, CSTAdef, TRUE );
559 INIT_PARM( cc, CHLDmode, CHLD_MOD_NotPresent );
560 INIT_PARM( cc, CCUGidx, CCUG_IDX_0 );
561 INIT_PARM( cc, CCUGinfo, CCUG_INFO_No );
562 INIT_PARM( cc, CCUGmode, CCUG_MOD_DisableTmp );
563 INIT_PARM( cc, mltyCncFlg, 0 );
564 INIT_PARM( cc, mltyDscFlg, 0 );
565
566 /* Check if ALS is locked to a line */
567 if (ALSlock EQ ALS_MOD_NOTPRESENT)
568 {
569 INIT_PARM( cc, ALSmode, ALS_MOD_SPEECH ); /* Use Default line */
570 }
571 else
572 {
573 INIT_PARM( cc, ALSmode, ALSlock ); /* Lock to specific line */
574 }
575
576 INIT_PARM( cc, CTTYmode, CTTY_MOD_Disable );
577
578 INIT_PARM( cc, CSCNcc_mode.CcCSCNModeState, CC_CSCN_MOD_STATE_INVALID ); /* initialize the shared params for %CSCN */
579 INIT_PARM( cc, CSCNcc_mode.CcCSCNModeDirection, CC_CSCN_MOD_DIR_INVALID );
580
581
582 INIT_PARM( mm, COPSfrmt, COPS_FRMT_Long );
583 INIT_PARM( mm, NRGsrvMode, NRG_SVMD_Full );
584 INIT_PARM( mm, NRGregMode, NRG_RGMD_Auto );
585 INIT_PARM( mm, NRGoprFrmt, NRG_FRMT_Long );
586 INIT_PARM( mm, CTZRMode, CTZR_MODE_OFF );
587 INIT_PARM( mm, CSQworkStat, CSQ_Disable );
588
589 INIT_PARM( mm, sIndicationParam.sMmCINDSettings.sCindSignalParam, CIND_SIGNAL_INDICATOR_INVALID ); /* initialize the shared params for %CIND */
590 INIT_PARM( mm, sIndicationParam.sMmCINDSettings.sCindSmsFullParam, CIND_SMSFULL_INDICATOR_INVALID );
591 INIT_PARM( mm, sIndicationParam.sMmCMERSettings.sCmerModeParam, CMER_MODE_INVALID );
592 INIT_PARM( mm, sIndicationParam.sMmCMERSettings.sCmerIndParam, CMER_INDICATOR_INVALID );
593 INIT_PARM( mm, sIndicationParam.sMmCMERSettings.sCmerBfrParam, CMER_BFR_INVALID );
594
595
596
597 /* initalize SS password */
598 /* INIT_PARM( ss, CXXXpwd[0], 0x0 ); */
599 strcpy((CHAR *)cmhPrm[srcId].ssCmdPrm.CXXXpwd,"FFFF");
600 INIT_PARM( ss, CXXXnewPwd[0],0x0 );
601 INIT_PARM( ss, mltyTrnFlg, 0 );
602
603 INIT_PARM( ss, CSCNss_mode.SsCSCNModeState, SS_CSCN_MOD_STATE_INVALID ); /* initialize the shared params for %CSCN */
604 INIT_PARM( ss, CSCNss_mode.SsCSCNModeDirection, SS_CSCN_MOD_DIR_INVALID );
605
606 if (!atz)
607 INIT_PARM( sim, CNUMActRec, 1 );
608
609 INIT_PARM( sim, CPOLfrmt, CPOL_FRMT_Numeric );
610 INIT_PARM( sim, CPOLact, CPOL_ACT_None );
611 INIT_PARM( sim, CPOLidx, NOT_PRESENT_8BIT );
612 INIT_PARM( sim, CPOLidx2, NOT_PRESENT_8BIT );
613 INIT_PARM( sim, CPOLmode, CPOL_MOD_NotPresent );
614
615 INIT_PARM( phb, cmhStor, PB_STOR_Ad );
616 INIT_PARM( phb, phbStor, ADN );
617 INIT_PARM( phb, fndRec, 0 );
618 INIT_PARM( phb, wrtRec, 0 );
619 INIT_PARM( phb, curCmd, AT_CMD_NONE );
620
621 #ifdef FAX_AND_DATA
622 INIT_PARM_FND( l2r, CRLPiws, L2R_K_IWF_MS_DEF );
623 INIT_PARM_FND( l2r, CRLPmws, L2R_K_MS_IWF_DEF );
624 INIT_PARM_FND( l2r, CRLPt1, L2R_T1_DEF );
625 INIT_PARM_FND( l2r, CRLPn2, L2R_N2_DEF );
626 INIT_PARM_FND( l2r, DSdir, L2R_P0_DEF );
627 INIT_PARM_FND( l2r, DScomp, DS_COMP_DoNotDisc );
628 INIT_PARM_FND( l2r, DSmaxDict, L2R_P1_DEF );
629 INIT_PARM_FND( l2r, DSmaxStr, L2R_P2_DEF );
630
631 #ifdef FF_FAX
632 cmhT30_InitFAXPrms( srcId );
633 cmhT30_RstNgtPrms();
634 #endif /* FF_FAX */
635 #endif /* FAX_AND_DATA */
636
637 /* only if ATZ */
638 if(atz)
639 {
640 psaCC_init_mtcbearer();
641 }
642
643 #ifdef FF_ATI
644 for( uiCount=0; uiCount < CIEV_BUF_SIZE; uiCount++ )
645 {
646 asCievSignalBuf.asBufferValues[uiCount] = CIND_SIGNAL_INDICATOR_INVALID;
647 asCievSmsFullBuf.asBufferValues[uiCount] = CIND_SMSFULL_INDICATOR_INVALID;
648 }
649 asCievSignalBuf.uiLastIndex = 0;
650 asCievSmsFullBuf.uiLastIndex = 0;
651 #endif /* FF_ATI */
652 rx_Init(NULL); /* reset the signal strength callback */
653 }
654
655 /*
656 +-------------------------------------------------------------------+
657 | PROJECT : GSM-PS (6147) MODULE : CMH |
658 | ROUTINE : cmh_IsVldCmdSrc |
659 +-------------------------------------------------------------------+
660
661 PURPOSE : check for a valid command source.
662
663 */
664
665 GLOBAL BOOL cmh_IsVldCmdSrc ( T_ACI_CMD_SRC srcId )
666 {
667 if( srcId > CMD_SRC_NONE AND srcId < CMD_SRC_MAX )
668
669 return TRUE;
670
671 return( FALSE );
672 }
673
674 /*
675 +-------------------------------------------------------------------+
676 | PROJECT : GSM-PS (6147) MODULE : CMH |
677 | ROUTINE : qAT_ErrDesc |
678 +-------------------------------------------------------------------+
679
680 PURPOSE : query error description of last error.
681
682 */
683
684 GLOBAL T_ACI_ERR_DESC qAT_ErrDesc ( void )
685 {
686 return( aciErrDesc );
687 }
688
689 /*
690 +-------------------------------------------------------------------+
691 | PROJECT : GSM-PS (6147) MODULE : CMH |
692 | ROUTINE : sAT_end_ussd |
693 +-------------------------------------------------------------------+
694
695 PURPOSE : Give the user the opportunity to end at any time a USSD transaction.
696 */
697
698 GLOBAL T_ACI_RETURN sAT_end_ussd ( T_ACI_CMD_SRC srcId )
699 {
700 UBYTE srcBuf; /* buffers current source of command */
701 SHORT sId;
702
703 TRACE_FUNCTION("sAT_end_ussd( )");
704
705 sId = psaSS_stbFindActSrv( NO_ENTRY );
706
707 if( sId NEQ NO_ENTRY )
708 {
709 if(ssShrdPrm.stb[sId].ussd_operation)
710 {
711 psaSS_EndTrns(sId);
712 ssShrdPrm.stb[sId].ntryUsdFlg = FALSE;
713 ssShrdPrm.stb[sId].ussd_operation = FALSE; /* probably not really necessary */
714 return(AT_CMPL);
715 }
716 if(ssShrdPrm.stb[sId].curCmd EQ KSD_CMD_USSD OR
717 ssShrdPrm.stb[sId].curCmd EQ AT_CMD_CUSD)
718 {
719 srcBuf = ssShrdPrm.stb[sId].srvOwn;
720 psaSS_EndTrns(sId);
721 ssShrdPrm.stb[sId].ntryUsdFlg = FALSE;
722 ssShrdPrm.stb[sId].ussd_operation = FALSE; /* probably not really necessary */
723 ssShrdPrm.stb[sId].curCmd = AT_CMD_NONE;
724 if( srcBuf NEQ srcId )
725 {
726 R_AT( RAT_CME, srcBuf )
727 ( ssShrdPrm.stb[sId].curCmd, CME_ERR_Unknown );
728 }
729 return( AT_CMPL );
730 }
731 }
732 return( AT_FAIL );
733
734 }
735
736
737 /*
738 +-------------------------------------------------------------------+
739 | PROJECT : GSM-PS (6147) MODULE : CMH |
740 | ROUTINE : sAT_Abort |
741 +-------------------------------------------------------------------+
742
743 PURPOSE : abort command execution for passed command.
744
745 */
746
747 GLOBAL T_ACI_RETURN sAT_Abort ( T_ACI_CMD_SRC srcId,
748 T_ACI_AT_CMD cmd )
749 {
750 UBYTE idx; /* holds call table index */
751 UBYTE srcBuf; /* buffers current source of command */
752 BOOL doneFlg = FALSE; /* flags that an action was done */
753 USHORT nsapi_set = 0; /* for deactivation of context if activation
754 command is aborted */
755 SHORT ret_val = -1; /* Return value used when AT+COPS is aborted */
756 TRACE_FUNCTION ("sAT_Abort()");
757 /*
758 *-------------------------------------------------------------------
759 * determine if command is abortable
760 *-------------------------------------------------------------------
761 */
762 switch( cmd )
763 {
764 /*
765 *---------------------------------------------------------------
766 * for SIM related commands
767 *---------------------------------------------------------------
768 */
769 case( AT_CMD_CFUN ): /* +CFUN command id */
770 case( AT_CMD_BAND ): /* %BAND command id */
771 case( AT_CMD_CPIN ): /* +CPIN command id */
772 if( simEntStat.curCmd EQ cmd )
773 {
774 TRACE_EVENT("Command abortion for CFUN/CPIN");
775 if( simEntStat.entOwn NEQ srcId )
776 {
777 R_AT( RAT_CME, simEntStat.entOwn )
778 ( cmd, CME_ERR_Unknown );
779 }
780 simEntStat.entOwn = OWN_NONE;
781 simEntStat.curCmd = AT_CMD_NONE;
782 return( AT_CMPL );
783 }
784 else if( mmEntStat.curCmd EQ cmd ) /* can happen with AT%band */
785 {
786 TRACE_EVENT("Command abortion for %%BAND");
787 if( mmEntStat.entOwn NEQ srcId )
788 {
789 R_AT( RAT_CME, simEntStat.entOwn )
790 ( cmd, CME_ERR_Unknown );
791 }
792 mmEntStat.entOwn = OWN_NONE;
793 mmEntStat.curCmd = AT_CMD_NONE;
794 return( AT_CMPL );
795 }
796 break;
797
798 /*
799 *---------------------------------------------------------------
800 * for phone book related commands
801 *---------------------------------------------------------------
802 */
803 case( AT_CMD_CPBW ):
804 if (cmhPrm[srcId].phbCmdPrm.curCmd EQ AT_CMD_CPBW)
805 {
806 cmhPrm[srcId].phbCmdPrm.curCmd = AT_CMD_NONE;
807 return (AT_CMPL);
808 }
809 break;
810
811 /*
812 *---------------------------------------------------------------
813 * for MM related commands
814 *---------------------------------------------------------------
815 */
816 case( AT_CMD_COPS ): /* +COPS command id */
817 case( AT_CMD_P_COPS ): /* %COPS command id */
818 case( AT_CMD_NRG ): /* %NRG command id */
819 if( mmEntStat.curCmd EQ cmd )
820 {
821 TRACE_EVENT("Command abortion for COPS/NRG");
822 if( mmEntStat.entOwn NEQ srcId )
823 {
824 R_AT( RAT_CME, mmEntStat.entOwn )
825 ( cmd, CME_ERR_Unknown );
826 }
827 if( (cmd EQ AT_CMD_COPS) OR (cmd EQ AT_CMD_P_COPS) )
828 {
829 mmShrdPrm.regMode = mmShrdPrm.regModeBeforeAbort; /* AT_CMD_COPS aborted, restore regMode and COPSmode */
830 mmShrdPrm.COPSmode = mmShrdPrm.COPSmodeBeforeAbort;
831
832 switch (mmShrdPrm.COPSmode)
833 {
834 case COPS_MOD_Dereg:
835 #if defined (GPRS) AND defined (DTI)
836 mmShrdPrm.nrgCs = GMMREG_DT_COMB;
837 ret_val = psaG_MM_CMD_DEREG ( mmShrdPrm.nrgCs );
838 #else
839 mmShrdPrm.nrgCs = CS_SIM_REM;
840 ret_val = psaMM_DeRegistrate();
841 #endif
842 break;
843
844 case COPS_MOD_Auto:
845 #if defined (GPRS) AND defined (DTI)
846 ret_val = psaG_MM_CMD_REG (); /* register to network */
847 #else
848 ret_val = psaMM_Registrate(); /* register to network */
849 #endif
850 break;
851
852 case COPS_MOD_Man:
853 if( mmShrdPrm.usedPLMN.v_plmn EQ VLD_PLMN )
854 {
855 mmShrdPrm.slctPLMN = mmShrdPrm.usedPLMN;
856 }
857 else
858 {
859 mmShrdPrm.slctPLMN.v_plmn = VLD_PLMN;
860 cmhMM_CnvrtINT2PLMN( 0xFFF,
861 0xFFF,
862 mmShrdPrm.slctPLMN.mcc,
863 mmShrdPrm.slctPLMN.mnc );
864 }
865
866 #if defined (GPRS) AND defined (DTI)
867 ret_val = psaG_MM_CMD_NET_SEL(); /* register to network */
868 #else
869 ret_val = psaMM_NetSel(); /* register to network */
870 #endif
871 break;
872
873 case COPS_MOD_Both:
874 if (mmShrdPrm.regMode EQ MODE_AUTO)
875 {
876 mmShrdPrm.regModeAutoBack = FALSE;
877 #if defined (GPRS) AND defined (DTI)
878 ret_val = psaG_MM_CMD_REG (); /* register to network */
879 #else
880 ret_val = psaMM_Registrate(); /* register to network */
881 #endif
882 }
883 else
884 {
885 mmShrdPrm.regModeAutoBack = TRUE;
886 if( mmShrdPrm.usedPLMN.v_plmn EQ VLD_PLMN )
887 {
888 mmShrdPrm.slctPLMN = mmShrdPrm.usedPLMN;
889 }
890 else
891 {
892 mmShrdPrm.slctPLMN.v_plmn = VLD_PLMN;
893 cmhMM_CnvrtINT2PLMN( 0xFFF,
894 0xFFF,
895 mmShrdPrm.slctPLMN.mcc,
896 mmShrdPrm.slctPLMN.mnc );
897 }
898 }
899 #if defined (GPRS) AND defined (DTI)
900 ret_val = psaG_MM_CMD_NET_SEL(); /* register to network */
901 #else
902 ret_val = psaMM_NetSel(); /* register to network */
903 #endif
904 break;
905 } /* end of switch case */
906
907 if (ret_val < 0)
908 {
909 TRACE_EVENT( "FATAL RETURN in sAT_Abort()" );
910 ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Internal );
911 }
912 } /* end of AT_CMD_COPS */
913
914 mmEntStat.entOwn = OWN_NONE;
915 mmEntStat.curCmd = AT_CMD_NONE;
916 return( AT_CMPL );
917 }
918 break;
919
920 /*
921 *---------------------------------------------------------------
922 * for CC related commands
923 *---------------------------------------------------------------
924 */
925 case( AT_CMD_D ): /* D command id */
926
927 for (idx = 0; idx < MAX_CALL_NR; idx++)
928 {
929 if (ccShrdPrm.ctb[idx] NEQ NULL)
930 {
931 if ((psaCC_ctb(idx)->curCmd EQ cmd AND
932 (psaCC_ctb(idx)->calStat EQ CS_ACT_REQ OR
933 psaCC_ctb(idx)->calStat EQ CS_DSC_REQ))
934 OR
935 (psaCC_ctb(idx)->calStat EQ CS_ACT AND
936 (cmhCC_getcalltype(idx) NEQ VOICE_CALL)))
937 {
938 doneFlg = TRUE;
939 srcBuf = psaCC_ctb(idx)->curSrc;
940
941 cmhCC_tstAndUnflagCall( idx, &cmhPrm[srcBuf].ccCmdPrm.mltyCncFlg );
942 cmhCC_flagCall ( idx, &cmhPrm[srcId ].ccCmdPrm.mltyDscFlg );
943
944 psaCC_ctb(idx)->curCmd = AT_CMD_ABRT;
945 psaCC_ctb(idx)->curSrc = srcId;
946 psaCC_ctb(idx)->nrmCs = MNCC_CAUSE_CALL_CLEAR;
947
948 psaCC_ClearCall (idx);
949
950 if( srcBuf NEQ srcId )
951 {
952 R_AT( RAT_NO_CARRIER, srcBuf ) ( AT_CMD_D, idx+1 );
953 }
954 }
955 }
956 }
957 if( doneFlg EQ TRUE)
958 return( AT_EXCT );
959
960 for( idx = 0; idx < MAX_CALL_NR; idx++ )
961 {
962 if (ccShrdPrm.ctb[idx] NEQ NULL AND
963 psaCC_ctb(idx)->curCmd EQ cmd AND
964 psaCC_ctb(idx)->calStat EQ CS_MDF_REQ)
965 {
966 srcBuf = psaCC_ctb(idx)->curSrc;
967
968 cmhCC_tstAndUnflagCall( idx, &cmhPrm[srcBuf].ccCmdPrm.mltyCncFlg );
969
970 psaCC_ctb(idx)->curCmd = AT_CMD_NONE;
971 psaCC_ctb(idx)->curSrc = CMD_SRC_NONE;
972 doneFlg = TRUE;
973 }
974 }
975 if( doneFlg )
976 {
977 if( /*lint -e(644)*/srcBuf NEQ srcId )
978 {
979 R_AT( RAT_CME, srcBuf )
980 ( AT_CMD_D, CME_ERR_Unknown );
981 }
982 return( AT_CMPL );
983 }
984
985 for( idx = 0; idx < MAX_SS_NR; idx++ )
986 {
987 if( (ssShrdPrm.stb[idx].curCmd EQ KSD_CMD_CB OR
988 ssShrdPrm.stb[idx].curCmd EQ KSD_CMD_CF OR
989 ssShrdPrm.stb[idx].curCmd EQ KSD_CMD_CW OR
990 ssShrdPrm.stb[idx].curCmd EQ KSD_CMD_CL OR
991 ssShrdPrm.stb[idx].curCmd EQ KSD_CMD_PWD OR
992 ssShrdPrm.stb[idx].curCmd EQ KSD_CMD_USSD ))
993 {
994 srcBuf = ssShrdPrm.stb[idx].srvOwn;
995 /* PATCH LE 26.06.00 */
996 /* End transaction in SS */
997 psaSS_EndTrns(idx);
998 /* END PATCH LE 26.06.00 */
999 ssShrdPrm.stb[idx].ntryUsdFlg = FALSE;
1000 ssShrdPrm.stb[idx].curCmd = AT_CMD_NONE;
1001 doneFlg = TRUE;
1002 }
1003 }
1004 if( doneFlg )
1005 {
1006 if( srcBuf NEQ srcId )
1007 {
1008 R_AT( RAT_CME, srcBuf )
1009 ( AT_CMD_D, CME_ERR_Unknown );
1010 }
1011 return( AT_CMPL );
1012 }
1013 break;
1014
1015 case( AT_CMD_A ): /* A command id */
1016
1017 for( idx = 0; idx < MAX_CALL_NR; idx++ )
1018 {
1019 if (ccShrdPrm.ctb[idx] NEQ NULL)
1020 {
1021 if (psaCC_ctb(idx)->curCmd EQ cmd AND
1022 (psaCC_ctb(idx)->calStat EQ CS_ACT_REQ OR
1023 psaCC_ctb(idx)->calStat EQ CS_CPL_REQ OR
1024 psaCC_ctb(idx)->calStat EQ CS_DSC_REQ))
1025 {
1026 doneFlg = TRUE;
1027 srcBuf = psaCC_ctb(idx)->curSrc;
1028
1029 cmhCC_tstAndUnflagCall( idx, &cmhPrm[srcBuf].ccCmdPrm.mltyCncFlg );
1030 cmhCC_flagCall ( idx, &cmhPrm[srcId ].ccCmdPrm.mltyDscFlg );
1031
1032 psaCC_ctb(idx)->curCmd = AT_CMD_ABRT;
1033 psaCC_ctb(idx)->curSrc = srcId;
1034 psaCC_ctb(idx)->nrmCs = MNCC_CAUSE_CALL_CLEAR;
1035
1036 psaCC_ClearCall (idx);
1037
1038 if( srcBuf NEQ srcId )
1039 {
1040 R_AT( RAT_NO_CARRIER, srcBuf ) ( AT_CMD_A, idx+1 );
1041 }
1042 }
1043 }
1044 }
1045 if( doneFlg )
1046 return( AT_EXCT );
1047
1048 for( idx = 0; idx < MAX_CALL_NR; idx++ )
1049 {
1050 if (ccShrdPrm.ctb[idx] NEQ NULL AND
1051 psaCC_ctb(idx)->curCmd EQ cmd AND
1052 psaCC_ctb(idx)->calStat EQ CS_MDF_REQ)
1053 {
1054 srcBuf = psaCC_ctb(idx)->curSrc;
1055
1056 cmhCC_tstAndUnflagCall( idx, &cmhPrm[srcBuf].ccCmdPrm.mltyCncFlg );
1057
1058 psaCC_ctb(idx)->curCmd = AT_CMD_NONE;
1059 psaCC_ctb(idx)->curSrc = CMD_SRC_NONE;
1060 doneFlg = TRUE;
1061 }
1062 }
1063 if( doneFlg )
1064 {
1065 if( srcBuf NEQ srcId )
1066 {
1067 R_AT( RAT_CME, srcBuf )
1068 ( AT_CMD_A, CME_ERR_Unknown );
1069 }
1070 return( AT_CMPL );
1071 }
1072 break;
1073
1074 case( AT_CMD_Z ): /* Z command id */
1075 case( AT_CMD_CHUP ): /* +CHUP command id */
1076 case( AT_CMD_CHLD ): /* +CHLD command id */
1077 case( AT_CMD_CTFR ): /* +CTFR command id */
1078
1079 for( idx = 0; idx < MAX_CALL_NR; idx++ )
1080 {
1081 if (ccShrdPrm.ctb[idx] NEQ NULL AND
1082 psaCC_ctb(idx)->curCmd EQ cmd)
1083 {
1084 srcBuf = psaCC_ctb(idx)->curSrc;
1085
1086 cmhCC_tstAndUnflagCall( idx, &cmhPrm[srcBuf].ccCmdPrm.mltyCncFlg );
1087 cmhCC_tstAndUnflagCall( idx, &cmhPrm[srcBuf].ccCmdPrm.mltyDscFlg );
1088
1089 psaCC_ctb(idx)->curCmd = AT_CMD_NONE;
1090 psaCC_ctb(idx)->curSrc = CMD_SRC_NONE;
1091 doneFlg = TRUE;
1092 }
1093 }
1094 if( doneFlg )
1095 {
1096 if( srcBuf NEQ srcId )
1097 {
1098 R_AT( RAT_CME, srcBuf )
1099 ( cmd, CME_ERR_Unknown );
1100 }
1101 return( AT_CMPL );
1102 }
1103 break;
1104
1105 case( AT_CMD_VTS ): /* +VTS command id */
1106
1107 for( idx = 0; idx < MAX_CALL_NR; idx++ )
1108 {
1109 if (ccShrdPrm.ctb[idx] NEQ NULL AND
1110 psaCC_ctb(idx)->dtmfCmd EQ cmd)
1111 {
1112 if (psaCC_ctb(idx)->dtmfMode NEQ DTMF_MOD_AUTO) /* DTMF in Auto Mode is not abortable
1113 since the tone is always immediately stopped
1114 after the network confirmed the tone to CC. So
1115 it makes absolut no sense to abort the VTS nor
1116 does this have any effect on the length of the tone. */
1117 {
1118 srcBuf = psaCC_ctb(idx)->dtmfSrc;
1119 psaCC_ctb(idx)->dtmfCmd = AT_CMD_NONE;
1120 psaCC_ctb(idx)->dtmfSrc = CMD_SRC_NONE;
1121 sAT_PlusVTS( srcId, ccShrdPrm.dtmf.dig[0], VTS_MOD_ManStop );
1122 doneFlg = TRUE;
1123 }
1124 }
1125 }
1126 if( doneFlg )
1127 {
1128 if( srcBuf NEQ srcId )
1129 {
1130 R_AT( RAT_CME, srcBuf )
1131 ( AT_CMD_VTS, CME_ERR_Unknown );
1132 }
1133 return( AT_CMPL );
1134 }
1135
1136 break;
1137
1138 /*
1139 *---------------------------------------------------------------
1140 * for SS related commands
1141 *---------------------------------------------------------------
1142 */
1143 case( AT_CMD_CLIR ): /* +CLIR command id */
1144 case( AT_CMD_CLIP ): /* +CLIP command id */
1145 case( AT_CMD_COLP ): /* +COLP command id */
1146 case( AT_CMD_CCFC ): /* +CCFC command id */
1147 case( AT_CMD_CLCK ): /* +CLCK command id */
1148 case( AT_CMD_CCWA ): /* +CCWA command id */
1149 case( AT_CMD_CPWD ): /* +CPWD command id */
1150 case( AT_CMD_CUSD ): /* +CUSD command id */
1151
1152 for( idx = 0; idx < MAX_SS_NR; idx++ )
1153 {
1154 if( ssShrdPrm.stb[idx].curCmd EQ cmd )
1155 {
1156 srcBuf = ssShrdPrm.stb[idx].srvOwn;
1157 psaSS_EndTrns(idx);
1158 cmhPrm[srcId].ssCmdPrm.mltyTrnFlg = 0;
1159 ssShrdPrm.stb[idx].ntryUsdFlg = FALSE;
1160 ssShrdPrm.stb[idx].curCmd = AT_CMD_NONE;
1161 doneFlg = TRUE;
1162 }
1163 }
1164 if( simEntStat.curCmd EQ AT_CMD_CLCK )
1165 {
1166 simEntStat.curCmd = AT_CMD_NONE;
1167 doneFlg = TRUE;
1168 }
1169 if( doneFlg )
1170 {
1171 if( srcBuf NEQ srcId )
1172 {
1173 R_AT( RAT_CME, srcBuf )
1174 ( cmd, CME_ERR_Unknown );
1175 }
1176 return( AT_CMPL );
1177 }
1178 break; /* SS not implemented */
1179
1180 /*
1181 *---------------------------------------------------------------
1182 * for SMS related commands
1183 *---------------------------------------------------------------
1184 */
1185 case( AT_CMD_CMGD ): /* +CMGD command id */
1186 case( AT_CMD_CMGW ): /* +CMGW command id */
1187 case( AT_CMD_CMGS ): /* +CMGS command id */
1188 case( AT_CMD_CMSS ): /* +CMSS command id */
1189 case( AT_CMD_CSMP ): /* +CSMP command id */
1190 case( AT_CMD_CSCA ): /* +CSCA command id */
1191
1192 if( smsShrdPrm.smsEntStat.curCmd EQ cmd )
1193 {
1194 if( smsShrdPrm.smsEntStat.entOwn NEQ srcId )
1195 {
1196 R_AT( RAT_CMS, smsShrdPrm.smsEntStat.entOwn )
1197 ( cmd, CMS_ERR_UnknownErr, NULL );
1198 }
1199
1200 smsShrdPrm.smsEntStat.entOwn = OWN_NONE;
1201 smsShrdPrm.smsEntStat.curCmd = AT_CMD_NONE;
1202 return( AT_CMPL );
1203 }
1204
1205 break;
1206
1207 #ifdef GPRS
1208 /* brz:to check
1209 /*
1210 *---------------------------------------------------------------
1211 * for GMM related commands
1212 *---------------------------------------------------------------
1213 */
1214 case( AT_CMD_CGATT ): /* +CGATT command id */
1215 case( AT_CMD_CGCLASS ): /* +CGCLASS command id */
1216 if( gmmEntStat.curCmd EQ cmd )
1217 {
1218 TRACE_EVENT("Command abortion for CGATT/CGCLASS/CGAUTO");
1219 if( gmmEntStat.entOwn NEQ srcId )
1220 {
1221 R_AT( RAT_CME, gmmEntStat.entOwn )
1222 ( cmd, CME_ERR_Unknown );
1223 }
1224 gmmEntStat.entOwn = OWN_NONE;
1225 gmmEntStat.curCmd = AT_CMD_NONE;
1226 return( AT_CMPL );
1227 }
1228
1229 break;
1230 /*
1231 *---------------------------------------------------------------
1232 * for SM related commands
1233 *---------------------------------------------------------------
1234 */
1235 case( AT_CMD_CGACT ): /* +CGACT command id */
1236 if( smEntStat.curCmd EQ cmd )
1237 {
1238 TRACE_EVENT("Command abortion for CGACT");
1239 if( smEntStat.entOwn NEQ srcId )
1240 {
1241 R_AT( RAT_CME, smEntStat.entOwn )
1242 ( cmd, CME_ERR_Unknown );
1243 }
1244 switch(get_state_working_cid())
1245 {
1246 case CS_WAITS_FOR_ACTIVATING:
1247 case CS_ACTIVATING:
1248 case CS_ACTIVATED:
1249 smEntStat.entOwn = OWN_NONE;
1250 smEntStat.curCmd = AT_CMD_NONE;
1251 nsapi_set = cmhSM_Give_nsapi_set( work_cids[cid_pointer] );
1252 if ( nsapi_set )
1253 {
1254 set_state_working_cid( CS_DEACTIVATE_NORMAL );
1255 psaSM_PDP_Deactivate( nsapi_set, SMREG_NONLOCAL);
1256 }
1257 else
1258 {
1259 set_state_working_cid( CS_DEFINED );
1260 *work_cids = 0;
1261 cid_pointer = 0;
1262 }
1263 break;
1264 }
1265 return( AT_CMPL );
1266 }
1267 break; /* LINT warning */
1268 case( AT_CMD_CGDATA ): /* +CGDATA command id */
1269 if( gpppEntStat.curCmd EQ cmd ||
1270 smEntStat.curCmd EQ cmd )
1271 {
1272 TRACE_EVENT("Command abortion for CGDATA");
1273 if( gpppEntStat.entOwn NEQ srcId &&
1274 smEntStat.entOwn NEQ srcId )
1275 {
1276 R_AT( RAT_CME, gpppEntStat.entOwn )
1277 ( cmd, CME_ERR_Unknown );
1278 }
1279
1280 return cmhSM_deactivateAContext(srcId, work_cids[cid_pointer] );
1281 }
1282 break;
1283
1284 case( AT_CMD_CGANS ): /* +CGANS command id */
1285
1286 if( smEntStat.curCmd EQ cmd )
1287 {
1288 TRACE_EVENT("Command abortion for CGANS");
1289 if( smEntStat.entOwn NEQ srcId )
1290 {
1291 R_AT( RAT_CME, smEntStat.entOwn )
1292 ( cmd, CME_ERR_Unknown );
1293 }
1294 smEntStat.entOwn = OWN_NONE;
1295 smEntStat.curCmd = AT_CMD_NONE;
1296 doneFlg = TRUE;
1297 }
1298
1299 if( gpppEntStat.curCmd EQ cmd )
1300 {
1301 if( gpppEntStat.entOwn NEQ srcId )
1302 {
1303 R_AT( RAT_CME, gpppEntStat.entOwn )
1304 ( cmd, CME_ERR_Unknown );
1305 }
1306 gpppEntStat.entOwn = OWN_NONE;
1307 gpppEntStat.curCmd = AT_CMD_NONE;
1308 return( AT_EXCT );
1309 }
1310
1311 if( doneFlg == TRUE )
1312 return( AT_EXCT );
1313 break;
1314
1315 case( AT_CMD_CGSMS ): /* +CGSMS command id */
1316 if( smEntStat.curCmd EQ cmd )
1317 {
1318 TRACE_EVENT("Command abortion for CGSMS");
1319 if( smEntStat.entOwn NEQ srcId )
1320 {
1321 R_AT( RAT_CME, smEntStat.entOwn )
1322 ( cmd, CME_ERR_Unknown );
1323 }
1324 smEntStat.entOwn = OWN_NONE;
1325 smEntStat.curCmd = AT_CMD_NONE;
1326 }
1327 return AT_CMPL;
1328
1329 #endif /*GPRS*/
1330
1331 }
1332
1333 return( AT_FAIL );
1334 }
1335
1336 /*
1337 +-------------------------------------------------------------------+
1338 | PROJECT : GSM-PS (6147) MODULE : CMH_F |
1339 | ROUTINE : cmh_mergeTOA |
1340 +-------------------------------------------------------------------+
1341
1342 PURPOSE : this function converts the type of number (TON) and the
1343 numbering plan identification into the octet representation
1344 according to GSM 04.08 ( 10.5.4.7 ).
1345 */
1346
1347 GLOBAL UBYTE cmh_mergeTOA ( UBYTE ton, UBYTE npi )
1348 {
1349
1350 /*
1351 *-------------------------------------------------------------------
1352 * convert TON and NPI
1353 *-------------------------------------------------------------------
1354 */
1355 return( ((ton & 0x07)<<4)+
1356 ((npi & 0x0F)<<0)+0x80 );
1357
1358 }
1359
1360 /*
1361 +-------------------------------------------------------------------+
1362 | PROJECT : GSM-PS (6147) MODULE : CMH_F |
1363 | ROUTINE : cmh_mergeTOS |
1364 +-------------------------------------------------------------------+
1365
1366 PURPOSE : this function converts the type of subaddress (TOS) and the
1367 odd/even indicator into the octet representation
1368 according to GSM 04.08 ( 10.5.4.8 ).
1369
1370 */
1371
1372 GLOBAL UBYTE cmh_mergeTOS ( UBYTE tos, UBYTE oe )
1373 {
1374
1375 /*
1376 *-------------------------------------------------------------------
1377 * convert TOS and odd/even
1378 *-------------------------------------------------------------------
1379 */
1380 return( ((tos & 0x07)<<4)+
1381 ((oe & 0x01)<<3)+0x80 );
1382 }
1383
1384 /*
1385 +-------------------------------------------------------------------+
1386 | PROJECT : GSM-PS (6147) MODULE : CMH_F |
1387 | ROUTINE : cmh_demergeTOA |
1388 +-------------------------------------------------------------------+
1389
1390 PURPOSE : this function converts the the octet representation
1391 according to GSM 04.08 ( 10.5.4.7 ) into type of number
1392 (TON) and the numbering plan identification.
1393 */
1394
1395 GLOBAL void cmh_demergeTOA ( UBYTE toa, UBYTE* ton, UBYTE* npi )
1396 {
1397
1398 /*
1399 *-------------------------------------------------------------------
1400 * convert TON and NPI
1401 *-------------------------------------------------------------------
1402 */
1403 *ton = (toa>>4) & 0x07;
1404 *npi = (toa>>0) & 0x0F;
1405 }
1406
1407 /*
1408 +-------------------------------------------------------------------+
1409 | PROJECT : GSM-PS (6147) MODULE : CMH_F |
1410 | ROUTINE : cmh_demergeTOS |
1411 +-------------------------------------------------------------------+
1412
1413 PURPOSE : this function converts the octet representation
1414 according to GSM 04.08 ( 10.5.4.8 ) into the type of
1415 subaddress (TOS) and the odd/even indicator.
1416
1417 */
1418
1419 GLOBAL void cmh_demergeTOS ( UBYTE tosa, UBYTE* tos, UBYTE* oe )
1420 {
1421
1422 /*
1423 *-------------------------------------------------------------------
1424 * convert TOS and odd/even
1425 *-------------------------------------------------------------------
1426 */
1427 *tos = (tosa>>4) & 0x07;
1428 *oe = (tosa>>3) & 0x01;
1429 }
1430
1431
1432
1433 /*
1434 +--------------------------------------------------------------------+
1435 | PROJECT : GSM-PS (6147) MODULE : CMH_F |
1436 | STATE : code ROUTINE : cmh_setToaDef |
1437 +--------------------------------------------------------------------+
1438
1439 PURPOSE : This function sets the type of address to default values
1440 (when the first character of address is '+' or the first
1441 two characters are '0' default is 145 otherwise default
1442 is 129)
1443 */
1444 GLOBAL CHAR* cmh_setToaDef ( CHAR* number, T_ACI_TOA *toa )
1445 {
1446 toa->npi = NPI_IsdnTelephony;
1447
1448 if ( *number EQ '+' )
1449 {
1450 toa->ton = TON_International;
1451 return number+1;
1452 }
1453 else
1454 {
1455 toa->ton = TON_Unknown;
1456 return number;
1457 }
1458 }
1459
1460
1461
1462
1463 /*
1464 +-------------------------------------------------------------------+
1465 | PROJECT : GSM-PS (6147) MODULE : CMH_F |
1466 | ROUTINE : cmh_packBCD |
1467 +-------------------------------------------------------------------+
1468
1469 PURPOSE : packing two BCD values in one octet
1470 <bcd_out> resulting packed BCD numbers
1471 <char_in> BCD values input per character
1472 <len_in> number of BCD values to be packed
1473 RETURN : number of packed octets
1474 */
1475
1476 GLOBAL USHORT cmh_packBCD (UBYTE *bcd_out, const UBYTE *char_in,
1477 USHORT len_in)
1478 {
1479 USHORT no_oct = 0, i;
1480
1481 if (len_in > MAX_SMS_ADDR_DIG) /* check length */
1482 len_in = MAX_SMS_ADDR_DIG;
1483
1484 for (i = 0; i < len_in; i++)
1485 {
1486 if ((i & 1) EQ 0) /* pack high nibble */
1487 {
1488 no_oct++;
1489 *bcd_out = *char_in++ | 0xF0; /* in case of odd length */
1490 }
1491 else /* pack low nibble */
1492 *bcd_out++ &= (*char_in++ << 4) | 0xF;
1493 }
1494 return no_oct;
1495 }
1496
1497 /*
1498 +-------------------------------------------------------------------+
1499 | PROJECT : GSM-PS (6147) MODULE : CMH_F |
1500 | ROUTINE : cmh_unpackBCD |
1501 +-------------------------------------------------------------------+
1502
1503 PURPOSE : unpacking one octet in two BCD values
1504 <char_out> resulting unpacked BCD values
1505 <bcd_in> BCD numbers input
1506 <len_in> number of octets to be unpacked
1507 RETURN : number of unpacked BCD values
1508 */
1509
1510 GLOBAL USHORT cmh_unpackBCD (UBYTE *char_out, const UBYTE *bcd_in,
1511 USHORT len_in)
1512 {
1513 USHORT no_bcd = 0, i;
1514
1515 if (len_in > MAX_SMS_ADDR_DIG/2) /* check length */
1516 len_in = MAX_SMS_ADDR_DIG/2;
1517
1518 for (i = 0; i < len_in; i++)
1519 {
1520 if ((*bcd_in & 0xF) NEQ 0xF) /* in case of wrong length */
1521 {
1522 *char_out++ = *bcd_in & 0xF; /* unpack low nibble */
1523 no_bcd++;
1524 }
1525 else
1526 break;
1527 if ((*bcd_in & 0xF0) NEQ 0xF0) /* in case of odd length */
1528 {
1529 *char_out++ = *bcd_in++ >> 4; /* unpack high nibble */
1530 no_bcd++;
1531 }
1532 else
1533 break;
1534 }
1535 return no_bcd;
1536 }
1537
1538 /*
1539 +-------------------------------------------------------------------+
1540 | PROJECT : GSM-PS (6147) MODULE : CMH_F |
1541 | ROUTINE : cmh_unpackSCTS |
1542 +-------------------------------------------------------------------+
1543
1544 PURPOSE : unpacking SCTS (or validity period absolute) to the
1545 T_ACI_VP_ABS structure
1546 */
1547 GLOBAL void cmh_unpackSCTS (T_ACI_VP_ABS *scts, const UBYTE *buf_in)
1548 {
1549
1550 UBYTE lsb, msb, sign;
1551
1552 cmh_unpackBCD ((UBYTE*)scts, buf_in, 6);
1553
1554 /* get the time zone octet */
1555 buf_in += 6;
1556
1557 lsb = *buf_in >> 4;
1558 msb = *buf_in & 0x07;
1559 scts->timezone = (msb *10) + lsb; /* BCD */
1560 sign = *buf_in & 0x08;
1561 if (sign)
1562 scts->timezone = -scts->timezone; /* ~scts->timezone + 1; */
1563 }
1564
1565 /*
1566 +-------------------------------------------------------------------+
1567 | PROJECT : GSM-PS (6147) MODULE : CMH_F |
1568 | ROUTINE : cmh_logRslt |
1569 +-------------------------------------------------------------------+
1570
1571 PURPOSE : log result code.
1572
1573 */
1574
1575 GLOBAL void cmh_logRslt ( T_ACI_CMD_SRC dest, RAT_ID rat,
1576 T_ACI_AT_CMD cmd, SHORT cId,
1577 T_ACI_BS_SPEED spd, T_ACI_CME_ERR err )
1578 {
1579 #if defined SMI OR defined MFW OR defined FF_MMI_RIV
1580 T_ACI_RLOG rslt; /* holds result pararmeter */
1581
1582 rslt.dest = dest;
1583
1584 switch( rat )
1585 {
1586 case( RAT_OK ):
1587
1588 rslt.atRslt = RLOG_RSLT_OK;
1589 rslt.rsltPrm.rOK.cmdId = cmd;
1590 rslt.rsltPrm.rOK.cId = cId;
1591 break;
1592
1593 case( RAT_NO_CARRIER ):
1594
1595 rslt.atRslt = RLOG_RSLT_NoCarrier;
1596 rslt.rsltPrm.rNO_CARRIER.cmdId = cmd;
1597 rslt.rsltPrm.rNO_CARRIER.cId = cId;
1598 break;
1599
1600 case( RAT_CONNECT ):
1601
1602 rslt.atRslt = RLOG_RSLT_Connect;
1603 rslt.rsltPrm.rCONNECT.cmdId = cmd;
1604 rslt.rsltPrm.rCONNECT.cId = cId;
1605 rslt.rsltPrm.rCONNECT.speed = spd;
1606 break;
1607
1608 case( RAT_BUSY ):
1609
1610 rslt.atRslt = RLOG_RSLT_Busy;
1611 rslt.rsltPrm.rBUSY.cmdId = cmd;
1612 rslt.rsltPrm.rBUSY.cId = cId;
1613 break;
1614
1615 case( RAT_NO_ANSWER ):
1616
1617 rslt.atRslt = RLOG_RSLT_NoAnswer;
1618 rslt.rsltPrm.rNO_ANSWER.cmdId = cmd;
1619 rslt.rsltPrm.rNO_ANSWER.cId = cId;
1620 break;
1621
1622 case( RAT_CME ):
1623
1624 rslt.atRslt = RLOG_RSLT_CME;
1625 rslt.rsltPrm.rCME.cmdId = cmd;
1626 rslt.rsltPrm.rCME.err = err;
1627 rslt.rsltPrm.rCME.cId = cId;
1628 break;
1629
1630 default:
1631
1632 return;
1633 }
1634
1635 rAT_PercentRLOG( &rslt );
1636 #endif
1637 }
1638
1639 /*
1640 +-------------------------------------------------------------------+
1641 | PROJECT : GSM-PS (6147) MODULE : CMH_F |
1642 | ROUTINE : cmh_cvtToDefGsm |
1643 +-------------------------------------------------------------------+
1644
1645 PURPOSE : converts from internal GSM to default GSM alphabet.
1646
1647 */
1648 GLOBAL void cmh_cvtToDefGsm ( CHAR* in, CHAR* out, USHORT* len )
1649 {
1650 USHORT i; /* used for counting */
1651
1652 *len = ( USHORT ) strlen ( in );
1653
1654 for ( i = 0; i < *len; i++ )
1655 out[i] = in[i] & 0x7F;
1656 }
1657
1658 /*
1659 +-------------------------------------------------------------------+
1660 | PROJECT : GSM-PS (6147) MODULE : CMH_F |
1661 | ROUTINE : cmh_cvtFromDefGsm |
1662 +-------------------------------------------------------------------+
1663
1664 PURPOSE : converts from default GSM to internal GSM alphabet.
1665
1666 */
1667 GLOBAL void cmh_cvtFromDefGsm ( CHAR* in, USHORT len, CHAR* out )
1668 {
1669 USHORT i; /* used for counting */
1670
1671 for ( i = 0; i < len; i++ )
1672 out[i] = in[i] | 0x80;
1673
1674 out[len] = '\0';
1675 }
1676
1677 /*
1678 +--------------------------------------------------------------------+
1679 | PROJECT: GSM-PS (6147) MODULE: ACI_CMD |
1680 | STATE : code ROUTINE: cmh_set_delayed_call|
1681 +--------------------------------------------------------------------+
1682
1683 PURPOSE : Set function pointer for general-purpose timer routine.
1684 TRUE, if delayed call timer slot is available
1685 FALSE otherwise
1686 setting call=NULL always succeeds.
1687 */
1688 static UCHAR (*cmh_timeout_delayed_call) (void*) = NULL;
1689 static void* cmh_timeout_delayed_arg = NULL;
1690
1691 GLOBAL UBYTE cmh_set_delayed_call (UCHAR (*call) (void*), void* arg)
1692 {
1693 UCHAR ret;
1694 if (cmh_timeout_delayed_call EQ NULL
1695 OR cmh_timeout_delayed_call EQ call
1696 OR call EQ NULL)
1697 {
1698 cmh_timeout_delayed_call = call;
1699 cmh_timeout_delayed_arg = arg;
1700 ret = TRUE;
1701 }
1702 else ret = FALSE;
1703 return ret;
1704 }
1705
1706 /*
1707 +--------------------------------------------------------------------+
1708 | PROJECT: GSM-PS (6147) MODULE: ACI_CMD |
1709 | STATE : code ROUTINE: cmh_set_delayed_call|
1710 +--------------------------------------------------------------------+
1711
1712 PURPOSE : start timer for general-purpose timer routine.
1713 TRUE, if delayed call timer slot has been set before
1714 */
1715
1716 GLOBAL UBYTE cmh_start_delayed_call (ULONG ms)
1717 {
1718 UBYTE ret;
1719 if (cmh_timeout_delayed_call NEQ NULL) {
1720 TRACE_FUNCTION ("cmh_start_delayed_call()");
1721 vsi_t_start (hCommACI, ACI_TDELAY, ms);
1722 ret = TRUE;
1723 } else ret = FALSE;
1724 return ret;
1725 }
1726
1727 /*
1728 +--------------------------------------------------------------------+
1729 | PROJECT: GSM-PS (6147) MODULE: ACI_CMD |
1730 | STATE : code ROUTINE: cmh_timeout |
1731 +--------------------------------------------------------------------+
1732
1733 PURPOSE : A timeout has occured for a timer. The function returns
1734 TRUE, if it is a timer which is handled by CMH, else FALSE
1735 is returned to indicate that the timer has not been
1736 processed.
1737
1738 */
1739
1740 GLOBAL UBYTE cmh_timeout (USHORT index)
1741 {
1742 TRACE_FUNCTION ("cmh_timeout()");
1743
1744 if (index EQ ACI_TMPTY)
1745 {
1746 /*
1747 * timeout multiparty timer
1748 */
1749 cmhCC_MPTYTimeout();
1750 return TRUE;
1751 }
1752
1753 if (index EQ ACI_TECT)
1754 {
1755 /*
1756 * timeout multiparty timer
1757 */
1758 cmhCC_ECTTimeout();
1759 return TRUE;
1760 }
1761
1762 #ifdef FF_FAX
1763 if (index EQ ACI_TFIT)
1764 {
1765 /*
1766 * timeout FAX inactivity timer
1767 */
1768 cmhT30_FITTimeout();
1769 return TRUE;
1770 }
1771 #endif /* FF_FAX */
1772
1773 if (index EQ ACI_TDELAY)
1774 {
1775 /*
1776 * timeout delayed call timer
1777 */
1778 if (cmh_timeout_delayed_call EQ NULL)
1779 {
1780 vsi_t_stop (hCommACI, ACI_TDELAY);
1781 }
1782 else if (!cmh_timeout_delayed_call (cmh_timeout_delayed_arg))
1783 {
1784 cmh_timeout_delayed_call = NULL;
1785 vsi_t_stop (hCommACI, ACI_TDELAY);
1786 }
1787 return TRUE;
1788 }
1789
1790 if (index EQ ACI_REPEAT_HND)
1791 {
1792 /* redial timer is elapsed */
1793 cmhCC_redialTimeout();
1794 }
1795 /*
1796 * the timeout is not for CMH
1797 */
1798 return FALSE;
1799 }
1800
1801 /*
1802 +-------------------------------------------------------------------+
1803 | PROJECT : GSM-PS (6147) MODULE : CMH_F |
1804 | ROUTINE : cmh_bldCalPrms |
1805 +-------------------------------------------------------------------+
1806
1807 PURPOSE : this function converts a dial string into the settings
1808 for the called address parameters.
1809 */
1810
1811 /*******************************************
1812 This function is intended only to be called ONCE
1813 for a given number...
1814 Otherwise, TOA info might be corrupted
1815 ********************************************/
1816 GLOBAL SHORT cmh_bldCalPrms ( char * pDialStr, T_CLPTY_PRM * calPrm )
1817 {
1818 char * pSubAdr; /* points to subaddress */
1819 int i;
1820 int len = strlen(pDialStr);
1821
1822 TRACE_FUNCTION("cmh_bldCalPrms()");
1823
1824 /* seach for subaddress */
1825 pSubAdr = strchr( pDialStr, '-' );
1826 if ( pSubAdr NEQ NULL ) /* subaddress found */
1827 {
1828 *pSubAdr = 0x0; /* cut off subaddress */
1829 pSubAdr++;
1830
1831 /*
1832 * fill in subaddress information
1833 */
1834 calPrm -> tos = TOS_NSAP;
1835 strncpy( calPrm->sub, pSubAdr, MAX_SUBADDR_LEN-1 );
1836 calPrm->sub[MAX_SUBADDR_LEN-1] = 0x0;
1837 calPrm -> oe = (strlen(calPrm->sub) & 1)? OE_ODD : OE_EVEN;
1838 }
1839 else /* subaddress not found */
1840 {
1841 calPrm -> tos = TOS_NOT_PRES;
1842 calPrm -> oe = OE_EVEN;
1843 calPrm->sub[0] = 0x0;
1844 }
1845
1846 /* fill in address information */
1847
1848 /* Sign "+" could be found anywhere in the string:
1849 for instance in a Key Stroke Sequence */
1850
1851 /* Copy character until '+' digit */
1852 for (i = 0; (i < len) && (pDialStr[i] != '+'); i++)
1853 calPrm->num[i] = pDialStr[i];
1854
1855 if (i != len)
1856 {
1857 calPrm->ton = TON_INT_NUMB;
1858
1859 /* Skip '+' digit and copy next characters */
1860 for (i++; i < len; i++)
1861 calPrm->num[i-1] = pDialStr[i];
1862 i--;
1863 }
1864 else
1865 calPrm->ton = TON_UNKNOWN;
1866
1867 /* Copy EOS */
1868 calPrm->num[i] = '\0';
1869
1870 calPrm -> npi = NPI_ISDN_TEL_NUMB_PLAN;
1871
1872 return 0;
1873 }
1874
1875 /*
1876 +-------------------------------------------------------------------+
1877 | PROJECT : GSM-PS (6147) MODULE : CMH_F |
1878 | ROUTINE : percentCSTAT_stateField |
1879 +-------------------------------------------------------------------+
1880
1881 PURPOSE : This function calls the %CSTAT callback and
1882 handels the occurance of %CSTAT and
1883 %CSTAT: RDY indication.
1884 */
1885 GLOBAL void percentCSTAT_indication(T_ACI_ENTITY_ID_MSG entityId,
1886 T_ACI_ENTITY_STATE_MSG entityState)
1887 {
1888 T_ACI_STATE_MSG msgType;
1889 int i = 0;
1890 msgType.entityId = entityId;
1891 msgType.entityState = entityState;
1892
1893 for(; i < CMD_SRC_MAX; i++)
1894 {
1895 R_AT( RAT_CSTAT, i)(msgType);
1896 }
1897 if( (percentCSTAT_stateField >> entityId & 1U) EQ (unsigned) entityState )
1898 {
1899 percentCSTAT_stateField ^= 1U << entityId;
1900 }
1901
1902 if(!percentCSTAT_stateField)
1903 {
1904 msgType.entityId = STATE_MSG_RDY;
1905 for(i = 0; i < CMD_SRC_MAX; i++)
1906 {
1907 R_AT( RAT_CSTAT, i)(msgType);
1908 }
1909 }
1910 }
1911
1912
1913 /*
1914 +-------------------------------------------------------------------+
1915 | PROJECT : MODULE : CMH_F |
1916 | ROUTINE : aci_rat_cmd_mode |
1917 +-------------------------------------------------------------------+
1918
1919 PURPOSE : This function is used by the R_AT macro and determines
1920 the command mode that should be used to send the response.
1921
1922 */
1923 GLOBAL T_ACI_CMD_MODE aci_rat_cmd_mode(
1924 RAT_ID cmd,
1925 T_ACI_CMD_SRC src)
1926 {
1927 T_ACI_CMD_MODE mode;
1928
1929 if (src!=CMD_SRC_NONE)
1930 {
1931 if (src<CMD_SRC_MAX)
1932 {
1933 if (IS_SRC_USED(src))
1934 {
1935
1936 /*
1937 * Get the command mode for the specified source.
1938 */
1939 mode = aci_cmd_src_mode_get(src);
1940
1941 /*
1942 * If RATJmpTbl is populated for the specified command mode
1943 * and command, indicate this by returning the command mode.
1944 * The nature of the R_AT macro is such that it is not possible
1945 * to simply call the function in the table from here.
1946 */
1947 if (mode NEQ CMD_MODE_NONE)
1948 {
1949 if (RATJmpTbl[cmd][mode])
1950 {
1951 return(mode);
1952 }
1953 TRACE_EVENT_P2("RATJmpTbl[cmd=%d][mode=%d]", cmd, mode); /* in case of problems */
1954 }
1955 }
1956 }
1957 }
1958
1959 /*
1960 * A return value of CMD_MODE_NONE is meant to indicate that the
1961 * response should not be sent at all.
1962 */
1963 TRACE_EVENT_P1("aci_rat_cmd_mode(): CMD_MODE_NONE for src %d", src);
1964 return(CMD_MODE_NONE);
1965 }
1966
1967 /*
1968 +-------------------------------------------------------------------+
1969 | PROJECT : MODULE : CMH_F |
1970 | ROUTINE : aci_cmd_src_mode_get |
1971 +-------------------------------------------------------------------+
1972
1973 PURPOSE : Access function for reading aci_cmd_src_mode[] which
1974 stores the command mode of each command source.
1975
1976 */
1977 GLOBAL T_ACI_CMD_MODE aci_cmd_src_mode_get(
1978 T_ACI_CMD_SRC src_id)
1979 {
1980 T_ACI_CMD_MODE mode;
1981
1982
1983 if (src_id<CMD_SRC_MAX)
1984 {
1985 mode = aci_cmd_src_mode[src_id];
1986 TRACE_EVENT_P2("aci_cmd_src_mode_get(): aci_cmd_src_mode[%d] = %d", src_id, mode);
1987 return(mode);
1988 }
1989 else
1990 {
1991 TRACE_EVENT("aci_cmd_src_mode_get(): CMD_MODE_NONE");
1992 return(CMD_MODE_NONE);
1993 }
1994 }
1995
1996
1997 /*
1998 +-------------------------------------------------------------------+
1999 | PROJECT : MODULE : CMH_F |
2000 | ROUTINE : aci_cmd_src_mode_set |
2001 +-------------------------------------------------------------------+
2002
2003 PURPOSE : Access function for writing to aci_cmd_src_mode[] which
2004 stores the command mode of each command source.
2005
2006 */
2007 GLOBAL void aci_cmd_src_mode_set(
2008 UBYTE src_id,
2009 T_ACI_CMD_MODE mode)
2010 {
2011 if (src_id<CMD_SRC_MAX)
2012 {
2013 aci_cmd_src_mode[src_id]=mode;
2014 TRACE_EVENT_P2("aci_cmd_src_mode_set(): aci_cmd_src_mode[%d] = %d", src_id, mode);
2015 }
2016 }
2017
2018
2019 /*==== EOF ========================================================*/