comparison src/aci2/aci/ati_mm.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-F&D (8411)
4 | Modul : ATI
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 : AT Command Interpreter: Mobility Management related functions.
18 +-----------------------------------------------------------------------------
19 */
20
21 #ifndef ATI_MM_C
22 #define ATI_MM_C
23
24 #undef DUMMY_ATI_STRINGS
25
26 #include "aci_all.h"
27
28 #include "aci_lst.h"
29 #include "aci_cmh.h"
30 #include "ati_cmd.h"
31 #include "aci_io.h"
32 #include "aci_cmd.h"
33 #include "l4_tim.h"
34
35 #include "aci_mem.h"
36 #include "aci_prs.h"
37
38 #include "ati_int.h"
39
40 #ifdef UART
41 #include "dti.h"
42 #include "dti_conn_mng.h"
43 #endif
44
45 #include "psa.h"
46 #include "cmh.h"
47 #include "psa_sim.h"
48 #include "cmh_sim.h"
49 #include "psa_mm.h"
50
51 #ifdef FF_ATI_BAT
52
53 #include "typedefs.h"
54 #include "gdd.h"
55 #include "bat.h"
56
57 #include "ati_bat.h"
58
59 #endif /* FF_ATI_BAT */
60
61 EXTERN T_ACI_CFUN_FUN CFUNfun;
62 EXTERN T_CIEV_SIGNAL_BUFFER asCievSignalBuf;
63 EXTERN T_CIEV_SMSFULL_BUFFER asCievSmsFullBuf;
64
65 /*
66 +--------------------------------------------------------------------+
67 | PROJECT : GSM-F&D (8411) MODULE : ACI_CMD |
68 | STATE : code ROUTINE : atPlusCops |
69 +--------------------------------------------------------------------+
70
71 PURPOSE : +COPS command (operator selection)
72 */
73
74 GLOBAL T_ATI_RSLT setatPlusCOPS (char *cl, UBYTE srcId)
75 {
76 CHAR op[MAX_ALPHA_OPER_LEN] = {0};
77 T_ACI_RETURN ret = AT_FAIL;
78 T_ACI_COPS_MOD mode = COPS_MOD_NotPresent;
79 T_ACI_COPS_FRMT format = COPS_FRMT_NotPresent;
80 SHORT startIdx = 0,
81 lastIdx = 0;
82 SHORT pos=0;
83 T_ATI_SRC_PARAMS *src_params = find_element (ati_src_list, srcId, search_ati_src_id);
84
85 TRACE_FUNCTION("setatPlusCops()");
86
87 if (CFUNfun NEQ CFUN_FUN_Full)
88 {
89 TRACE_EVENT_P1("+COPS error: cannot proceed Mobile has no Full CFUN: %d", CFUNfun);
90 cmdCmeError(CME_ERR_OpNotAllow);
91 return ATI_FAIL;
92 }
93
94 cl = parse (cl,"dds",&mode,&format,(LONG)(MAX_ALPHA_OPER_LEN-1),op); /*split parameter string in int,int,str*/
95 if (!cl OR ((mode EQ COPS_MOD_Man OR mode EQ COPS_MOD_Both)
96 AND op[0] EQ 0))
97 {
98 cmdCmeError(CME_ERR_OpNotAllow);
99 return ATI_FAIL;
100 }
101
102 #ifdef FF_ATI_BAT
103 {
104 T_BAT_cmd_send cmd;
105 T_BAT_cmd_set_plus_cops cops;
106 UBYTE len;
107
108 len=strlen(op);
109
110 /*
111 * If the operator name is too long we can't really do anything
112 * meaningful, so generate an error and give up.
113 */
114 if (len>BAT_MAX_COPS_OPER_LEN)
115 {
116 cmdCmeError(CME_ERR_Unknown);
117 return(ATI_FAIL);
118 }
119
120 cmd.ctrl_params = BAT_CMD_SET_PLUS_COPS;
121 cmd.params.ptr_set_plus_cops=&cops;
122
123 /*
124 * This relies on T_ACI_COPS_MOD and T_BAT_plus_cops_mode being
125 * equivalent.
126 */
127 cops.mode=(T_BAT_plus_cops_mode)mode;
128
129 /*
130 * This relies on T_ACI_COPS_FRMT and T_BAT_plus_cops_format being
131 * equivalent.
132 */
133 cops.format=(T_BAT_plus_cops_format)format;
134
135 cops.c_oper=(U8)len;
136
137 if (len)
138 {
139 memcpy(cops.oper,op,BAT_MAX_COPS_OPER_LEN);
140 cops.v_oper=TRUE;
141 }
142 else
143 {
144 cops.v_oper=FALSE;
145 }
146 bat_send(ati_bat_get_client(srcId), &cmd);
147 src_params->curAtCmd = AT_CMD_COPS;
148 return ATI_EXCT;
149 }
150 #else
151
152 ret = sAT_PlusCOPS (srcId,mode,format,op);
153 switch (ret)
154 {
155 case (AT_CMPL): /*operation completed*/
156 break;
157 case (AT_EXCT):
158 src_params->curAtCmd = AT_CMD_COPS;
159 break;
160 default:
161 cmdCmeError(CME_ERR_Unknown); /*Command failed*/
162 break;
163 }
164 return (map_aci_2_ati_rslt(ret));
165
166 #endif /*FF_ATI_BAT*/
167 }
168
169 #ifdef FF_ATI_BAT
170 /*
171 +--------------------------------------------------------------------+
172 | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
173 | STATE : code ROUTINE : aci_bat_HandleTestCOPS |
174 +--------------------------------------------------------------------+
175
176 PURPOSE :
177 */
178 T_ATI_RSLT atiHandleTestCOPS(UBYTE srcId)
179 {
180 T_BAT_cmd_send cmd;
181 T_BAT_no_parameter dummy;
182
183 cmd.ctrl_params = BAT_CMD_TST_PERCENT_COPS;
184 dummy.bat_dummy = 0xFF;
185 cmd.params.ptr_que_plus_cops = &dummy;
186
187 TRACE_FUNCTION("aci_bat_HandleTestCOPS() calls bat_send() <=== as APPLICATION");
188
189 #ifndef FF_DUAL_SIM
190 if (CFUNfun NEQ CFUN_FUN_Full)
191 {
192 cmdCmeError(CME_ERR_OpNotAllow);
193 return ATI_FAIL;
194 }
195 #endif /*FF_DUAL_SIM*/
196
197 bat_send(ati_bat_get_client(srcId), &cmd);
198 return ATI_EXCT; /* executing, because response is passed by callback function */
199 }
200
201 #else /* no FF_ATI_BAT */
202
203 GLOBAL T_ATI_RSLT atiHandleTestCOPS(char *cl, UBYTE srcId)
204 {
205 T_ACI_RETURN ret = AT_FAIL;
206 T_ACI_COPS_MOD mode = COPS_MOD_NotPresent;
207 T_ACI_COPS_FRMT format = COPS_FRMT_NotPresent;
208 SHORT startIdx = 0,
209 lastIdx = 0,
210 length1,
211 length2;
212 T_ACI_COPS_LST operLst;
213 BOOL END_OF_LIST = FALSE;
214 SHORT i,
215 pos=0;
216 T_ATI_SRC_PARAMS *src_params = find_element (ati_src_list, srcId, search_ati_src_id);
217 char* outputCommand;
218
219
220 TRACE_FUNCTION("atiHandleTestCOPS()");
221
222 #ifndef FF_DUAL_SIM
223 if (CFUNfun NEQ CFUN_FUN_Full)
224 {
225 cmdCmeError(CME_ERR_OpNotAllow);
226 return ATI_FAIL;
227 }
228 #endif /*FF_DUAL_SIM*/
229 do
230 {
231 startIdx += lastIdx;
232 switch (src_params->curAtCmd)
233 {
234 case AT_CMD_COPS:
235 ret = tAT_PlusCOPS(srcId,startIdx,&lastIdx,&operLst[0]);
236 break;
237 case AT_CMD_P_COPS:
238 ret = tAT_PercentCOPS(srcId,startIdx,&lastIdx,&operLst[0]);
239 break;
240 default:
241 cmdCmeError(CME_ERR_Unknown);
242 return ATI_FAIL;
243 }
244 if (ret EQ AT_CMPL)
245 {
246 for(i=0;i<lastIdx;i++)
247 {
248 if ((operLst[i].status < 0) AND (*operLst[i].numOper EQ 0))
249 {
250 END_OF_LIST = TRUE;
251 break;
252 }
253
254
255 length1 = strlen(operLst[i].longOper);
256 length2 = strlen(operLst[i].shortOper);
257
258 /* What COPS command is active? */
259 switch (src_params->curAtCmd)
260 {
261 case AT_CMD_COPS:
262 outputCommand = "+COPS";
263 break;
264 case AT_CMD_P_COPS:
265 outputCommand ="%COPS";
266 break;
267 default:
268 cmdCmeError(CME_ERR_Unknown);
269 return ATI_FAIL;
270 }
271
272 sprintf(g_sa,"%s: %d,\"%s\",\"%s\",%s",outputCommand,
273 operLst[i].status,operLst[i].longOper,
274 operLst[i].shortOper,operLst[i].numOper);
275 io_sendMessage(srcId, g_sa, ATI_NORMAL_OUTPUT);
276
277 }
278 }
279
280 switch(ret)
281 {
282 case AT_EXCT:
283 return ATI_EXCT;
284
285 case AT_FAIL:
286 cmdCmeError(CME_ERR_Unknown);
287 return ATI_FAIL;
288
289 case AT_BUSY:
290 return ATI_BUSY;
291
292 default:
293 break;/* Does nothing in this case */
294 }
295
296 }
297 while(!END_OF_LIST);
298
299 return ATI_CMPL;
300 }
301
302 #endif /* no FF_ATI_BAT */
303
304
305 GLOBAL T_ATI_RSLT tesatPlusCOPS (char *cl, UBYTE srcId)
306 {
307 T_ATI_SRC_PARAMS *src_params = find_element (ati_src_list, srcId, search_ati_src_id);
308
309 #ifdef FF_ATI_BAT
310 TRACE_FUNCTION("tesatPlusCOPS() calls bat_send() <=== as APPLICATION");
311 return atiHandleTestCOPS(srcId);
312
313 #else /* FF_ATI_BAT */
314 TRACE_FUNCTION("tesatPlusCOPS()");
315 return atiHandleTestCOPS(cl,srcId);
316 #endif /* FF_ATI_BAT */
317
318 }
319
320 GLOBAL T_ATI_RSLT queatPlusCOPS (char *cl, UBYTE srcId)
321 {
322 CHAR op[MAX_ALPHA_OPER_LEN] = {0};
323 T_ACI_RETURN ret = AT_FAIL;
324 T_ACI_COPS_MOD mode = COPS_MOD_NotPresent;
325 T_ACI_COPS_FRMT format = COPS_FRMT_NotPresent;
326 SHORT startIdx = 0,
327 lastIdx = 0;
328 SHORT pos = 0;
329
330 TRACE_FUNCTION("queatPlusCops()");
331
332 #ifdef FF_ATI_BAT
333 {
334 T_BAT_cmd_send cmd;
335 T_BAT_no_parameter dummy;
336
337 cmd.ctrl_params = BAT_CMD_QUE_PLUS_COPS;
338 dummy.bat_dummy = 0xFF;
339 cmd.params.ptr_que_plus_cops = &dummy;
340 bat_send(ati_bat_get_client(srcId), &cmd);
341 return(ATI_EXCT);
342 }
343 #else /* no FF_ATI_BAT */
344
345 ret = qAT_PlusCOPS(srcId,&mode,&format,op);
346 if (ret EQ AT_CMPL)
347 {
348 if (*op)
349 sprintf(g_sa,"+COPS: %d,%d,\"%s\"",mode,format,op);
350 else
351 sprintf(g_sa,"+COPS: %d",mode);
352
353 io_sendMessage(srcId, g_sa, ATI_NORMAL_OUTPUT);
354 }
355 else
356 {
357 cmdCmeError(CME_ERR_Unknown);
358 }
359 return (map_aci_2_ati_rslt(ret));
360
361 #endif /* no FF_ATI_BAT */
362 }
363
364 /*
365 +--------------------------------------------------------------------+
366 | PROJECT : GSM-F&D (8411) MODULE : ACI_CMD |
367 | STATE : code ROUTINE : setatPercentCOPS |
368 +--------------------------------------------------------------------+
369
370 PURPOSE : %COPS command (operator selection)
371 */
372
373 GLOBAL T_ATI_RSLT setatPercentCOPS (char *cl, UBYTE srcId)
374 {
375 CHAR op[MAX_ALPHA_OPER_LEN] = {0};
376 T_ACI_RETURN ret = AT_FAIL;
377 T_ACI_COPS_MOD mode = COPS_MOD_NotPresent;
378 T_ACI_COPS_FRMT format = COPS_FRMT_NotPresent;
379 SHORT startIdx = 0,
380 lastIdx = 0;
381 SHORT pos=0;
382 T_ATI_SRC_PARAMS *src_params = find_element (ati_src_list, srcId, search_ati_src_id);
383
384 if (CFUNfun NEQ CFUN_FUN_Full)
385 {
386 TRACE_EVENT_P1("%COPS error: cannot proceed Mobile has no Full CFUN: %d", CFUNfun);
387 cmdCmeError(CME_ERR_OpNotAllow);
388 return ATI_FAIL;
389 }
390 cl = parse (cl,"dds",&mode,&format,(LONG)(MAX_ALPHA_OPER_LEN-1),op); /*split parameter string in int,int,str*/
391 if (!cl) /*For %COPS, Manual selection without Operator parameter is allowed */
392 {
393 cmdCmeError(CME_ERR_OpNotAllow);
394 return ATI_FAIL;
395 }
396
397 #ifdef FF_ATI_BAT
398 {
399 T_BAT_cmd_send cmd;
400 T_BAT_cmd_set_percent_cops my_bat_set_percent_cops;
401 UBYTE OperLength = strlen(op);
402
403 TRACE_FUNCTION("setatPercentCOPS() calls bat_send() <=== as APPLICATION");
404
405 memset(&my_bat_set_percent_cops, sizeof(my_bat_set_percent_cops), FALSE);
406 cmd.ctrl_params = BAT_CMD_SET_PERCENT_COPS;
407 cmd.params.ptr_set_percent_cops = &my_bat_set_percent_cops;
408
409 my_bat_set_percent_cops.mode = (T_BAT_VAL_percent_cops_mode)mode;
410 my_bat_set_percent_cops.format = (T_BAT_VAL_percent_cops_format)format;
411
412 if (OperLength NEQ 0 &&
413 OperLength <= BAT_MAX_COPS_LONG_OPER_LEN)
414 {
415 memcpy(&my_bat_set_percent_cops.oper, op, BAT_MAX_COPS_LONG_OPER_LEN);
416 }
417
418 src_params->curAtCmd = AT_CMD_P_COPS;
419
420 bat_send(ati_bat_get_client(srcId), &cmd);
421 return ATI_EXCT; /* executing, because response is passed by callback function */
422 }
423
424 #else /* no FF_ATI_BAT */
425
426 TRACE_FUNCTION("setatPercentCOPS()");
427 ret = sAT_PercentCOPS (srcId,mode,format,op);
428 switch (ret)
429 {
430 case (AT_CMPL): /*operation completed*/
431 break;
432 case (AT_EXCT):
433 src_params->curAtCmd = AT_CMD_P_COPS;
434 break;
435 default:
436 cmdCmeError(CME_ERR_Unknown); /*Command failed*/
437 break;
438 }
439 return (map_aci_2_ati_rslt(ret));
440
441 #endif /* no FF_ATI_BAT */
442 }
443
444
445 /*
446 +--------------------------------------------------------------------+
447 | PROJECT : GSM-F&D (8411) MODULE : ACI_CMD |
448 | STATE : code ROUTINE : tesatPercentCOPS |
449 +--------------------------------------------------------------------+
450
451 PURPOSE : %COPS command (operator test)
452 */
453
454
455 GLOBAL T_ATI_RSLT tesatPercentCOPS (char *cl, UBYTE srcId)
456 {
457 T_ATI_SRC_PARAMS *src_params = find_element (ati_src_list, srcId, search_ati_src_id);
458
459 #ifdef FF_ATI_BAT
460 TRACE_FUNCTION("tesatPercentCOPS() calls bat_send() <=== as APPLICATION");
461 return atiHandleTestCOPS(srcId);
462
463 #else /* FF_ATI_BAT */
464 TRACE_FUNCTION("tesatPercentCOPS()");
465 return atiHandleTestCOPS(cl,srcId);
466 #endif /* FF_ATI_BAT */
467 }
468
469 /*
470 +--------------------------------------------------------------------+
471 | PROJECT : GSM-F&D (8411) MODULE : ACI_CMD |
472 | STATE : code ROUTINE : queatPercentCOPS |
473 +--------------------------------------------------------------------+
474
475 PURPOSE : %COPS command (operator query)
476 */
477
478
479 GLOBAL T_ATI_RSLT queatPercentCOPS (char *cl, UBYTE srcId)
480 {
481 CHAR op[MAX_ALPHA_OPER_LEN] = {0};
482 T_ACI_RETURN ret = AT_FAIL;
483 T_ACI_COPS_MOD mode = COPS_MOD_NotPresent;
484 T_ACI_COPS_FRMT format = COPS_FRMT_NotPresent;
485 T_ACI_COPS_SVST svrStatus = COPS_SVST_NotPresent;
486 SHORT startIdx = 0,
487 lastIdx = 0;
488 SHORT pos = 0;
489
490 #ifdef FF_ATI_BAT
491 {
492 T_BAT_cmd_send cmd;
493 T_BAT_no_parameter dummy;
494
495 TRACE_FUNCTION("queatPercentCOPS() calls bat_send() <=== as APPLICATION");
496 cmd.ctrl_params = BAT_CMD_QUE_PERCENT_COPS;
497 dummy.bat_dummy = 0xFF;
498 cmd.params.ptr_que_percent_cops = &dummy;
499 bat_send(ati_bat_get_client(srcId), &cmd);
500 return ATI_EXCT; /* executing, because response is passed by callback function */
501 }
502 #else /* no FF_ATI_BAT */
503
504 TRACE_FUNCTION("queatPercentCOPS()");
505
506 ret = qAT_PercentCOPS(srcId,&mode,&format,&svrStatus,op);
507 if (ret EQ AT_CMPL)
508 {
509 /* Added an empty comma and the service Status parameter */
510 sprintf(g_sa,"%s: %d,%d,\"%s\",,%d","%COPS",mode,format,op,svrStatus);
511 io_sendMessage(srcId, g_sa, ATI_NORMAL_OUTPUT);
512
513 }
514 else
515 {
516 cmdCmeError(CME_ERR_Unknown); /*command failed*/
517 }
518 return (map_aci_2_ati_rslt(ret));
519
520 #endif /* no FF_ATI_BAT */
521 }
522
523
524
525 /*
526 +--------------------------------------------------------------------+
527 | PROJECT : GSM-F&D (8411) MODULE : ACI_CMD |
528 | STATE : code ROUTINE : setatPercentCREG |
529 +--------------------------------------------------------------------+
530
531 PURPOSE : %CREG command (Network registration)
532 */
533
534 GLOBAL T_ATI_RSLT setatPercentCREG (char *cl, UBYTE srcId)
535 {
536 T_ATI_CREG_MOD mode=CREG_MOD_OFF;
537
538 TRACE_FUNCTION("setatPercentCREG()");
539
540 cl=parse(cl,"d",&mode);
541
542 switch(mode)
543 {
544 case CREG_MOD_OFF:
545 case CREG_MOD_ON:
546 case CREG_MOD_LOC_INF_ON:
547 /* user wants to set mode: reset CREG related ATI parameters */
548 ati_creg_init(srcId, PercentCREG_CMD);
549 ati_user_output_cfg[srcId].percent_creg.mod_lac_cid.pres_mode = mode;
550 return ATI_CMPL;
551
552 default:
553 cmdCmeError(CME_ERR_OpNotAllow);
554 return ATI_FAIL;
555 }
556 }
557
558
559 /*
560 +--------------------------------------------------------------------+
561 | PROJECT : GPRS (8441) MODULE : GACI_CMD |
562 | STATE : code ROUTINE : queatPercentCREG |
563 +--------------------------------------------------------------------+
564
565 PURPOSE : %CREG command
566 */
567 GLOBAL T_ATI_RSLT queatPercentCREG (char *cl, UBYTE srcId)
568 {
569
570 #ifndef FF_ATI_BAT
571 T_ACI_CREG_STAT stat;
572 USHORT lac, cid;
573 T_ATI_CREG_MOD mode;
574 T_ACI_P_CREG_GPRS_IND gprs_ind;
575 short pos;
576 #endif
577
578 TRACE_FUNCTION("queatPercentCREG()");
579
580 #ifdef FF_ATI_BAT
581 {
582 T_BAT_cmd_send cmd;
583 T_BAT_no_parameter dummy;
584
585 cmd.ctrl_params = BAT_CMD_QUE_PERCENT_CREG;
586 dummy.bat_dummy = 0xFF;
587 cmd.params.ptr_que_percent_creg = &dummy;
588 bat_send(ati_bat_get_client(srcId), &cmd);
589 return(ATI_EXCT);
590 }
591 #else /* no FF_ATI_BAT */
592
593 mode = ati_user_output_cfg[srcId].percent_creg.mod_lac_cid.pres_mode;
594
595 if (qAT_PercentCREG(srcId, &stat, &lac, &cid, &gprs_ind) NEQ AT_CMPL)
596 {
597 cmdCmeError(CME_ERR_Unknown);
598 return ATI_FAIL;
599 }
600
601 pos = sprintf(g_sa, "%s: %d,%d", "%CREG", mode, stat);
602
603 if ( (mode EQ CREG_MOD_LOC_INF_ON) AND
604 (stat EQ CREG_STAT_Reg OR stat EQ CREG_STAT_Roam) )
605 pos += sprintf(g_sa+pos, ",\"%04X\",\"%04X\"", lac, cid);
606 else
607 pos += sprintf(g_sa+pos, ",,");
608
609 sprintf(g_sa+pos,",%d", gprs_ind);
610
611 io_sendMessage(srcId, g_sa, ATI_NORMAL_OUTPUT);
612 return ATI_CMPL;
613
614 #endif /* no FF_ATI_BAT */
615 }
616
617 /*
618 +--------------------------------------------------------------------+
619 | PROJECT : GSM-F&D (8411) MODULE : ACI_CMD |
620 | STATE : code ROUTINE : setatPlusCREG |
621 +--------------------------------------------------------------------+
622
623 PURPOSE : +CREG command (Network registration)
624 */
625
626 GLOBAL T_ATI_RSLT setatPlusCREG (char *cl, UBYTE srcId)
627 {
628 T_ATI_CREG_MOD mode=CREG_MOD_OFF;
629
630 TRACE_FUNCTION("setatPlusCREG()");
631
632 cl=parse(cl,"d",&mode);
633
634 switch(mode)
635 {
636 case CREG_MOD_OFF:
637 case CREG_MOD_ON:
638 case CREG_MOD_LOC_INF_ON:
639 /* user wants to set mode: reset CREG related ATI parameters */
640 ati_creg_init(srcId, CREG_CMD);
641 ati_user_output_cfg[srcId].creg.mod_lac_cid.pres_mode = mode;
642 return ATI_CMPL;
643
644 default:
645 cmdCmeError(CME_ERR_OpNotAllow);
646 return ATI_FAIL;
647 }
648 }
649
650 GLOBAL T_ATI_RSLT queatPlusCREG (char *cl, UBYTE srcId)
651 {
652 T_ACI_CREG_STAT stat;
653 USHORT lac, cid;
654 T_ATI_CREG_MOD mode;
655 short pos;
656
657 TRACE_FUNCTION("queatPlusCREG()");
658
659 mode = ati_user_output_cfg[srcId].creg.mod_lac_cid.pres_mode;
660
661 if (qAT_PlusCREG(srcId, &stat, &lac, &cid) NEQ AT_CMPL)
662 {
663 cmdCmeError(CME_ERR_Unknown);
664 return ATI_FAIL;
665 }
666
667 pos = sprintf(g_sa, "+CREG: %d,%d", mode, stat);
668
669 if (mode EQ CREG_MOD_LOC_INF_ON)
670 {
671 if (stat EQ CREG_STAT_Reg OR stat EQ CREG_STAT_Roam)
672 sprintf(g_sa+pos, ",\"%04X\",\"%04X\"", lac, cid);
673 }
674
675 io_sendMessage(srcId, g_sa, ATI_NORMAL_OUTPUT);
676 return ATI_CMPL;
677 }
678
679
680
681
682 /*
683 +--------------------------------------------------------------------+
684 | PROJECT : GSM-F&D (8411) MODULE : ACI_CMD |
685 | STATE : code ROUTINE : atPlusCopn |
686 +--------------------------------------------------------------------+
687
688 PURPOSE : +COPN command (read operator names)
689 */
690
691 GLOBAL T_ATI_RSLT setatPlusCOPN (char *cl, UBYTE srcId)
692 {
693 SHORT startIdx, lastIdx;
694 T_ACI_COPN_LST operLst;
695 T_COPN_VAR *COPN_Var;
696 UBYTE idx;
697 BOOL loop;
698 BOOL ret;
699 COPN_Var = &mmShrdPrm.COPN_VAR[srcId];
700
701 TRACE_FUNCTION("setatPlusCOPN()");
702
703 /* read out the PCM list */
704 startIdx = 0;
705 loop = TRUE;
706
707 do
708 {
709 if ( qAT_PlusCOPN(srcId, COPN_LID_Pcm, startIdx,
710 &lastIdx, operLst) EQ AT_FAIL )
711 break;
712
713 for( idx=0; idx < MAX_OPER; idx++ )
714 {
715 if ( operLst[idx].numOper[0] EQ 0x0 )
716 {
717 loop = FALSE;
718 break;
719 }
720
721 sprintf(g_sa,"+COPN: \"%s\",\"%s\"",operLst[idx].numOper,
722 operLst[idx].alphaOper );
723 io_sendMessage(srcId, g_sa, ATI_NORMAL_OUTPUT);
724 }
725 startIdx = lastIdx+1;
726 }
727 while( loop );
728
729 /* read out the constant list */
730 startIdx = 0;
731
732 ret = cmd_readCOPNBlock(startIdx,srcId);
733
734 if (ret EQ TRUE)
735 return ATI_CMPL;
736 else
737 return ATI_EXCT;
738
739 }
740
741 /*
742 +--------------------------------------------------------------------+
743 | PROJECT : GSM-F&D (8411) MODULE : ACI_CMD |
744 | STATE : code ROUTINE : setatPercentCOPN |
745 +--------------------------------------------------------------------+
746
747 PURPOSE : %COPN command (get MCC and MNC, long name or short name given one of the them)
748 */
749
750 GLOBAL T_ATI_RSLT setatPercentCOPN (char *cl, UBYTE srcId)
751 {
752 T_ACI_COPS_FRMT format = COPS_FRMT_NotPresent;
753 CHAR op[MAX_ALPHA_OPER_LEN] = {0};
754 T_ACI_OPER_NTRY * oper_ntry;
755 USHORT i;
756
757 TRACE_FUNCTION ("setatPercentCOPN()");
758
759 cl = parse (cl,"ds", &format, (LONG)MAX_ALPHA_OPER_LEN, op);
760
761 if ((!cl) OR (format < COPS_FRMT_Long) OR (format > COPS_FRMT_Numeric) OR *op EQ '\0')
762 {
763 cmdCmeError(CME_ERR_OpNotAllow);
764 return ATI_FAIL;
765 }
766
767 if (format EQ COPS_FRMT_Numeric)
768 {
769 if ((strlen(op) NEQ (SIZE_MNC + SIZE_MCC -1)) AND
770 (strlen(op) NEQ (SIZE_MNC + SIZE_MCC)))
771 {
772 cmdCmeError(CME_ERR_OpNotAllow);
773 return ATI_FAIL;
774 }
775
776 for (i = 0; *(op+i) NEQ '\0'; i ++)
777 {
778 if (!((*(op+i) >= '0')AND(*(op+i) <= '9')))
779 {
780 cmdCmeError(CME_ERR_OpNotAllow);
781 return ATI_FAIL;
782 }
783 }
784 }
785
786 ACI_MALLOC (oper_ntry, sizeof (T_ACI_OPER_NTRY));
787
788 if (qAT_PercentCOPN( srcId, format, op, oper_ntry) EQ AT_FAIL)
789 {
790 sprintf (g_sa, "%s", "%COPN: ");
791 io_sendMessage(srcId, g_sa, ATI_NORMAL_OUTPUT);
792 ACI_MFREE (oper_ntry);
793 return ATI_CMPL;
794 }
795
796 if ((oper_ntry->mnc & 0x00F) EQ 0xF)
797 {
798 sprintf (g_sa, "%s\"%s\",\"%s\",\"%03X%02X\",%d", "%COPN: ", oper_ntry->longName, oper_ntry->shrtName,
799 oper_ntry->mcc, oper_ntry->mnc >> 4, oper_ntry->source);
800 }
801 else
802 {
803 sprintf (g_sa, "%s\"%s\",\"%s\",\"%03X%03X\",%d", "%COPN: ", oper_ntry->longName, oper_ntry->shrtName,
804 oper_ntry->mcc, oper_ntry->mnc, oper_ntry->source);
805 }
806 io_sendMessage(srcId, g_sa, ATI_NORMAL_OUTPUT);
807
808 ACI_MFREE (oper_ntry);
809 return ATI_CMPL;
810
811
812 }
813
814 /*
815 +--------------------------------------------------------------------+
816 | PROJECT : GSM-F&D (8411) MODULE : ACI_CMD |
817 | STATE : code ROUTINE : atPlusWS46 |
818 +--------------------------------------------------------------------+
819
820 PURPOSE : +WS46 command (select wireless network)
821 */
822
823 GLOBAL T_ATI_RSLT setatPlusWS46 (char *cl, UBYTE srcId)
824 {
825 T_ACI_RETURN ret = AT_FAIL;
826 T_ACI_WS46_MOD mode=WS46_MOD_NotPresent;
827
828 TRACE_FUNCTION("setatPLusWS46()");
829
830 cl = parse(cl,"d",&mode);
831 if (!cl)
832 {
833 cmdCmeError(CME_ERR_OpNotAllow);
834 return ATI_FAIL;
835 }
836
837 #ifdef FF_ATI_BAT
838
839 {
840 T_BAT_cmd_send cmd;
841 T_BAT_cmd_set_plus_ws46 ws46;
842
843 cmd.ctrl_params = BAT_CMD_SET_PLUS_WS46;
844 cmd.params.ptr_set_plus_ws46=&ws46;
845
846 ws46.n=(T_BAT_plus_ws46_n)mode;
847
848 bat_send(ati_bat_get_client(srcId), &cmd);
849 return(ATI_EXCT);
850 }
851
852 #else /* no FF_ATI_BAT */
853
854 ret=sAT_PlusWS46(srcId,mode);
855
856 if (ret EQ AT_CMPL)
857 {
858 return ATI_CMPL;
859 }
860 else
861 {
862 cmdCmeError(CME_ERR_OpNotAllow);
863 return ATI_FAIL;
864 }
865
866 #endif /* no FF_ATI_BAT */
867 }
868
869 GLOBAL T_ATI_RSLT queatPlusWS46 (char *cl, UBYTE srcId)
870 {
871 T_ACI_RETURN ret = AT_FAIL;
872 T_ACI_WS46_MOD mode=WS46_MOD_NotPresent;
873
874 TRACE_FUNCTION("queatPLusWS46()");
875
876 #ifdef FF_ATI_BAT
877 {
878 T_BAT_cmd_send cmd;
879 T_BAT_no_parameter dummy;
880
881 cmd.ctrl_params = BAT_CMD_QUE_PLUS_WS46;
882 dummy.bat_dummy = 0xFF;
883 cmd.params.ptr_que_plus_ws46 = &dummy;
884 bat_send(ati_bat_get_client(srcId), &cmd);
885 return(ATI_EXCT);
886 }
887 #else /* no FF_ATI_BAT */
888
889 ret = qAT_PlusWS46(srcId,&mode);
890
891 if (ret EQ AT_CMPL)
892 {
893 resp_disp(srcId, cl,"e",&mode);
894 return ATI_CMPL;
895 }
896 else if (ret EQ AT_FAIL)
897 {
898 cmdCmeError(CME_ERR_OpNotAllow);
899 return ATI_FAIL;
900 }
901 return (map_aci_2_ati_rslt(ret));
902
903 #endif /* no FF_ATI_BAT */
904 }
905
906 /*
907 +--------------------------------------------------------------------+
908 | PROJECT : GSM-F&D (8411) MODULE : |
909 | STATE : code ROUTINE : setatPercentCHPL |
910 +--------------------------------------------------------------------+
911
912 PURPOSE : show list of all available entries in the SIM field EF_HPLMNwAcT.
913
914 Command Possible Response
915 %CHPL=oprFrmt %CHPL: <opr>
916 %CHPL=? %CHPL: (list of supported <oprFrmt>s)
917
918 <oprFrmt>:
919 0 long format alphanumeric <opr>
920 1 short format alphanumeric <opr>
921 2 numeric <opr>
922
923 <opr>: string type; <oprFrmt> indicates if the format is
924 alphanumeric or numeric.
925 Long alphanumeric can be up to 16 characters.
926 Short alphanumeric can be up to 8 characters.
927 Numeric format is the GSM LAI number, which consists of:
928 3 BCD country code.
929 2 BCD network code.
930 The returned <opr> string shall not be in BCD format, but
931 in IRA characters converted from BCD. Hence the number
932 will have the structure (CC digit 3)(CC digit 2)(CC digit 1)
933 (NW digit 2)(NW digit 1).
934
935 */
936
937 GLOBAL T_ATI_RSLT setatPercentCHPL( char *cl, UBYTE srcId )
938 {
939 T_ACI_CHPL_FRMT format = CHPL_FRMT_NotPresent;
940
941 #ifndef FF_ATI_BAT
942 T_ACI_OPER_NTRY oper;
943 #endif
944
945 T_ACI_RETURN ret = AT_FAIL;
946
947 TRACE_FUNCTION( "setatPercentCHPL()" );
948
949 if (CFUNfun NEQ CFUN_FUN_Full)
950 {
951 TRACE_EVENT_P1("+COPS error: cannot proceed Mobile has no Full CFUN: %d", CFUNfun);
952 cmdCmeError(CME_ERR_OpNotAllow);
953 return ATI_FAIL;
954 }
955
956 /* parse mode */
957 cl = parse (cl, "d", &format);
958 if ((!cl) OR (format > CHPL_FRMT_Numeric) OR (format < CHPL_FRMT_NotPresent))
959 {
960 cmdCmeError (CME_ERR_OpNotAllow);
961 return (ATI_FAIL);
962 }
963
964 #ifdef FF_ATI_BAT
965
966 {
967 T_BAT_cmd_send cmd;
968 T_BAT_cmd_set_percent_chpl chpl;
969
970 cmd.ctrl_params = BAT_CMD_SET_PERCENT_CHPL;
971 cmd.params.ptr_set_percent_chpl=&chpl;
972
973 /*
974 * This relies on T_ACI_CHPL_FRMT and T_BAT_percent_chpl_oprfrmt being
975 * identical.
976 */
977 chpl.oprfrmt=(T_BAT_percent_chpl_oprfrmt)format;
978
979 bat_send(ati_bat_get_client(srcId), &cmd);
980 return(ATI_EXCT);
981 }
982
983 #else /* no FF_ATI_BAT */
984
985 ret = sAT_PercentCHPL (srcId, &oper);
986 if (ret NEQ AT_CMPL)
987 {
988 cmdCmeError(CME_ERR_Unknown);
989 return (ATI_FAIL);
990 }
991
992 switch (format)
993 {
994 case CHPL_FRMT_Long :
995 sprintf(g_sa, "%s: %s", "%CHPL", oper.longName);
996 break;
997
998 case CHPL_FRMT_Short :
999 sprintf(g_sa, "%s: %s", "%CHPL", oper.shrtName);
1000 break;
1001
1002 case CHPL_FRMT_Numeric :
1003 if ((oper.mnc & 0x00F) EQ 0xF)
1004 /*lint -e{702} */
1005 sprintf(g_sa, "%s: %03x,%02x", "%CHPL", oper.mcc, oper.mnc >> 4);
1006 else
1007 sprintf(g_sa, "%s: %03x,%03x", "%CHPL", oper.mcc, oper.mnc);
1008 break;
1009
1010 default :
1011 cmdCmeError(CME_ERR_Unknown);
1012 return (ATI_FAIL);
1013 }
1014 io_sendMessage (srcId, g_sa, ATI_NORMAL_OUTPUT);
1015
1016 return(ATI_CMPL);
1017
1018 #endif /* no FF_ATI_BAT */
1019 }
1020
1021 /*
1022 +--------------------------------------------------------------------+
1023 | PROJECT : GSM-F&D (8411) MODULE : ACI_CMD |
1024 | STATE : code ROUTINE : setatPlusCTZR |
1025 +--------------------------------------------------------------------+
1026
1027 PURPOSE : %CTZR command (Timezone Mode)
1028 */
1029 GLOBAL T_ATI_RSLT setatPlusCTZR (char *cl, UBYTE srcId)
1030 {
1031 T_ACI_CTZR_MODE mode = CTZR_MODE_OFF; /* CTZR */
1032 T_ACI_RETURN ret = AT_FAIL;
1033
1034 TRACE_FUNCTION( "setatPlusCTZR()" );
1035
1036 /* parse mode */
1037 cl = parse (cl, "d", &mode);
1038 if ((!cl) OR (mode > CTZR_MODE_ON) OR (mode < CTZR_MODE_OFF))
1039 {
1040 cmdCmeError (CME_ERR_OpNotAllow);
1041 return (ATI_FAIL);
1042 }
1043
1044 ret = sAT_PlusCTZR (srcId, mode);
1045
1046 switch (ret)
1047 {
1048 case (AT_CMPL): /*operation completed*/
1049 break;
1050
1051 default:
1052 cmdCmeError(CME_ERR_Unknown); /*Command failed*/
1053 break;
1054 }
1055 return (map_aci_2_ati_rslt(ret));
1056
1057 }
1058
1059 /*
1060 +--------------------------------------------------------------------+
1061 | PROJECT : GSM-F&D (8411) MODULE : ACI_CMD |
1062 | STATE : code ROUTINE : queatPlusCTZR |
1063 +--------------------------------------------------------------------+
1064
1065 PURPOSE : %CTZR command (Timezone Mode)
1066 */
1067 GLOBAL T_ATI_RSLT queatPlusCTZR (char *cl, UBYTE srcId)
1068 {
1069 T_ACI_CTZR_MODE mode;
1070 T_ACI_RETURN ret = AT_FAIL;
1071
1072 TRACE_FUNCTION("queatPlusCTZR()");
1073
1074 ret = qAT_PlusCTZR(srcId, &mode);
1075 if (ret NEQ AT_CMPL)
1076 {
1077 cmdCmeError(CME_ERR_Unknown);
1078 return (ATI_FAIL);
1079 }
1080
1081 sprintf(g_sa,"+CTZR: %d", mode);
1082 io_sendMessage(srcId, g_sa, ATI_NORMAL_OUTPUT);
1083
1084 return ATI_CMPL;
1085 }
1086
1087 /*
1088 +--------------------------------------------------------------------+
1089 | PROJECT : GSM-F&D (8411) MODULE : ACI_CMD |
1090 | STATE : code ROUTINE : setatPlusCTZU |
1091 +--------------------------------------------------------------------+
1092
1093 PURPOSE : +CTZU command (Timezone Update)
1094 */
1095 GLOBAL T_ATI_RSLT setatPlusCTZU (char *cl, UBYTE srcId)
1096 {
1097 T_ACI_CTZU_MODE mode = CTZU_MODE_OFF; /* CTZU */
1098 T_ACI_RETURN ret = AT_FAIL;
1099
1100 TRACE_FUNCTION( "setatPlusCTZU()" );
1101
1102 /* parse mode */
1103 cl = parse (cl, "d", &mode);
1104 if ((!cl) OR (mode > CTZU_MODE_ON) OR (mode < CTZU_MODE_OFF))
1105 {
1106 cmdCmeError (CME_ERR_OpNotAllow);
1107 return (ATI_FAIL);
1108 }
1109
1110 #ifdef FF_ATI_BAT
1111
1112 {
1113 T_BAT_cmd_send cmd;
1114 T_BAT_cmd_set_plus_ctzu ctzu;
1115
1116 cmd.ctrl_params = BAT_CMD_SET_PLUS_CTZU;
1117 cmd.params.ptr_set_plus_ctzu=&ctzu;
1118
1119 /*
1120 * This relies on T_ACI_CTZU_MODE and T_BAT_plus_ctzu_onoff being
1121 * identical.
1122 */
1123 ctzu.onoff=(T_BAT_plus_ctzu_onoff)mode;
1124
1125 bat_send(ati_bat_get_client(srcId), &cmd);
1126 return(ATI_EXCT);
1127 }
1128
1129 #else /* no FF_ATI_BAT */
1130
1131 ret = sAT_PlusCTZU (srcId, mode);
1132
1133 switch (ret)
1134 {
1135 case (AT_CMPL): /*operation completed*/
1136 break;
1137
1138 default:
1139 cmdCmeError(CME_ERR_Unknown); /*Command failed*/
1140 break;
1141 }
1142 return (map_aci_2_ati_rslt(ret));
1143
1144 #endif /* no FF_ATI_BAT */
1145 }
1146
1147
1148 /*
1149 +--------------------------------------------------------------------+
1150 | PROJECT : GSM-F&D (8411) MODULE : ACI_CMD |
1151 | STATE : code ROUTINE : setatPercentCTZV |
1152 +--------------------------------------------------------------------+
1153
1154 PURPOSE : %CTZV command (time and date report)
1155 */
1156 GLOBAL T_ATI_RSLT setatPercentCTZV (char *cl, UBYTE srcId)
1157 {
1158 T_ACI_PCTZV_MODE mode = PCTZV_MODE_OFF; /* %CTZV */
1159 T_ACI_RETURN ret = AT_FAIL;
1160
1161 TRACE_FUNCTION( "setatPercentCTZV()" );
1162
1163 /* parse mode */
1164 cl = parse (cl, "d", &mode);
1165 if ((!cl) OR (mode > PCTZV_MODE_ON) OR (mode < PCTZV_MODE_OFF))
1166 {
1167 cmdCmeError (CME_ERR_OpNotAllow);
1168 return (ATI_FAIL);
1169 }
1170
1171 ret = sAT_PercentCTZV (srcId, mode);
1172
1173 switch (ret)
1174 {
1175 case (AT_CMPL): /*operation completed*/
1176 break;
1177
1178 default:
1179 cmdCmeError(CME_ERR_Unknown); /*Command failed*/
1180 break;
1181 }
1182 return (map_aci_2_ati_rslt(ret));
1183
1184 }
1185
1186
1187
1188 /*
1189 +--------------------------------------------------------------------+
1190 | PROJECT : GSM-F&D (8411) MODULE : ACI_CMD |
1191 | STATE : code ROUTINE : setatPercentCNIV |
1192 +--------------------------------------------------------------------+
1193
1194 PURPOSE : %CNIV command (network identity report)
1195 */
1196 GLOBAL T_ATI_RSLT setatPercentCNIV (char *cl, UBYTE srcId)
1197 {
1198 T_ACI_CNIV_MODE mode = CNIV_MODE_OFF; /* CNIV */
1199 T_ACI_RETURN ret = AT_FAIL;
1200
1201 TRACE_FUNCTION( "setatPercentCNIV()" );
1202
1203 /* parse mode */
1204 cl = parse (cl, "d", &mode);
1205 if ((!cl) OR (mode > CNIV_MODE_ON) OR (mode < CNIV_MODE_OFF))
1206 {
1207 cmdCmeError (CME_ERR_OpNotAllow);
1208 return (ATI_FAIL);
1209 }
1210
1211 ret = sAT_PercentCNIV (srcId, mode);
1212
1213 switch (ret)
1214 {
1215 case (AT_CMPL): /*operation completed*/
1216 break;
1217
1218 default:
1219 cmdCmeError(CME_ERR_Unknown); /*Command failed*/
1220 break;
1221 }
1222 return (map_aci_2_ati_rslt(ret));
1223
1224 }
1225
1226
1227
1228
1229 /*
1230 +--------------------------------------------------------------------+
1231 | PROJECT : GSM-F&D (8411) MODULE : ACI_CMD |
1232 | STATE : code ROUTINE : queatPlusCTZU |
1233 +--------------------------------------------------------------------+
1234
1235 PURPOSE : +CTZU query command (Timezone update)
1236 */
1237 GLOBAL T_ATI_RSLT queatPlusCTZU (char *cl, UBYTE srcId)
1238 {
1239 #ifndef FF_ATI_BAT
1240 T_ACI_CTZU_MODE mode;
1241 T_ACI_RETURN ret = AT_FAIL;
1242 #endif
1243
1244 TRACE_FUNCTION("queatPlusCTZU()");
1245
1246 #ifdef FF_ATI_BAT
1247 {
1248 T_BAT_cmd_send cmd;
1249 T_BAT_no_parameter dummy;
1250
1251 cmd.ctrl_params = BAT_CMD_QUE_PLUS_CTZU;
1252 dummy.bat_dummy = 0xFF;
1253 cmd.params.ptr_que_plus_ctzu = &dummy;
1254 bat_send(ati_bat_get_client(srcId), &cmd);
1255 return(ATI_EXCT);
1256 }
1257 #else /* no FF_ATI_BAT */
1258
1259 ret = qAT_PlusCTZU(srcId, &mode);
1260 if (ret NEQ AT_CMPL)
1261 {
1262 cmdCmeError(CME_ERR_Unknown);
1263 return (ATI_FAIL);
1264 }
1265
1266 sprintf(g_sa,"+CTZU: %d", mode);
1267 io_sendMessage(srcId, g_sa, ATI_NORMAL_OUTPUT);
1268
1269 return ATI_CMPL;
1270
1271 #endif /* no FF_ATI_BAT */
1272 }
1273
1274
1275
1276 /*
1277 +--------------------------------------------------------------------+
1278 | PROJECT : GSM-F&D (8411) MODULE : ACI_CMD |
1279 | STATE : code ROUTINE : queatPercentCTZV |
1280 +--------------------------------------------------------------------+
1281
1282 PURPOSE : %CTZV command (time and date report)
1283 */
1284 GLOBAL T_ATI_RSLT queatPercentCTZV (char *cl, UBYTE srcId)
1285 {
1286 T_ACI_PCTZV_MODE mode;
1287 T_ACI_RETURN ret = AT_FAIL;
1288
1289 TRACE_FUNCTION("queatPercentCTZV()");
1290
1291 ret = qAT_PercentCTZV(srcId, &mode);
1292 if (ret NEQ AT_CMPL)
1293 {
1294 cmdCmeError(CME_ERR_Unknown);
1295 return (ATI_FAIL);
1296 }
1297
1298 sprintf(g_sa,"%s: %d","%CTZV", mode);
1299 io_sendMessage(srcId, g_sa, ATI_NORMAL_OUTPUT);
1300
1301 return ATI_CMPL;
1302 }
1303
1304
1305 /*
1306 +--------------------------------------------------------------------+
1307 | PROJECT : GSM-F&D (8411) MODULE : ACI_CMD |
1308 | STATE : code ROUTINE : queatPercentCNIV |
1309 +--------------------------------------------------------------------+
1310
1311 PURPOSE : %CNIV command (time and date report)
1312 */
1313 GLOBAL T_ATI_RSLT queatPercentCNIV (char *cl, UBYTE srcId)
1314 {
1315 T_ACI_CNIV_MODE mode;
1316 T_ACI_RETURN ret = AT_FAIL;
1317
1318 TRACE_FUNCTION("queatPercentCNIV()");
1319
1320 ret = qAT_PercentCNIV(srcId, &mode);
1321 if (ret NEQ AT_CMPL)
1322 {
1323 cmdCmeError(CME_ERR_Unknown);
1324 return (ATI_FAIL);
1325 }
1326 sprintf(g_sa,"%s: %d","%CNIV", mode);
1327 io_sendMessage(srcId, g_sa, ATI_NORMAL_OUTPUT);
1328
1329 return ATI_CMPL;
1330 }
1331
1332 /*
1333 +--------------------------------------------------------------------+
1334 | PROJECT : GSM-F&D (8411) MODULE : ACI_CMD |
1335 | STATE : code ROUTINE : setatPercentTREG |
1336 +--------------------------------------------------------------------+
1337
1338 PURPOSE : %CWUP command (force power campaign)
1339 */
1340
1341 GLOBAL T_ATI_RSLT setatPercentCWUP (char *cl, UBYTE srcId)
1342 {
1343 T_ACI_RETURN ret = AT_FAIL;
1344 T_ACI_CWUP_TYPE type;
1345
1346 TRACE_FUNCTION( "setatPercentCWUP()" );
1347
1348 /* parse mode */
1349 cl = parse (cl, "d", &type);
1350 if ((!cl) OR (type NEQ CWUP_TYPE_RR))
1351 {
1352 cmdCmeError (CME_ERR_OpNotAllow);
1353 return (ATI_FAIL);
1354 }
1355
1356 #ifdef FF_ATI_BAT
1357
1358 {
1359 T_BAT_cmd_send cmd;
1360 T_BAT_cmd_set_percent_cwup cwup;
1361
1362 cmd.ctrl_params = BAT_CMD_SET_PERCENT_CWUP;
1363 cmd.params.ptr_set_percent_cwup=&cwup;
1364
1365 /*
1366 * This relies on T_ACI_CWUP_TYPE and T_BAT_percent_cwup_type being
1367 * identical.
1368 */
1369 cwup.type=(T_BAT_percent_cwup_type)type;
1370
1371 bat_send(ati_bat_get_client(srcId), &cmd);
1372 return(ATI_EXCT);
1373 }
1374
1375 #else /* no FF_ATI_BAT */
1376
1377 ret = sAT_PercentCWUP (srcId, type);
1378
1379 switch (ret)
1380 {
1381 case (AT_CMPL): /*operation completed*/
1382 break;
1383
1384 default:
1385 cmdCmeError(CME_ERR_Unknown); /*Command failed*/
1386 break;
1387 }
1388 return (map_aci_2_ati_rslt(ret));
1389
1390 #endif /* no FF_ATI_BAT */
1391 }
1392
1393 /*
1394 +--------------------------------------------------------------------+
1395 | PROJECT : GSM-F&D (8411) MODULE : ACI_CMD |
1396 | STATE : code ROUTINE : atPlusCIND |
1397 +--------------------------------------------------------------------+
1398
1399 PURPOSE : +CIND command
1400 (configures the signal strength and SMS full indication)
1401 */
1402 GLOBAL T_ATI_RSLT setatPlusCIND (char *cl, UBYTE srcId)
1403 {
1404 T_ACI_RETURN tRet = AT_FAIL;
1405 T_ACI_MM_CIND_VAL_TYPE sCindSettings;
1406
1407 TRACE_FUNCTION("setatPLusCIND()");
1408
1409 if (!cl)
1410 {
1411 cmdCmeError(CME_ERR_OpNotAllow);
1412 return ATI_FAIL;
1413 }
1414
1415 sCindSettings.sCindSignalParam = 0;
1416 sCindSettings.sCindSmsFullParam = 0;
1417
1418 cl = parse(cl,"dd", &sCindSettings.sCindSignalParam,
1419 &sCindSettings.sCindSmsFullParam);
1420
1421 if ((sCindSettings.sCindSignalParam < CIND_SIGNAL_INDICATOR_LVL0 ||
1422 sCindSettings.sCindSignalParam > CIND_SIGNAL_INDICATOR_LVL5) ||
1423 (sCindSettings.sCindSmsFullParam < CIND_SMSFULL_INDICATOR_MEMAVAIL ||
1424 sCindSettings.sCindSmsFullParam > CIND_SMSFULL_INDICATOR_MEMFULL))
1425 {
1426 cmdCmeError(CME_ERR_OpNotAllow);
1427 return ATI_FAIL;
1428 }
1429
1430 #ifdef FF_ATI_BAT
1431 {
1432 T_BAT_cmd_send cmd;
1433 T_BAT_cmd_set_plus_cind cind;
1434
1435 /*
1436 * Without this we will lose track of the source ID by the time the
1437 * response arrives.
1438 */
1439 srcId_cb=srcId;
1440
1441 cmd.ctrl_params = BAT_CMD_SET_PLUS_CIND;
1442 cmd.params.ptr_set_plus_cind=&cind;
1443
1444 /*
1445 * This relies on T_ACI_CIND_SIGNAL_TYPE being identical to
1446 * T_BAT_plus_cind_signal_ctrl and T_ACI_CIND_SMSFULL_TYPE being
1447 * identical to T_BAT_plus_cind_smsfull_ctrl.
1448 */
1449 cind.signal_ctrl=(T_BAT_plus_cind_signal_ctrl)sCindSettings.sCindSignalParam;
1450 cind.smsfull_ctrl=(T_BAT_plus_cind_smsfull_ctrl)sCindSettings.sCindSmsFullParam;
1451
1452 bat_send(ati_bat_get_client(srcId), &cmd);
1453 return(ATI_EXCT);
1454 }
1455 #else /* no FF_ATI_BAT */
1456
1457 tRet = sAT_PlusCIND( srcId, sCindSettings.sCindSignalParam,
1458 sCindSettings.sCindSmsFullParam );
1459
1460 if (tRet EQ AT_FAIL)
1461 {
1462 cmdCmeError(CME_ERR_OpNotAllow);
1463 return ATI_FAIL;
1464 }
1465 return ATI_CMPL;
1466
1467 #endif /* no FF_ATI_BAT */
1468 }
1469
1470 /*
1471 +--------------------------------------------------------------------+
1472 | PROJECT : GSM-F&D (8411) MODULE : ACI_CMD |
1473 | STATE : code ROUTINE : queatPlusCIND |
1474 +--------------------------------------------------------------------+
1475
1476 PURPOSE : +CIND query command
1477 (query the configured unsolicited signal strength
1478 and SMS full indication settings)
1479 */
1480 GLOBAL T_ATI_RSLT queatPlusCIND ( char *cl, UBYTE srcId )
1481 {
1482 #ifndef FF_ATI_BAT
1483 T_ACI_RETURN sRet = AT_FAIL;
1484 T_ACI_MM_CIND_VAL_TYPE sCindSettings;
1485 #endif
1486
1487 TRACE_FUNCTION("queatPlusCIND()");
1488
1489 #ifdef FF_ATI_BAT
1490 {
1491 T_BAT_cmd_send cmd;
1492 T_BAT_no_parameter dummy;
1493
1494 cmd.ctrl_params = BAT_CMD_QUE_PLUS_CIND;
1495 dummy.bat_dummy = 0xFF;
1496 cmd.params.ptr_que_plus_cind = &dummy;
1497 bat_send(ati_bat_get_client(srcId), &cmd);
1498 return(ATI_EXCT);
1499 }
1500 #else /* no FF_ATI_BAT */
1501
1502 sRet = qAT_PlusCIND( srcId, &sCindSettings.sCindSignalParam,
1503 &sCindSettings.sCindSmsFullParam );
1504
1505 if ( sCindSettings.sCindSignalParam == CIND_SIGNAL_INDICATOR_INVALID ) { sCindSettings.sCindSignalParam = CIND_SIGNAL_INDICATOR_LVL0; }
1506 if ( sCindSettings.sCindSmsFullParam == CIND_SMSFULL_INDICATOR_INVALID ) { sCindSettings.sCindSmsFullParam = CIND_SMSFULL_INDICATOR_MEMAVAIL; }
1507
1508 if (sRet EQ AT_CMPL)
1509 {
1510 resp_disp( srcId, cl,"ee", &sCindSettings.sCindSignalParam,
1511 &sCindSettings.sCindSmsFullParam );
1512 return ATI_CMPL;
1513 }
1514 else
1515 { /* error case */
1516 cmdCmeError(CME_ERR_OpNotAllow);
1517 return ATI_FAIL;
1518 }
1519
1520 #endif /* no FF_ATI_BAT */
1521 }
1522
1523 /*
1524 +--------------------------------------------------------------------+
1525 | PROJECT : GSM-F&D (8411) MODULE : ACI_CMD |
1526 | STATE : code ROUTINE : atPlusCMER |
1527 +--------------------------------------------------------------------+
1528
1529 PURPOSE : +CMER command
1530 (configures the kind of indication handling toward terminal)
1531 */
1532 GLOBAL T_ATI_RSLT setatPlusCMER ( char *cl, UBYTE srcId )
1533 {
1534 // UINT uiBufferCounter;
1535 T_ACI_RETURN tRet = AT_FAIL;
1536 T_ACI_MM_CMER_VAL_TYPE sCmerSettings;
1537 T_ACI_MM_CMER_VAL_TYPE sOldCmerSettings;
1538 T_ACI_MM_CMER_VAL_TYPE sEnteredCmerSettings;
1539 UINT uiDummy1 = 0u;
1540 UINT uiDummy2 = 0u;
1541
1542 TRACE_FUNCTION("setatPLusCMER()");
1543
1544 if (!cl)
1545 {
1546 cmdCmeError(CME_ERR_OpNotAllow);
1547 return ATI_FAIL;
1548 }
1549
1550 sCmerSettings.sCmerModeParam = CMER_MODE_INVALID;
1551 sCmerSettings.sCmerIndParam = CMER_INDICATOR_INVALID;
1552 sCmerSettings.sCmerBfrParam = CMER_BFR_INVALID;
1553
1554 cl = parse(cl,"ddddd", &sCmerSettings.sCmerModeParam,
1555 &uiDummy1,
1556 &uiDummy2,
1557 &sCmerSettings.sCmerIndParam,
1558 &sCmerSettings.sCmerBfrParam );
1559
1560 if ((sCmerSettings.sCmerModeParam < CMER_MODE_INVALID||
1561 sCmerSettings.sCmerModeParam > CMER_MODE_2) ||
1562 (sCmerSettings.sCmerIndParam < CMER_INDICATOR_INVALID||
1563 sCmerSettings.sCmerIndParam > CMER_INDICATOR_2) ||
1564 (sCmerSettings.sCmerBfrParam < CMER_BFR_INVALID||
1565 sCmerSettings.sCmerBfrParam > CMER_BFR_1) ||
1566 (uiDummy1 != 0u) || ((uiDummy2 != 0u)))
1567 {
1568 cmdCmeError(CME_ERR_OpNotAllow);
1569 return ATI_FAIL;
1570 }
1571
1572 cmhMM_GetCmerSettings( srcId, &sOldCmerSettings );
1573
1574 sEnteredCmerSettings.sCmerModeParam = sCmerSettings.sCmerModeParam;
1575
1576 #ifdef FF_ATI_BAT
1577 {
1578 T_BAT_cmd_send cmd;
1579 T_BAT_cmd_set_plus_cmer cmer;
1580
1581 /*
1582 * Without this we will lose track of the source ID by the time the
1583 * response arrives.
1584 */
1585 srcId_cb=srcId;
1586
1587 cmd.ctrl_params = BAT_CMD_SET_PLUS_CMER;
1588 cmd.params.ptr_set_plus_cmer=&cmer;
1589
1590 cmer.ind_option=BAT_CMER_IND_OPTION_NOT_PRESENT;
1591
1592 bat_send(ati_bat_get_client(srcId), &cmd);
1593 return(ATI_EXCT);
1594 }
1595 #else /* no FF_ATI_BAT */
1596
1597 tRet = sAT_PlusCMER( srcId, sCmerSettings.sCmerModeParam,
1598 sCmerSettings.sCmerIndParam,
1599 sCmerSettings.sCmerBfrParam );
1600 if (tRet EQ AT_FAIL)
1601 {
1602 cmdCmeError(CME_ERR_OpNotAllow);
1603 return ATI_FAIL;
1604 }
1605
1606 if ( sCmerSettings.sCmerModeParam == CMER_MODE_INVALID ) { sCmerSettings.sCmerModeParam = sOldCmerSettings.sCmerModeParam; }
1607 if ( sCmerSettings.sCmerIndParam == CMER_INDICATOR_INVALID ) { sCmerSettings.sCmerIndParam = sOldCmerSettings.sCmerIndParam; }
1608 if ( sCmerSettings.sCmerBfrParam == CMER_BFR_INVALID ) { sCmerSettings.sCmerBfrParam = sOldCmerSettings.sCmerBfrParam; }
1609 if ( sCmerSettings.sCmerIndParam == CMER_INDICATOR_INVALID ) { sCmerSettings.sCmerIndParam = 0; }
1610 if ( sCmerSettings.sCmerBfrParam == CMER_BFR_INVALID ) { sCmerSettings.sCmerBfrParam = 0; }
1611
1612 switch( sCmerSettings.sCmerModeParam )
1613 {
1614 case CMER_MODE_INVALID :
1615 case CMER_MODE_0 :
1616 { /* always buffer --> do nothing */
1617 break;
1618 }
1619 case CMER_MODE_1 :
1620 case CMER_MODE_2 :
1621 { /* flush and/or clear buffer */
1622 if ( (sEnteredCmerSettings.sCmerModeParam == CMER_MODE_1) ||
1623 (sEnteredCmerSettings.sCmerModeParam == CMER_MODE_2) )
1624 {
1625 if ( sCmerSettings.sCmerBfrParam == CMER_BFR_0 )
1626 {
1627 cmd_clearCievBuf( srcId );
1628 }
1629 else
1630 { /* BFR == '2' */
1631 cmd_flushCievBuf( srcId );
1632 }
1633
1634 }
1635 break;
1636 }
1637 default :
1638 { /* error case */
1639 cmdCmeError(CME_ERR_OpNotAllow);
1640 return ATI_FAIL;
1641 }
1642 }
1643 return ATI_CMPL;
1644
1645 #endif /* no FF_ATI_BAT */
1646 }
1647
1648 /*
1649 +--------------------------------------------------------------------+
1650 | PROJECT : GSM-F&D (8411) MODULE : ACI_CMD |
1651 | STATE : code ROUTINE : queatPlusCMER |
1652 +--------------------------------------------------------------------+
1653
1654 PURPOSE : +CMER query command
1655 (query the configured indication handling settings
1656 toward terminal )
1657 */
1658 GLOBAL T_ATI_RSLT queatPlusCMER ( char *cl, UBYTE srcId )
1659 {
1660 #ifndef FF_ATI_BAT
1661 T_ACI_RETURN sRet = AT_FAIL;
1662 T_ACI_MM_CMER_VAL_TYPE sCmerSettings;
1663 UINT uiDummy = 0u;
1664 #endif
1665
1666 TRACE_FUNCTION("queatPLusCMER()");
1667
1668 #ifdef FF_ATI_BAT
1669 {
1670 T_BAT_cmd_send cmd;
1671 T_BAT_no_parameter dummy;
1672
1673 cmd.ctrl_params = BAT_CMD_QUE_PLUS_CMER;
1674 dummy.bat_dummy = 0xFF;
1675 cmd.params.ptr_que_plus_cmer = &dummy;
1676 bat_send(ati_bat_get_client(srcId), &cmd);
1677 return(ATI_EXCT);
1678 }
1679 #else /* no FF_ATI_BAT */
1680
1681 sRet = qAT_PlusCMER( srcId, &sCmerSettings.sCmerModeParam,
1682 &sCmerSettings.sCmerIndParam,
1683 &sCmerSettings.sCmerBfrParam );
1684
1685 if (sRet NEQ AT_CMPL)
1686 {
1687 cmdCmeError(CME_ERR_OpNotAllow);
1688 return ATI_FAIL;
1689 }
1690
1691 if ( sCmerSettings.sCmerModeParam == CMER_MODE_INVALID ) { sCmerSettings.sCmerModeParam = CMER_MODE_0; };
1692 if ( sCmerSettings.sCmerIndParam == CMER_MODE_INVALID ) { sCmerSettings.sCmerIndParam = CMER_INDICATOR_0; };
1693 if ( sCmerSettings.sCmerBfrParam == CMER_MODE_INVALID ) { sCmerSettings.sCmerBfrParam = CMER_BFR_0; };
1694
1695 resp_disp( srcId, cl,"eeeee",&sCmerSettings.sCmerModeParam,
1696 &uiDummy,
1697 &uiDummy,
1698 &sCmerSettings.sCmerIndParam,
1699 &sCmerSettings.sCmerBfrParam );
1700 return ATI_CMPL;
1701
1702 #endif /* no FF_ATI_BAT */
1703 }
1704
1705 /*
1706 +--------------------------------------------------------------------+
1707 | PROJECT : GSM-F&D (8411) MODULE : ACI_CMD |
1708 | STATE : code ROUTINE : cmd_flushCievBuf |
1709 +--------------------------------------------------------------------+
1710
1711 PURPOSE : This function flushes the buffer for storing new signal-
1712 and/or SMS-full indications while the serial interface is
1713 released from data transmission.
1714 */
1715 GLOBAL void cmd_flushCievBuf ( UBYTE srcId )
1716 {
1717 UINT uiBufferCounter;
1718 UINT uiTempLastIndex;
1719 T_ACI_MM_CIND_VAL_TYPE sCindValues;
1720 T_ACI_MM_CMER_VAL_TYPE sCmerSettings;
1721
1722 TRACE_FUNCTION("cmd_flushCievBuf");
1723
1724 /* Signal buffer */
1725 uiTempLastIndex = asCievSignalBuf.uiLastIndex;
1726 cmhMM_GetCmerSettings(srcId, &sCmerSettings);
1727 for( uiBufferCounter=0; uiBufferCounter < uiTempLastIndex; uiBufferCounter++ )
1728 {
1729 sCindValues.sCindSignalParam = asCievSignalBuf.asBufferValues[uiBufferCounter];
1730 sCindValues.sCindSmsFullParam = CIND_SMSFULL_INDICATOR_INVALID;
1731 rCI_PlusCIEV( sCindValues, sCmerSettings );
1732 asCievSignalBuf.asBufferValues[uiBufferCounter] = CIND_SIGNAL_INDICATOR_INVALID;
1733 asCievSignalBuf.uiLastIndex--;
1734 }
1735
1736 /* SMS Full buffer */
1737 uiTempLastIndex = asCievSmsFullBuf.uiLastIndex;
1738 for( uiBufferCounter=0; uiBufferCounter < uiTempLastIndex; uiBufferCounter++ )
1739 {
1740 sCindValues.sCindSmsFullParam = asCievSmsFullBuf.asBufferValues[uiBufferCounter];
1741 sCindValues.sCindSignalParam = CIND_SIGNAL_INDICATOR_INVALID;
1742 rCI_PlusCIEV( sCindValues, sCmerSettings );
1743 asCievSmsFullBuf.asBufferValues[uiBufferCounter] = CIND_SMSFULL_INDICATOR_INVALID;
1744 asCievSmsFullBuf.uiLastIndex--;
1745 }
1746 }
1747
1748 /*
1749 +--------------------------------------------------------------------+
1750 | PROJECT : GSM-F&D (8411) MODULE : ACI_CMD |
1751 | STATE : code ROUTINE : cmd_clearCievBuf |
1752 +--------------------------------------------------------------------+
1753
1754 PURPOSE : This function clear the buffer for storing new signal-
1755 and/or SMS-full indications
1756 */
1757 GLOBAL void cmd_clearCievBuf ( UBYTE srcId )
1758 {
1759 UBYTE tSrc;
1760
1761 for( tSrc=0; tSrc < CIEV_BUF_SIZE; tSrc++ )
1762 {
1763 asCievSignalBuf.asBufferValues[tSrc] = CIND_SIGNAL_INDICATOR_INVALID;
1764 asCievSmsFullBuf.asBufferValues[tSrc] = CIND_SMSFULL_INDICATOR_INVALID;
1765 }
1766 asCievSignalBuf.uiLastIndex = 0u;
1767 asCievSmsFullBuf.uiLastIndex = 0u;
1768 }
1769
1770 /*
1771 +--------------------------------------------------------------------+
1772 | PROJECT : GSM-F&D (8411) MODULE : ACI_CMD |
1773 | STATE : code ROUTINE : cmd_PlusCOPN_CB |
1774 +--------------------------------------------------------------------+
1775
1776 PURPOSE : Call back function for cmd_PlusCOPN_CB
1777 */
1778
1779 GLOBAL void cmd_PlusCOPN_CB ( UBYTE src_id )
1780 {
1781 SHORT startIdx;
1782 UBYTE curCmd;
1783 T_ATI_SRC_PARAMS *src_params;
1784 T_COPN_VAR *COPN_Var;
1785 BOOL ret;
1786
1787
1788 COPN_Var = &mmShrdPrm.COPN_VAR[src_id];
1789
1790
1791 startIdx = COPN_Var->Start_Count;
1792
1793
1794 TRACE_FUNCTION("cmd_PlusCOPN_CB()");
1795
1796 ret = cmd_readCOPNBlock(startIdx,src_id);
1797
1798 if (ret EQ TRUE)
1799 {
1800 src_params = find_element (ati_src_list, src_id, search_ati_src_id);
1801 curCmd = src_params->curAtCmd;
1802 R_AT( RAT_OK, src_id )
1803 ( curCmd );
1804 }
1805 }
1806
1807 GLOBAL BOOL cmd_readCOPNBlock( SHORT startIdx, UBYTE src_id )
1808 {
1809 SHORT lastIdx;
1810 UBYTE idx;
1811 T_ACI_COPN_LST operLst;
1812 T_COPN_VAR *COPN_Var;
1813
1814 COPN_Var = &mmShrdPrm.COPN_VAR[src_id];
1815
1816 TRACE_FUNCTION("cmd_readCOPNBlock()");
1817
1818 if( qAT_PlusCOPN(src_id, COPN_LID_Cnst, startIdx,
1819 &lastIdx, operLst) EQ AT_FAIL )
1820 return TRUE;
1821
1822 for( idx=0; idx < MAX_OPER; idx++ )
1823 {
1824 if( operLst[idx].numOper[0] EQ 0x0 )
1825 return TRUE;
1826
1827 sprintf(g_sa,"+COPN: \"%s\",\"%s\"",operLst[idx].numOper,
1828 operLst[idx].alphaOper );
1829 io_sendMessage(src_id, g_sa, ATI_NORMAL_OUTPUT);
1830 }
1831 startIdx = lastIdx+1;
1832 COPN_Var->Start_Count = startIdx;
1833 return FALSE;
1834 }
1835
1836
1837 #endif /* ATI_MM_C */