FreeCalypso > hg > freecalypso-citrine
comparison g23m-aci/aci/ati_cc.c @ 0:75a11d740a02
initial import of gsm-fw from freecalypso-sw rev 1033:5ab737ac3ad7
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Thu, 09 Jun 2016 00:02:41 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:75a11d740a02 |
---|---|
1 /* | |
2 +----------------------------------------------------------------------------- | |
3 | Project : GSM-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: Call Control related commands. | |
18 +----------------------------------------------------------------------------- | |
19 */ | |
20 #ifndef ATI_CC_C | |
21 #define ATI_CC_C | |
22 | |
23 #include "config.h" | |
24 #include "fixedconf.h" | |
25 #include "condat-features.h" | |
26 #include "aci_conf.h" | |
27 | |
28 #undef DUMMY_ATI_STRINGS | |
29 | |
30 #include "aci_all.h" | |
31 | |
32 #include "aci_cmh.h" | |
33 #include "ati_cmd.h" | |
34 #include "aci_io.h" | |
35 #include "aci_cmd.h" | |
36 #include "l4_tim.h" | |
37 #include "aci_lst.h" | |
38 | |
39 #include "aci_cmh.h" | |
40 #include "ati_cmd.h" | |
41 #include "aci_io.h" | |
42 #include "aci_cmd.h" | |
43 | |
44 #include "aci.h" | |
45 #include "l4_tim.h" | |
46 #include "aci_mem.h" | |
47 #include "aci_prs.h" | |
48 | |
49 #include "aci_lst.h" | |
50 #include "ati_int.h" | |
51 | |
52 #ifdef FF_ATI_BAT | |
53 | |
54 #include "typedefs.h" | |
55 #include "gdd.h" | |
56 #include "bat.h" | |
57 | |
58 #include "ati_bat.h" | |
59 | |
60 #endif /* FF_ATI_BAT */ | |
61 | |
62 /* | |
63 +--------------------------------------------------------------------+ | |
64 | PROJECT : GSM-F&D (8411) MODULE : ACI_CMD | | |
65 | STATE : code ROUTINE : cleanDialStr | | |
66 +--------------------------------------------------------------------+ | |
67 | |
68 PURPOSE : This function removes all invalid or unsupported characters | |
69 from the null terminated dial string. | |
70 | |
71 */ | |
72 | |
73 LOCAL void cleanDialStr( CHAR * dialStr ) | |
74 { | |
75 USHORT i,j,k = 0; | |
76 USHORT dialLen, charLen; | |
77 CHAR *valChrs = "0123456789*#+-ABCDPpWw"; | |
78 UBYTE match = FALSE; | |
79 | |
80 dialLen = strlen(dialStr ); | |
81 charLen = strlen(valChrs ); | |
82 | |
83 for (i=0;i<dialLen;i++) | |
84 { | |
85 match=FALSE; | |
86 | |
87 for (j=0;j<charLen;j++) | |
88 { | |
89 if (dialStr[i] EQ valChrs[j]) | |
90 { | |
91 match = TRUE; | |
92 break; | |
93 } | |
94 } | |
95 | |
96 if (match) | |
97 { | |
98 dialStr[k] = dialStr[i]; | |
99 k++; | |
100 } | |
101 } | |
102 | |
103 dialStr[k] = 0x0; | |
104 } | |
105 | |
106 /* | |
107 +--------------------------------------------------------------------+ | |
108 | PROJECT : GSM-F&D (8411) MODULE : ACI_CMD | | |
109 | STATE : code ROUTINE : | | |
110 +--------------------------------------------------------------------+ | |
111 | |
112 PURPOSE : D (dial command) | |
113 */ | |
114 | |
115 #define NAME_BUF_LEN 32 | |
116 #define DIAL_BUF_LEN (MAX_DIAL_LEN-1) | |
117 | |
118 GLOBAL T_ATI_RSLT atD (char *cl, UBYTE srcId) | |
119 { | |
120 T_ACI_RETURN ret = AT_FAIL; | |
121 char alpha [NAME_BUF_LEN] = {'\0'}; | |
122 USHORT lenAlpha = 0; | |
123 char cvtdAlpha[NAME_BUF_LEN] = {'\0'}; | |
124 USHORT lenCvtdAlpha = 0; | |
125 char t [DIAL_BUF_LEN] = {'\0'}; | |
126 char* t_p = NULL; | |
127 USHORT pos = 0; | |
128 SHORT index = -1; | |
129 | |
130 T_ACI_PB_STOR mem_stor = PB_STOR_NotPresent; | |
131 T_ACI_D_CLIR_OVRD clir_ovrd = D_CLIR_OVRD_Default; | |
132 T_ACI_D_CUG_CTRL cug_ctrl = D_CUG_CTRL_NotPresent; | |
133 T_ACI_D_TOC call_type = D_TOC_Data; | |
134 T_ATI_SRC_PARAMS *src_params = find_element (ati_src_list, srcId, search_ati_src_id); | |
135 | |
136 src_params->curAtCmd = AT_CMD_D; | |
137 | |
138 #ifdef FF_ATI_BAT | |
139 { | |
140 T_BAT_cmd_send cmd; | |
141 T_BAT_cmd_at_d bat_dial; | |
142 | |
143 cmd.ctrl_params = BAT_CMD_AT_D; | |
144 cmd.params.ptr_at_d = &bat_dial; | |
145 | |
146 #warning "atD(): check for UCS2 dial string before bat_send()" | |
147 | |
148 bat_dial.c_dial_string = strlen(cl); | |
149 if (bat_dial.c_dial_string) | |
150 { | |
151 memcpy (bat_dial.dial_string, (U8 *)cl, bat_dial.c_dial_string); | |
152 | |
153 TRACE_FUNCTION("atD() calls bat_send() <=== as APPLICATION"); | |
154 | |
155 bat_send(ati_bat_get_client(srcId), &cmd); | |
156 cmdErrStr = NULL; | |
157 srcId_cb = srcId; | |
158 rCI_PlusCCWV (CCWV_CHRG_NotPresent); | |
159 return (ATI_EXCT); /* executing, because response is passed by callback function */ | |
160 } | |
161 else | |
162 { | |
163 cmdCmeError(CME_ERR_OpNotAllow); | |
164 return (ATI_FAIL); | |
165 } | |
166 } | |
167 #else /* no FF_ATI_BAT */ | |
168 { | |
169 BOOL Book_Dial; | |
170 U16 i; | |
171 #ifdef NO_ASCIIZ | |
172 T_ACI_PB_TEXT pbText; | |
173 #endif | |
174 | |
175 TRACE_FUNCTION("atD()"); | |
176 | |
177 t_p=t; | |
178 if (*cl EQ '>') /*call from Phonebook*/ | |
179 { | |
180 Book_Dial=TRUE; | |
181 cl++; | |
182 if(*cl EQ '"') /*origin call to name given by string */ | |
183 { | |
184 cl=parse(cl,"z", | |
185 (LONG)NAME_BUF_LEN, | |
186 strlen(cl), | |
187 cl, | |
188 &lenAlpha, | |
189 alpha); | |
190 if (cl EQ NULL) | |
191 { | |
192 cmdCmeError(CME_ERR_OpNotAllow); | |
193 return (ATI_FAIL); | |
194 } | |
195 else if (strcspn(cl,"iIgG;") NEQ 0) | |
196 { | |
197 cmdCmeError(CME_ERR_OpNotAllow); | |
198 return (ATI_FAIL); | |
199 } | |
200 srcId_cb = srcId; | |
201 #ifdef NO_ASCIIZ | |
202 utl_chsetToSim ( (UBYTE*)alpha, | |
203 lenAlpha, | |
204 (UBYTE*)cvtdAlpha, | |
205 &lenCvtdAlpha, | |
206 GSM_ALPHA_Def ); | |
207 #else /* #ifdef NO_ASCIIZ */ | |
208 utl_chsetToGsm ( (UBYTE*)alpha, | |
209 lenAlpha, | |
210 (UBYTE*)cvtdAlpha, | |
211 &lenCvtdAlpha, | |
212 #ifdef REL99 | |
213 sizeof(cvtdAlpha), | |
214 #endif | |
215 GSM_ALPHA_Int); | |
216 #endif /* #ifdef NO_ASCIIZ */ | |
217 t_p = cvtdAlpha; | |
218 } | |
219 else | |
220 { | |
221 /* call using phonebook with pb specified*/ | |
222 if ((toupper(*cl)) >= 65 AND (toupper(*cl)) <= 90) | |
223 { | |
224 for (i=0;phb_mem_names[i].name != 0;i++) | |
225 { | |
226 strupper(cl); | |
227 if (strncmp(cl,phb_mem_names[i].name,2) EQ 0) | |
228 { | |
229 mem_stor=phb_mem_names[i].stor; | |
230 break; | |
231 } | |
232 else mem_stor=PB_STOR_NotPresent; | |
233 } | |
234 if (mem_stor < 0) | |
235 { | |
236 cmdCmeError(CME_ERR_OpNotAllow); | |
237 return (ATI_FAIL); | |
238 } | |
239 cl=cl+2; | |
240 } | |
241 pos=strcspn(cl,"iIgG;"); /* determine index */ | |
242 if (pos EQ 0 OR pos >= DIAL_BUF_LEN) | |
243 { | |
244 TRACE_EVENT("incorrect strspn"); | |
245 cmdCmeError(CME_ERR_OpNotAllow); | |
246 return (ATI_FAIL); | |
247 } | |
248 strncpy(t,cl,pos); | |
249 cl=cl+pos; | |
250 index =(SHORT)atoi(t); | |
251 | |
252 if(!index OR index > 300) | |
253 { | |
254 cmdCmeError(CME_ERR_OpNotAllow); | |
255 return (ATI_FAIL); | |
256 } | |
257 t_p = NULL; | |
258 } | |
259 } | |
260 else | |
261 { | |
262 Book_Dial=FALSE; | |
263 pos=strcspn(cl,"iIgG;"); | |
264 if(pos >= DIAL_BUF_LEN) | |
265 { | |
266 cmdCmeError(CME_ERR_OpNotAllow); | |
267 return (ATI_FAIL); | |
268 } | |
269 if (pos) | |
270 { | |
271 strncpy(t,cl,pos); | |
272 cl=cl+pos; | |
273 t[pos]='\0'; | |
274 } | |
275 else | |
276 { | |
277 if(strlen(cl) >= DIAL_BUF_LEN) | |
278 { | |
279 cmdCmeError(CME_ERR_OpNotAllow); | |
280 return (ATI_FAIL); | |
281 } | |
282 strcpy(t,cl); | |
283 } | |
284 | |
285 cleanDialStr(t); | |
286 if (t[0] EQ '\0') | |
287 t_p=NULL; | |
288 } | |
289 | |
290 if (*cl EQ 'i') | |
291 { | |
292 clir_ovrd=D_CLIR_OVRD_Supp; | |
293 cl++; | |
294 } | |
295 if (*cl EQ 'I') | |
296 { | |
297 clir_ovrd=D_CLIR_OVRD_Invoc; | |
298 cl++; | |
299 } | |
300 if (*cl EQ 'g'OR *cl EQ 'G') | |
301 { | |
302 cug_ctrl=D_CUG_CTRL_Present; | |
303 cl++; | |
304 } | |
305 if (*cl EQ ';') | |
306 { | |
307 call_type=D_TOC_Voice; | |
308 cl++; | |
309 } | |
310 if (*cl NEQ '\0') | |
311 { | |
312 cmdCmeError(CME_ERR_InvDialChar); | |
313 return (ATI_FAIL); | |
314 } | |
315 | |
316 if(Book_Dial) | |
317 { | |
318 #ifdef NO_ASCIIZ | |
319 if ( t_p NEQ NULL ) | |
320 { | |
321 pbText.cs = CS_Sim; | |
322 pbText.len = (UBYTE)lenCvtdAlpha; | |
323 memcpy( pbText.data, t_p, pbText.len ); | |
324 } | |
325 else | |
326 { | |
327 pbText.cs = CS_NotPresent; | |
328 pbText.len = 0; | |
329 } | |
330 ret = sAT_Dm( (T_ACI_CMD_SRC)srcId, &pbText, mem_stor, index, clir_ovrd, | |
331 cug_ctrl, call_type ); | |
332 #else /* #ifdef NO_ASCIIZ */ | |
333 ret = sAT_Dm( srcId, t_p, mem_stor, index, clir_ovrd, | |
334 cug_ctrl, call_type ); | |
335 #endif /* #ifdef NO_ASCIIZ */ | |
336 } | |
337 else | |
338 { | |
339 ret=sAT_Dn((T_ACI_CMD_SRC)srcId,t_p,clir_ovrd,cug_ctrl,call_type); | |
340 } | |
341 | |
342 if (ret EQ AT_EXCT) | |
343 { | |
344 if (call_type EQ D_TOC_Voice AND | |
345 at.flags.COLP_stat NEQ 1 ) | |
346 { | |
347 cmdErrStr = NULL; | |
348 } | |
349 else | |
350 { | |
351 src_params->curAtCmd = AT_CMD_D; | |
352 } | |
353 srcId_cb = srcId; | |
354 rCI_PlusCCWV ( CCWV_CHRG_NotPresent ); | |
355 | |
356 return (ATI_EXCT); | |
357 } | |
358 else if( ret EQ AT_CMPL ) | |
359 { | |
360 srcId_cb = srcId; | |
361 rCI_OK (AT_CMD_D); | |
362 return (ATI_CMPL_NO_OUTPUT); | |
363 } | |
364 else | |
365 { | |
366 cmdCmeError(CME_ERR_Unknown); | |
367 return (ATI_FAIL); | |
368 } | |
369 } | |
370 #endif /* no FF_ATI_BAT */ | |
371 } | |
372 | |
373 | |
374 /* | |
375 +--------------------------------------------------------------------+ | |
376 | PROJECT : GSM-F&D (8411) MODULE : ACI_CMD | | |
377 | STATE : code ROUTINE : atA | | |
378 +--------------------------------------------------------------------+ | |
379 | |
380 PURPOSE : A command (Answer a call) | |
381 */ | |
382 | |
383 GLOBAL T_ATI_RSLT atA(char *cl, UBYTE srcId) | |
384 { | |
385 T_ACI_RETURN ret = AT_FAIL; | |
386 T_ATI_SRC_PARAMS *src_params = find_element (ati_src_list, srcId, search_ati_src_id); | |
387 | |
388 #ifdef FF_ATI_BAT | |
389 T_BAT_cmd_send cmd; | |
390 T_BAT_no_parameter dummy; | |
391 | |
392 TRACE_FUNCTION("atA() calls bat_send() <=== as APPLICATION"); | |
393 | |
394 cmd.ctrl_params = BAT_CMD_AT_A; | |
395 dummy.bat_dummy = 0xFF; | |
396 cmd.params.ptr_at_a = &dummy; | |
397 | |
398 if( at.rngPrms.isRng EQ TRUE ) | |
399 { | |
400 ati_stop_ring(); | |
401 } | |
402 src_params->curAtCmd = AT_CMD_A; | |
403 | |
404 bat_send(ati_bat_get_client(srcId), &cmd); | |
405 | |
406 return (ATI_EXCT); /* executing, because response is passed by callback function */ | |
407 | |
408 #else /* no FF_ATI_BAT */ | |
409 | |
410 TRACE_FUNCTION("atA()"); | |
411 | |
412 if(*cl NEQ '\0') | |
413 { | |
414 cmdAtError(atError); | |
415 } | |
416 else | |
417 { | |
418 ret=sAT_A((T_ACI_CMD_SRC)srcId); | |
419 if (ret EQ AT_EXCT) | |
420 { | |
421 if( at.rngPrms.isRng EQ TRUE ) | |
422 { | |
423 ati_stop_ring(); | |
424 } | |
425 src_params->curAtCmd = AT_CMD_A; | |
426 } | |
427 else | |
428 { | |
429 cmdAtError(atError); | |
430 } | |
431 } | |
432 return (map_aci_2_ati_rslt(ret)); | |
433 | |
434 #endif /* no FF_ATI_BAT */ | |
435 } | |
436 | |
437 /* | |
438 +--------------------------------------------------------------------+ | |
439 | PROJECT : GSM-F&D (8411) MODULE : ACI_CMD | | |
440 | STATE : code ROUTINE : atH | | |
441 +--------------------------------------------------------------------+ | |
442 | |
443 PURPOSE : H command (Hangs up single mode call) | |
444 */ | |
445 GLOBAL T_ATI_RSLT atH(char *cl, UBYTE srcId) | |
446 { | |
447 T_ACI_RETURN ret = AT_FAIL; | |
448 T_ATI_SRC_PARAMS *src_params = find_element (ati_src_list, srcId, search_ati_src_id); | |
449 | |
450 #ifdef FF_ATI_BAT | |
451 T_BAT_cmd_send cmd; | |
452 T_BAT_no_parameter dummy; | |
453 cmd.ctrl_params = BAT_CMD_AT_H; | |
454 dummy.bat_dummy = 0xFF; | |
455 cmd.params.ptr_at_h = &dummy; | |
456 | |
457 TRACE_FUNCTION("atH() calls bat_send() <=== as APPLICATION"); | |
458 | |
459 if( at.rngPrms.isRng EQ TRUE ) | |
460 { | |
461 ati_stop_ring(); | |
462 } | |
463 src_params->curAtCmd = AT_CMD_H; | |
464 | |
465 bat_send(ati_bat_get_client(srcId), &cmd); | |
466 | |
467 return (ATI_EXCT); /* executing, because response is passed by callback function */ | |
468 #else /* no FF_ATI_BAT */ | |
469 | |
470 TRACE_FUNCTION("atH()"); | |
471 | |
472 if (*cl EQ '0' OR *cl EQ '\0') | |
473 { | |
474 if (*cl EQ '0') | |
475 { | |
476 cl++; | |
477 } | |
478 | |
479 ret=sAT_H((T_ACI_CMD_SRC)srcId); | |
480 if (ret EQ AT_EXCT) | |
481 { | |
482 if( at.rngPrms.isRng EQ TRUE ) | |
483 { | |
484 ati_stop_ring(); | |
485 } | |
486 src_params->curAtCmd = AT_CMD_H; | |
487 } | |
488 else | |
489 { | |
490 cmdAtError(atError); | |
491 } | |
492 } | |
493 else | |
494 { | |
495 cmdAtError(atError); | |
496 } | |
497 return (map_aci_2_ati_rslt(ret)); | |
498 | |
499 #endif /* no FF_ATI_BAT */ | |
500 } | |
501 | |
502 #ifdef FAX_AND_DATA | |
503 /* | |
504 +--------------------------------------------------------------------+ | |
505 | PROJECT : GSM-F&D (8411) MODULE : ACI_CMD | | |
506 | STATE : code ROUTINE : atPlusCBST | | |
507 +--------------------------------------------------------------------+ | |
508 | |
509 PURPOSE : +CBST command (Select Bearer Service Type) | |
510 */ | |
511 | |
512 GLOBAL T_ATI_RSLT setatPlusCBST(char *cl, UBYTE srcId) | |
513 { | |
514 T_ACI_BS_SPEED speed = BS_SPEED_NotPresent; | |
515 T_ACI_CBST_NAM name = CBST_NAM_NotPresent; | |
516 T_ACI_CBST_CE ce = CBST_CE_NotPresent; | |
517 T_ACI_RETURN ret = AT_FAIL; | |
518 | |
519 cl = parse(cl, "ddd", &speed, &name, &ce); | |
520 if(!cl ) | |
521 { | |
522 cmdCmeError(CME_ERR_OpNotAllow); | |
523 return (ATI_FAIL); | |
524 } | |
525 | |
526 #ifdef FF_ATI_BAT | |
527 { | |
528 T_BAT_cmd_send cmd; | |
529 T_BAT_cmd_set_plus_cbst my_bat_set_plus_cbst; | |
530 | |
531 TRACE_FUNCTION("setatPlusCBST() calls bat_send() <=== as APPLICATION"); | |
532 | |
533 memset(&my_bat_set_plus_cbst, 0, sizeof(my_bat_set_plus_cbst)); | |
534 cmd.ctrl_params = BAT_CMD_SET_PLUS_CBST; | |
535 cmd.params.ptr_set_plus_cbst = &my_bat_set_plus_cbst; | |
536 | |
537 my_bat_set_plus_cbst.speed = speed; | |
538 my_bat_set_plus_cbst.name = name; | |
539 my_bat_set_plus_cbst.ce = ce; | |
540 bat_send(ati_bat_get_client(srcId), &cmd); | |
541 | |
542 return ATI_EXCT; /* executing, because response is passed by callback function */ | |
543 } | |
544 #else /* OLD FUNCTION BODY */ | |
545 | |
546 TRACE_FUNCTION("atPLusCBST()"); | |
547 { | |
548 ret = sAT_PlusCBST((T_ACI_CMD_SRC)srcId,speed,name,ce); | |
549 } | |
550 if (ret EQ AT_FAIL) | |
551 { | |
552 cmdCmeError(CME_ERR_OpNotAllow); | |
553 return (ATI_FAIL); | |
554 } | |
555 return (ATI_CMPL); | |
556 | |
557 #endif /* no FF_ATI_BAT*/ | |
558 } | |
559 | |
560 GLOBAL T_ATI_RSLT queatPlusCBST(char *cl, UBYTE srcId) | |
561 { | |
562 T_ACI_BS_SPEED speed = BS_SPEED_NotPresent; | |
563 T_ACI_CBST_NAM name = CBST_NAM_NotPresent; | |
564 T_ACI_CBST_CE ce = CBST_CE_NotPresent; | |
565 T_ACI_RETURN ret = AT_FAIL; | |
566 | |
567 TRACE_FUNCTION("atPLusCBST()"); | |
568 | |
569 ret = qAT_PlusCBST((T_ACI_CMD_SRC)srcId,&speed,&name,&ce); | |
570 if (ret EQ AT_CMPL) | |
571 { | |
572 resp_disp(srcId, cl,"eee",&speed,&name,&ce); | |
573 } | |
574 else | |
575 { | |
576 cmdCmeError(CME_ERR_OpNotAllow); /* AT_FAIL, AT_EXCT, AT_BUSY ??? */ | |
577 return (ATI_FAIL); | |
578 } | |
579 return (ATI_CMPL); | |
580 | |
581 } | |
582 #endif /* FAX_AND_DATA */ | |
583 | |
584 /* | |
585 PURPOSE : Change some AT interface output configuration | |
586 (+CRC +CR +CLIP +COLP) | |
587 */ | |
588 GLOBAL T_ATI_RSLT GenAtCR_C( CHAR *cl, UBYTE srcId, T_ACI_AT_CMD cmd ) | |
589 { | |
590 UBYTE x = 0; | |
591 | |
592 switch(*cl) | |
593 { | |
594 case('0'): | |
595 case('1'): | |
596 /* value ok */ | |
597 break; | |
598 default: | |
599 cmdCmeError(CME_ERR_OpNotAllow); | |
600 return (ATI_FAIL); | |
601 } | |
602 | |
603 x = *cl - '0'; | |
604 cl++; | |
605 | |
606 switch(cmd) | |
607 { | |
608 case( AT_CMD_CRC ): | |
609 ati_user_output_cfg[srcId].CRC_stat = x; | |
610 return (ATI_CMPL); | |
611 case( AT_CMD_CR ): | |
612 ati_user_output_cfg[srcId].CR_stat = x; | |
613 return (ATI_CMPL); | |
614 case( AT_CMD_CLIP ): | |
615 ati_user_output_cfg[srcId].CLIP_stat = x; | |
616 return (ATI_CMPL); | |
617 case( AT_CMD_CDIP ): | |
618 ati_user_output_cfg[srcId].CDIP_stat = x; | |
619 return (ATI_CMPL); | |
620 case( AT_CMD_COLP ): | |
621 at.flags.COLP_stat = x; | |
622 return (ATI_CMPL); | |
623 } | |
624 | |
625 cmdCmeError(CME_ERR_OpNotAllow); | |
626 return (ATI_FAIL); | |
627 } | |
628 | |
629 #ifdef FF_TTY | |
630 /* | |
631 +--------------------------------------------------------------------+ | |
632 | PROJECT : GSM-F&D (8411) MODULE : ACI_CMD | | |
633 | STATE : code ROUTINE : atPercentCTTY | | |
634 +--------------------------------------------------------------------+ | |
635 | |
636 PURPOSE : %CTTY command (handle CTM/TTY service) | |
637 */ | |
638 | |
639 GLOBAL T_ATI_RSLT setatPercentCTTY (char *cl, UBYTE srcId) | |
640 { | |
641 T_ACI_CTTY_MOD mode = CTTY_MOD_NotPresent; | |
642 T_ACI_CTTY_REQ req = CTTY_REQ_NotPresent; | |
643 | |
644 cl = parse (cl, "dd", &mode, &req); | |
645 | |
646 if (!cl) | |
647 { | |
648 cmdCmeError(CME_ERR_OpNotAllow); | |
649 return (ATI_FAIL); | |
650 } | |
651 | |
652 #ifdef FF_ATI_BAT | |
653 { | |
654 T_BAT_cmd_send cmd; | |
655 T_BAT_cmd_set_percent_ctty my_bat_set_percent_ctty; | |
656 | |
657 TRACE_FUNCTION("setatPercentCTTY() calls bat_send() <=== as APPLICATION"); | |
658 | |
659 memset(&my_bat_set_percent_ctty, 0, sizeof(my_bat_set_percent_ctty)); | |
660 cmd.ctrl_params = BAT_CMD_SET_PERCENT_CTTY; | |
661 cmd.params.ptr_set_percent_ctty = &my_bat_set_percent_ctty; | |
662 | |
663 my_bat_set_percent_ctty.req = req; | |
664 | |
665 bat_send(ati_bat_get_client(srcId), &cmd); | |
666 | |
667 return ATI_EXCT; /* executing, because response is passed by callback function */ | |
668 } | |
669 #else /* OLD FUNCTION BODY */ | |
670 { | |
671 T_ACI_RETURN ret; | |
672 | |
673 TRACE_FUNCTION("setatPercentCTTY()"); | |
674 | |
675 ret = sAT_PercentCTTY ((T_ACI_CMD_SRC)srcId, mode, req); | |
676 switch (ret) | |
677 { | |
678 case (AT_CMPL): /* operation completed */ | |
679 break; | |
680 case (AT_EXCT): /* not valid */ | |
681 ret = AT_CMPL; | |
682 break; | |
683 default: | |
684 cmdCmeError(CME_ERR_NotPresent); /* Command failed */ | |
685 break; | |
686 } | |
687 return (map_aci_2_ati_rslt(ret)); | |
688 } | |
689 #endif /* no FF_ATI_BAT*/ | |
690 } | |
691 | |
692 GLOBAL T_ATI_RSLT queatPercentCTTY (char *cl, UBYTE srcId) | |
693 { | |
694 T_ACI_RETURN ret; | |
695 T_ACI_CTTY_MOD mode; | |
696 T_ACI_CTTY_REQ req; | |
697 T_ACI_CTTY_STAT state; | |
698 T_ACI_CTTY_TRX trx; | |
699 | |
700 TRACE_FUNCTION("queatPercentCTTY()"); | |
701 | |
702 ret = qAT_PercentCTTY ((T_ACI_CMD_SRC)srcId, &mode, &req, &state, &trx); | |
703 | |
704 if (ret EQ AT_CMPL) | |
705 { | |
706 if (trx EQ CTTY_TRX_Unknown) | |
707 resp_disp (srcId, cl,"eee",&mode, &req, &state); | |
708 else | |
709 resp_disp (srcId, cl,"eeee",&mode, &req, &state, &trx); | |
710 return ATI_CMPL; | |
711 } | |
712 else | |
713 cmdCmeError (CME_ERR_Unknown); | |
714 | |
715 return ATI_FAIL; | |
716 } | |
717 #endif /* FF_TTY */ | |
718 | |
719 /* | |
720 +--------------------------------------------------------------------+ | |
721 | PROJECT : GSM-F&D (8411) MODULE : ACI_CMD | | |
722 | STATE : code ROUTINE : atPlusCRC | | |
723 +--------------------------------------------------------------------+ | |
724 | |
725 PURPOSE : +CRC command (Select extended incoming call report) | |
726 */ | |
727 | |
728 GLOBAL T_ATI_RSLT setatPlusCRC (char *cl, UBYTE srcId) | |
729 { | |
730 TRACE_FUNCTION("setatPlusCRC()"); | |
731 | |
732 return(GenAtCR_C( cl, srcId, AT_CMD_CRC )); | |
733 } | |
734 | |
735 GLOBAL T_ATI_RSLT queatPlusCRC (char *cl, UBYTE srcId) | |
736 { | |
737 TRACE_FUNCTION("queatPlusCRC()"); | |
738 | |
739 resp_disp(srcId, cl,"b",&ati_user_output_cfg[srcId].CRC_stat); | |
740 return (ATI_CMPL); | |
741 } | |
742 | |
743 /*> | |
744 +--------------------------------------------------------------------+ | |
745 | PROJECT : GSM-F&D (8411) MODULE : ACI_CMD | | |
746 | STATE : code ROUTINE : atPlusCSTA | | |
747 +--------------------------------------------------------------------+ | |
748 | |
749 PURPOSE : +CSTA command (Select type of address) | |
750 */ | |
751 | |
752 GLOBAL T_ATI_RSLT setatPlusCSTA(char *cl, UBYTE srcId) | |
753 { | |
754 SHORT toa_val=0; | |
755 T_ACI_TOA type; | |
756 #ifdef FF_ATI_BAT | |
757 T_ACI_TOA *p_type=NULL; | |
758 #endif /* FF_ATI_BAT */ | |
759 T_ACI_RETURN ret = AT_FAIL; | |
760 | |
761 cl = parse(cl, "r", &toa_val); | |
762 if (!cl) | |
763 { | |
764 cmdCmeError(CME_ERR_OpNotAllow); | |
765 return (ATI_FAIL); | |
766 } | |
767 #ifdef FF_ATI_BAT | |
768 p_type = &type; | |
769 if (toa_val EQ 0) | |
770 p_type = NULL; | |
771 else | |
772 #endif /* FF_ATI_BAT */ | |
773 { | |
774 type=toa_demerge(toa_val); | |
775 if (type.ton < 0 OR type.npi < 0) | |
776 { | |
777 cmdCmeError(CME_ERR_OpNotAllow); | |
778 return (ATI_FAIL); | |
779 } | |
780 } | |
781 | |
782 #ifdef FF_ATI_BAT | |
783 { | |
784 T_BAT_cmd_send cmd; | |
785 T_BAT_cmd_set_plus_csta my_bat_set_plus_csta; | |
786 | |
787 TRACE_FUNCTION("setatPlusCSTA() calls bat_send() <=== as APPLICATION"); | |
788 | |
789 memset(&my_bat_set_plus_csta, 0, sizeof(my_bat_set_plus_csta)); | |
790 cmd.ctrl_params = BAT_CMD_SET_PLUS_CSTA; | |
791 cmd.params.ptr_set_plus_csta = &my_bat_set_plus_csta; | |
792 | |
793 my_bat_set_plus_csta.type = (S16)p_type; | |
794 | |
795 bat_send(ati_bat_get_client(srcId), &cmd); | |
796 | |
797 return ATI_EXCT; /* executing, because response is passed by callback function */ | |
798 } | |
799 #else /* OLD FUNCTION BODY */ | |
800 | |
801 TRACE_FUNCTION("setatPLusCSTA()"); | |
802 | |
803 ret = sAT_PlusCSTA((T_ACI_CMD_SRC)srcId, &type); | |
804 | |
805 return (map_aci_2_ati_rslt (ret)); | |
806 | |
807 #endif /* no FF_ATI_BAT*/ | |
808 } | |
809 | |
810 GLOBAL T_ATI_RSLT queatPlusCSTA(char *cl, UBYTE srcId) | |
811 { | |
812 T_ACI_RETURN ret = AT_FAIL; | |
813 T_ACI_TOA type; | |
814 SHORT toa_val = 0; | |
815 | |
816 TRACE_FUNCTION("queatPLusCSTA()"); | |
817 | |
818 ret = qAT_PlusCSTA((T_ACI_CMD_SRC)srcId,&type); | |
819 toa_val = toa_merge (type); | |
820 if (ret EQ AT_CMPL) | |
821 { | |
822 resp_disp(srcId, cl,"s",&toa_val); | |
823 } | |
824 else | |
825 { | |
826 cmdCmeError(CME_ERR_Unknown); | |
827 } | |
828 return (map_aci_2_ati_rslt (ret)); | |
829 } | |
830 | |
831 /* | |
832 +--------------------------------------------------------------------+ | |
833 | PROJECT : GSM-F&D (8411) MODULE : ACI_CMD | | |
834 | STATE : code ROUTINE : atPlusCHLD | | |
835 +--------------------------------------------------------------------+ | |
836 | |
837 PURPOSE : common function for +/%CHLD command | |
838 */ | |
839 LOCAL T_ATI_RSLT setatPlus_PercentCHLD(char *cl, UBYTE srcId, T_ACI_CHLD_CMD cmdType) | |
840 { | |
841 T_ACI_RETURN ret = AT_FAIL; | |
842 T_ACI_CHLD_MOD mode = CHLD_MOD_NotPresent; | |
843 T_ATI_SRC_PARAMS *src_params = find_element (ati_src_list, srcId, search_ati_src_id); | |
844 CHAR CHLD_type = '\0'; | |
845 CHAR X_prm[2]; | |
846 | |
847 X_prm[0] = (CHAR)NOT_PRESENT_8BIT; | |
848 | |
849 /* check first parameter of CHLD */ | |
850 CHLD_type = *cl; | |
851 ++cl; | |
852 | |
853 /* check for special PERCENT command */ | |
854 if((CHLD_type EQ '6') AND (cmdType NEQ CHLD_PercentCmd)) | |
855 { | |
856 cmdCmeError(CME_ERR_OpNotAllow); | |
857 return (ATI_FAIL); | |
858 } | |
859 | |
860 /* check for rest of parameter if necessary (only for AT+CHLD=1 / 2 / or 4) */ | |
861 if( CHLD_type EQ '1' | |
862 OR CHLD_type EQ '2' | |
863 OR CHLD_type EQ '4' | |
864 OR CHLD_type EQ '6' | |
865 OR CHLD_type EQ '7' ) | |
866 { | |
867 /* possibility of an X or directory parameter */ | |
868 if (*cl EQ 0 OR *cl EQ ';') /* end of command */ | |
869 { | |
870 X_prm[0] = (CHAR)NOT_PRESENT_8BIT; | |
871 } | |
872 else | |
873 { | |
874 if( *cl < '0' OR *cl > '9') | |
875 { | |
876 cmdCmeError(CME_ERR_OpNotAllow); | |
877 return (ATI_FAIL); | |
878 } | |
879 else | |
880 { | |
881 X_prm[0] = *cl; | |
882 X_prm[1] = '\0'; | |
883 cl++; | |
884 } | |
885 } | |
886 } | |
887 | |
888 switch(CHLD_type) | |
889 { | |
890 case ('0'): | |
891 mode = CHLD_MOD_RelHldOrUdub; | |
892 break; | |
893 | |
894 case ('1'): | |
895 if ( X_prm[0] EQ (CHAR)NOT_PRESENT_8BIT ) | |
896 { | |
897 mode = CHLD_MOD_RelActAndAcpt; | |
898 } | |
899 else | |
900 { | |
901 mode = CHLD_MOD_RelActSpec; | |
902 } | |
903 break; | |
904 | |
905 case('2'): | |
906 if ( X_prm[0] EQ (CHAR)NOT_PRESENT_8BIT ) | |
907 { | |
908 mode = CHLD_MOD_HldActAndAcpt; | |
909 } | |
910 else | |
911 { | |
912 mode = CHLD_MOD_HldActExc; | |
913 } | |
914 break; | |
915 | |
916 case('3'): | |
917 mode = CHLD_MOD_AddHld; | |
918 break; | |
919 | |
920 case('4'): | |
921 mode = CHLD_MOD_Ect; | |
922 break; | |
923 | |
924 case('5'): | |
925 mode = CHLD_MOD_Ccbs; | |
926 break; | |
927 | |
928 case('6'): | |
929 /* S60/Symbian requires an extra mode in %CHLD only: | |
930 retrieving of an [specific] hold call | |
931 without affecting of an waiting call */ | |
932 if ( X_prm[0] EQ (CHAR)NOT_PRESENT_8BIT ) | |
933 { | |
934 mode = CHLD_MOD_RetrieveHoldCall; | |
935 } | |
936 else | |
937 { | |
938 mode = CHLD_MOD_RetrieveHoldCallSpec; | |
939 } | |
940 break; | |
941 | |
942 case('7'): | |
943 /* BMI requires an extra mode in %CHLD only: | |
944 releasing of an [specific] hold call of any type */ | |
945 if ( X_prm[0] EQ (CHAR)NOT_PRESENT_8BIT ) | |
946 { | |
947 cmdCmeError(CME_ERR_OpNotAllow); | |
948 return (ATI_FAIL); | |
949 } | |
950 else | |
951 { | |
952 mode = CHLD_MOD_RelAnySpec; | |
953 } | |
954 break; | |
955 | |
956 case('h'): | |
957 case('H'): | |
958 /* FTA requires an extra mode: Put on hold (without | |
959 accepting automatically waiting or held calls) */ | |
960 mode = CHLD_MOD_OnlyHold; | |
961 break; | |
962 | |
963 case('i'): | |
964 case('I'): | |
965 /* Release dialing call, without dropping current call. */ | |
966 mode = CHLD_MOD_RelDialCall; | |
967 break; | |
968 | |
969 default: | |
970 cmdCmeError(CME_ERR_OpNotAllow); | |
971 return (ATI_FAIL); | |
972 } | |
973 | |
974 #ifdef FF_ATI_BAT | |
975 { | |
976 T_BAT_cmd_send cmd; | |
977 T_BAT_cmd_set_percent_chld my_bat_set_percent_chld; | |
978 | |
979 TRACE_FUNCTION("setatPlus_PercentCHLD() calls bat_send() <=== as APPLICATION"); | |
980 | |
981 memset(&my_bat_set_percent_chld, 0, sizeof(my_bat_set_percent_chld)); | |
982 cmd.ctrl_params = BAT_CMD_SET_PERCENT_CHLD; | |
983 cmd.params.ptr_set_percent_chld = &my_bat_set_percent_chld; | |
984 | |
985 my_bat_set_percent_chld.n = mode; | |
986 my_bat_set_percent_chld.x = (S16)&X_prm; | |
987 src_params->curAtCmd = AT_CMD_CHLD; | |
988 bat_send(ati_bat_get_client(srcId), &cmd); | |
989 | |
990 return ATI_EXCT; /* executing, because response is passed by callback function */ | |
991 } | |
992 #else /* OLD FUNCTION BODY */ | |
993 | |
994 TRACE_FUNCTION("setatPlus_PercentCHLD()"); | |
995 | |
996 if( X_prm[0] NEQ (CHAR)NOT_PRESENT_8BIT ) | |
997 { | |
998 if(cmdType EQ CHLD_PercentCmd) | |
999 { | |
1000 ret = sAT_PercentCHLD( (T_ACI_CMD_SRC)srcId, mode, X_prm ); | |
1001 } | |
1002 else | |
1003 { | |
1004 ret = sAT_PlusCHLD( (T_ACI_CMD_SRC)srcId, mode, X_prm ); | |
1005 } | |
1006 } | |
1007 else | |
1008 { | |
1009 if(cmdType EQ CHLD_PercentCmd) | |
1010 { | |
1011 ret = sAT_PercentCHLD( (T_ACI_CMD_SRC)srcId, mode, NULL ); | |
1012 } | |
1013 else | |
1014 { | |
1015 ret = sAT_PlusCHLD( (T_ACI_CMD_SRC)srcId, mode, NULL ); | |
1016 } | |
1017 } | |
1018 | |
1019 switch( ret ) | |
1020 { | |
1021 case AT_CMPL: | |
1022 break; | |
1023 | |
1024 case AT_EXCT: | |
1025 src_params->curAtCmd = AT_CMD_CHLD; | |
1026 break; | |
1027 | |
1028 case AT_BUSY: | |
1029 cmdCmeError(CME_ERR_OpNotAllow); | |
1030 break; | |
1031 | |
1032 default: | |
1033 cmdCmeError(CME_ERR_Unknown); | |
1034 break; | |
1035 } | |
1036 return (map_aci_2_ati_rslt (ret)); | |
1037 | |
1038 #endif /* no FF_ATI_BAT*/ | |
1039 } | |
1040 | |
1041 /* | |
1042 +--------------------------------------------------------------------+ | |
1043 | PROJECT : GSM-F&D (8411) MODULE : ACI_CMD | | |
1044 | STATE : code ROUTINE : atPlusCHLD | | |
1045 +--------------------------------------------------------------------+ | |
1046 | |
1047 PURPOSE : +CHLD command | |
1048 */ | |
1049 | |
1050 GLOBAL T_ATI_RSLT setatPlusCHLD(char *cl, UBYTE srcId) | |
1051 { | |
1052 TRACE_FUNCTION("setatPlusCHLD()"); | |
1053 | |
1054 return( setatPlus_PercentCHLD(cl, srcId, CHLD_PlusCmd) ); | |
1055 } | |
1056 | |
1057 /* | |
1058 +--------------------------------------------------------------------+ | |
1059 | PROJECT : GSM-F&D (8411) MODULE : ACI_CMD | | |
1060 | STATE : code ROUTINE : atPercentCHLD | | |
1061 +--------------------------------------------------------------------+ | |
1062 | |
1063 PURPOSE : %CHLD command (same as +CHLD but custom specific) | |
1064 */ | |
1065 | |
1066 GLOBAL T_ATI_RSLT setatPercentCHLD(char *cl, UBYTE srcId) | |
1067 { | |
1068 TRACE_FUNCTION("setatPercentCHLD()"); | |
1069 | |
1070 return( setatPlus_PercentCHLD(cl, srcId, CHLD_PercentCmd) ); | |
1071 } | |
1072 | |
1073 | |
1074 /* | |
1075 +--------------------------------------------------------------------+ | |
1076 | PROJECT : GSM-F&D (8411) MODULE : ACI_CMD | | |
1077 | STATE : code ROUTINE : atPlusCHUP | | |
1078 +--------------------------------------------------------------------+ | |
1079 | |
1080 PURPOSE : +CHUP command (Hangs up call) | |
1081 */ | |
1082 GLOBAL T_ATI_RSLT setatPlusCHUP (char *cl, UBYTE srcId) | |
1083 { | |
1084 T_ACI_RETURN ret = AT_FAIL; | |
1085 T_ATI_SRC_PARAMS *src_params = find_element (ati_src_list, srcId, search_ati_src_id); | |
1086 | |
1087 TRACE_FUNCTION("setatPlusCHUP()"); | |
1088 | |
1089 if (*cl EQ ';' OR *cl EQ 0) | |
1090 { | |
1091 #ifdef FF_ATI_BAT | |
1092 { | |
1093 T_BAT_cmd_send cmd; | |
1094 T_BAT_no_parameter dummy; | |
1095 cmd.ctrl_params = BAT_CMD_SET_PLUS_CHUP; | |
1096 dummy.bat_dummy = 0xFF; | |
1097 cmd.params.ptr_set_plus_chup = &dummy; | |
1098 | |
1099 TRACE_FUNCTION("setatPlusCHUP() calls bat_send() <=== as APPLICATION"); | |
1100 | |
1101 if( at.rngPrms.isRng EQ TRUE ) | |
1102 { | |
1103 ati_stop_ring(); | |
1104 } | |
1105 src_params->curAtCmd = AT_CMD_CHUP; | |
1106 | |
1107 bat_send(ati_bat_get_client(srcId), &cmd); | |
1108 | |
1109 return (ATI_EXCT); /* executing, because response is passed by callback function */ | |
1110 } | |
1111 #else /* OLD FUNCTION BODY */ | |
1112 ret=sAT_PlusCHUP((T_ACI_CMD_SRC)srcId); | |
1113 if (ret EQ AT_CMPL) | |
1114 { | |
1115 return (ATI_CMPL); | |
1116 } | |
1117 | |
1118 else if (ret EQ AT_EXCT) | |
1119 { | |
1120 if( at.rngPrms.isRng EQ TRUE ) | |
1121 { | |
1122 ati_stop_ring(); | |
1123 } | |
1124 src_params->curAtCmd = AT_CMD_CHUP; | |
1125 } | |
1126 else | |
1127 { | |
1128 cmdCmeError(CME_ERR_Unknown); | |
1129 } | |
1130 #endif | |
1131 } | |
1132 else | |
1133 { | |
1134 cmdCmeError(CME_ERR_OpNotAllow); | |
1135 } | |
1136 return (map_aci_2_ati_rslt (ret)); | |
1137 } | |
1138 | |
1139 | |
1140 /* | |
1141 +--------------------------------------------------------------------+ | |
1142 | PROJECT : GSM-F&D (8411) MODULE : ACI_CMD | | |
1143 | STATE : code ROUTINE : atPlusCLIP | | |
1144 +--------------------------------------------------------------------+ | |
1145 | |
1146 PURPOSE : +CLIP command (calling line identification presentation) | |
1147 */ | |
1148 GLOBAL T_ATI_RSLT setatPlusCLIP (char *cl, UBYTE srcId) | |
1149 { | |
1150 TRACE_FUNCTION("setatPlusCLIP()"); | |
1151 | |
1152 return(GenAtCR_C( cl, srcId, AT_CMD_CLIP )); | |
1153 } | |
1154 | |
1155 GLOBAL T_ATI_RSLT queatPlusCLIP (char *cl, UBYTE srcId) | |
1156 { | |
1157 T_ACI_RETURN ret = AT_FAIL; | |
1158 T_ACI_CLIP_STAT stat = CLIP_STAT_NotPresent; | |
1159 T_ATI_SRC_PARAMS *src_params = find_element (ati_src_list, srcId, search_ati_src_id); | |
1160 | |
1161 TRACE_FUNCTION("queatPlusCLIP()"); | |
1162 | |
1163 #ifdef FF_ATI_BAT | |
1164 { | |
1165 T_BAT_cmd_send cmd; | |
1166 T_BAT_no_parameter dummy; | |
1167 | |
1168 cmd.ctrl_params=BAT_CMD_QUE_PLUS_CLIP; | |
1169 dummy.bat_dummy = 0xFF; | |
1170 cmd.params.ptr_que_plus_clip = &dummy; | |
1171 src_params->curAtCmd = AT_CMD_CLIP; | |
1172 bat_send(ati_bat_get_client(srcId), &cmd); | |
1173 return(ATI_EXCT); | |
1174 } | |
1175 #else /* no FF_ATI_BAT */ | |
1176 | |
1177 ret = qAT_PlusCLIP((T_ACI_CMD_SRC)srcId,&stat); | |
1178 | |
1179 if (ret EQ AT_CMPL) | |
1180 { | |
1181 resp_disp(srcId, cl,"be",&ati_user_output_cfg[srcId].CLIP_stat,&stat); | |
1182 } | |
1183 else if (ret EQ AT_EXCT) | |
1184 { | |
1185 src_params->curAtCmd = AT_CMD_CLIP; | |
1186 } | |
1187 else if (ret EQ AT_FAIL) | |
1188 { | |
1189 cmdCmeError(CME_ERR_Unknown); | |
1190 } | |
1191 return (map_aci_2_ati_rslt (ret)); | |
1192 | |
1193 #endif /* no FF_ATI_BAT */ | |
1194 } | |
1195 | |
1196 /* | |
1197 +--------------------------------------------------------------------+ | |
1198 | PROJECT : GSM-F&D (8411) MODULE : ACI_CMD | | |
1199 | STATE : code ROUTINE : atPlusCDIP | | |
1200 +--------------------------------------------------------------------+ | |
1201 | |
1202 PURPOSE : +CDIP command (calling line identification presentation) | |
1203 */ | |
1204 GLOBAL T_ATI_RSLT setatPlusCDIP (char *cl, UBYTE srcId) | |
1205 { | |
1206 TRACE_FUNCTION("setatPlusCDIP()"); | |
1207 | |
1208 return(GenAtCR_C( cl, srcId, AT_CMD_CDIP )); | |
1209 } | |
1210 | |
1211 /* | |
1212 +--------------------------------------------------------------------+ | |
1213 | PROJECT : GSM-F&D (8411) MODULE : ACI_CMD | | |
1214 | STATE : code ROUTINE : queatPlusCDIP | | |
1215 +--------------------------------------------------------------------+ | |
1216 | |
1217 PURPOSE : +CDIP command (calling line identification presentation) | |
1218 */ | |
1219 GLOBAL T_ATI_RSLT queatPlusCDIP (char *cl, UBYTE srcId) | |
1220 { | |
1221 T_ACI_RETURN ret = AT_CMPL; | |
1222 T_ACI_CDIP_STAT stat = CDIP_STAT_Unknown; /* Return this for XT6 - No Network Interrogation */ | |
1223 T_ATI_SRC_PARAMS *src_params = find_element (ati_src_list, srcId, search_ati_src_id); | |
1224 | |
1225 #ifdef FF_ATI_BAT | |
1226 { | |
1227 T_BAT_cmd_send cmd; | |
1228 T_BAT_no_parameter dummy; | |
1229 | |
1230 cmd.ctrl_params=BAT_CMD_QUE_PLUS_CDIP; | |
1231 dummy.bat_dummy = 0xFF; | |
1232 cmd.params.ptr_que_plus_cdip = &dummy; | |
1233 src_params->curAtCmd = AT_CMD_CDIP; | |
1234 bat_send(ati_bat_get_client(srcId), &cmd); | |
1235 return(ATI_EXCT); | |
1236 } | |
1237 #else /* no FF_ATI_BAT */ | |
1238 TRACE_FUNCTION("queatPlusCDIP()"); | |
1239 | |
1240 resp_disp(srcId, cl,"be",&ati_user_output_cfg[srcId].CDIP_stat,&stat); | |
1241 | |
1242 return (map_aci_2_ati_rslt (ret)); | |
1243 #endif /* FF_ATI_BAT */ | |
1244 } | |
1245 | |
1246 /* | |
1247 +--------------------------------------------------------------------+ | |
1248 | PROJECT : GSM-F&D (8411) MODULE : ACI_CMD | | |
1249 | STATE : code ROUTINE : atPlusCOLP | | |
1250 +--------------------------------------------------------------------+ | |
1251 | |
1252 PURPOSE : +COLP command (connected line identification presentation) | |
1253 */ | |
1254 | |
1255 GLOBAL T_ATI_RSLT setatPlusCOLP (char *cl, UBYTE srcId) | |
1256 { | |
1257 TRACE_FUNCTION("setatPlusCOLP()"); | |
1258 | |
1259 return(GenAtCR_C( cl, srcId, AT_CMD_COLP )); | |
1260 } | |
1261 | |
1262 GLOBAL T_ATI_RSLT queatPlusCOLP (char *cl, UBYTE srcId) | |
1263 { | |
1264 T_ACI_COLP_STAT stat = COLP_STAT_NotPresent; | |
1265 T_ACI_RETURN ret = AT_FAIL; | |
1266 UBYTE x = 0; | |
1267 T_ATI_SRC_PARAMS *src_params = find_element (ati_src_list, srcId, search_ati_src_id); | |
1268 | |
1269 TRACE_FUNCTION("queatPlusCOLP()"); | |
1270 | |
1271 ret = qAT_PlusCOLP((T_ACI_CMD_SRC)srcId,&stat); | |
1272 if (ret EQ AT_CMPL) | |
1273 { | |
1274 x = (at.flags.COLP_stat?1:0); | |
1275 resp_disp(srcId, cl,"be",&x,&stat); | |
1276 } | |
1277 else if (ret EQ AT_EXCT) | |
1278 { | |
1279 src_params->curAtCmd = AT_CMD_COLP; | |
1280 } | |
1281 else if (ret EQ AT_FAIL) | |
1282 { | |
1283 cmdCmeError(CME_ERR_Unknown); | |
1284 } | |
1285 return (map_aci_2_ati_rslt (ret)); | |
1286 } | |
1287 | |
1288 | |
1289 /* | |
1290 +--------------------------------------------------------------------+ | |
1291 | PROJECT : GSM-F&D (8411) MODULE : ACI_CMD | | |
1292 | STATE : code ROUTINE : atPlusCLIR | | |
1293 +--------------------------------------------------------------------+ | |
1294 | |
1295 PURPOSE : +CLIR command (connected line identification restriction) | |
1296 */ | |
1297 | |
1298 GLOBAL T_ATI_RSLT setatPlusCLIR (char *cl, UBYTE srcId) | |
1299 { | |
1300 T_ACI_RETURN ret = AT_FAIL; | |
1301 T_ACI_CLIR_MOD mode = CLIR_MOD_NotPresent; | |
1302 | |
1303 | |
1304 switch(*cl) | |
1305 { | |
1306 case('0'): | |
1307 { | |
1308 mode=CLIR_MOD_Subscript; | |
1309 cl++; | |
1310 break; | |
1311 } | |
1312 case('1'): | |
1313 { | |
1314 mode=CLIR_MOD_Invoc; | |
1315 cl++; | |
1316 break; | |
1317 } | |
1318 case('2'): | |
1319 { | |
1320 mode=CLIR_MOD_Supp; | |
1321 cl++; | |
1322 break; | |
1323 } | |
1324 case('\0'): | |
1325 { | |
1326 break; | |
1327 } | |
1328 default: | |
1329 { | |
1330 cmdCmeError(CME_ERR_OpNotAllow); | |
1331 return (ATI_FAIL); | |
1332 } | |
1333 } | |
1334 | |
1335 if (!(*cl EQ 0 OR *cl EQ ';')) | |
1336 { | |
1337 cmdCmeError(CME_ERR_OpNotAllow); | |
1338 return (ATI_FAIL); | |
1339 } | |
1340 | |
1341 #ifdef FF_ATI_BAT | |
1342 { | |
1343 T_BAT_cmd_send cmd; | |
1344 T_BAT_cmd_set_plus_clir my_bat_set_plus_clir; | |
1345 | |
1346 TRACE_FUNCTION("setatPLusCLIR() calls bat_send() <=== as APPLICATION"); | |
1347 | |
1348 memset(&my_bat_set_plus_clir, 0, sizeof(my_bat_set_plus_clir)); | |
1349 cmd.ctrl_params = BAT_CMD_SET_PLUS_CLIR; | |
1350 cmd.params.ptr_set_plus_clir = &my_bat_set_plus_clir; | |
1351 | |
1352 my_bat_set_plus_clir.n = mode; | |
1353 | |
1354 bat_send(ati_bat_get_client(srcId), &cmd); | |
1355 | |
1356 return ATI_EXCT; /* executing, because response is passed by callback function */ | |
1357 } | |
1358 #else /* OLD FUNCTION BODY */ | |
1359 | |
1360 TRACE_FUNCTION("setatPLusCLIR()"); | |
1361 | |
1362 ret = sAT_PlusCLIR((T_ACI_CMD_SRC)srcId,mode); | |
1363 return (map_aci_2_ati_rslt (ret)); | |
1364 | |
1365 #endif /* no FF_ATI_BAT*/ | |
1366 } | |
1367 | |
1368 GLOBAL T_ATI_RSLT queatPlusCLIR (char *cl, UBYTE srcId) | |
1369 { | |
1370 T_ACI_RETURN ret = AT_FAIL; | |
1371 T_ACI_CLIR_STAT stat = CLIR_STAT_NotPresent; | |
1372 T_ACI_CLIR_MOD mode = CLIR_MOD_NotPresent; | |
1373 T_ATI_SRC_PARAMS *src_params = find_element (ati_src_list, srcId, search_ati_src_id); | |
1374 | |
1375 TRACE_FUNCTION("queatPLusCLIR()"); | |
1376 | |
1377 #ifdef FF_ATI_BAT | |
1378 { | |
1379 T_BAT_cmd_send cmd; | |
1380 T_BAT_no_parameter dummy; | |
1381 | |
1382 cmd.ctrl_params=BAT_CMD_QUE_PLUS_CLIR; | |
1383 dummy.bat_dummy = 0xFF; | |
1384 cmd.params.ptr_que_plus_clir = &dummy; | |
1385 src_params->curAtCmd = AT_CMD_CLIR; | |
1386 bat_send(ati_bat_get_client(srcId), &cmd); | |
1387 return(ATI_EXCT); | |
1388 } | |
1389 #else /* OLD FUNCTION BODY */ | |
1390 | |
1391 ret = qAT_PlusCLIR ((T_ACI_CMD_SRC)srcId,&mode,&stat); | |
1392 switch (ret) | |
1393 { | |
1394 /* case AT_CMPL: | |
1395 { | |
1396 sprintf(sa,"%s%d,%d",me,mode,stat); | |
1397 io_sendMessage(sa, ATI_NORMAL_OUTPUT); | |
1398 break; | |
1399 } */ /* never happens as far as I know */ | |
1400 case AT_EXCT: | |
1401 { | |
1402 src_params->curAtCmd = AT_CMD_CLIR; | |
1403 break; | |
1404 } | |
1405 case AT_FAIL: | |
1406 { | |
1407 cmdCmeError (CME_ERR_Unknown); | |
1408 break; | |
1409 } | |
1410 } | |
1411 return (map_aci_2_ati_rslt (ret)); | |
1412 #endif /* FF_ATI_BAT */ | |
1413 } | |
1414 | |
1415 | |
1416 /* | |
1417 +--------------------------------------------------------------------+ | |
1418 | PROJECT : GSM-F&D (8411) MODULE : ACI_CMD | | |
1419 | STATE : code ROUTINE : atPlusCCUG | | |
1420 +--------------------------------------------------------------------+ | |
1421 | |
1422 PURPOSE : +CCUG command (closed useg group settings) | |
1423 */ | |
1424 GLOBAL T_ATI_RSLT setatPlusCCUG (char * cl, UBYTE srcId) | |
1425 { | |
1426 T_ACI_RETURN ret = AT_FAIL; | |
1427 T_ACI_CCUG_MOD mode = CCUG_MOD_NotPresent; | |
1428 T_ACI_CCUG_IDX idx = CCUG_IDX_NotPresent; | |
1429 T_ACI_CCUG_INFO info = CCUG_INFO_NotPresent; | |
1430 | |
1431 cl = parse(cl, "ddd", &mode, &idx, &info); | |
1432 if (!cl) | |
1433 { | |
1434 cmdCmeError (CME_ERR_OpNotAllow); | |
1435 return (ATI_FAIL); | |
1436 } | |
1437 | |
1438 #ifdef FF_ATI_BAT | |
1439 { | |
1440 T_BAT_cmd_send cmd; | |
1441 T_BAT_cmd_set_plus_ccug my_bat_set_plus_ccug; | |
1442 | |
1443 TRACE_FUNCTION("setatPlusCCUG() calls bat_send() <=== as APPLICATION"); | |
1444 | |
1445 memset(&my_bat_set_plus_ccug, 0, sizeof(my_bat_set_plus_ccug)); | |
1446 cmd.ctrl_params = BAT_CMD_SET_PLUS_CCUG; | |
1447 cmd.params.ptr_set_plus_ccug = &my_bat_set_plus_ccug; | |
1448 | |
1449 my_bat_set_plus_ccug.n = mode; | |
1450 my_bat_set_plus_ccug.index = idx; | |
1451 my_bat_set_plus_ccug.info = info; | |
1452 | |
1453 bat_send(ati_bat_get_client(srcId), &cmd); | |
1454 | |
1455 return ATI_EXCT; /* executing, because response is passed by callback function */ | |
1456 } | |
1457 #else /* OLD FUNCTION BODY */ | |
1458 | |
1459 TRACE_FUNCTION("setatPlusCCUG()"); | |
1460 | |
1461 ret = sAT_PlusCCUG((T_ACI_CMD_SRC)srcId,mode,idx,info); | |
1462 if (ret EQ AT_FAIL) | |
1463 { | |
1464 cmdCmeError (CME_ERR_Unknown); | |
1465 } | |
1466 return (map_aci_2_ati_rslt (ret)); | |
1467 | |
1468 #endif /* no FF_ATI_BAT*/ | |
1469 } | |
1470 | |
1471 GLOBAL T_ATI_RSLT queatPlusCCUG (char * cl, UBYTE srcId) | |
1472 { | |
1473 T_ACI_RETURN ret = AT_FAIL; | |
1474 T_ACI_CCUG_MOD mode = CCUG_MOD_NotPresent; | |
1475 T_ACI_CCUG_IDX idx = CCUG_IDX_NotPresent; | |
1476 T_ACI_CCUG_INFO info = CCUG_INFO_NotPresent; | |
1477 | |
1478 TRACE_FUNCTION("queatPlusCCUG()"); | |
1479 | |
1480 ret = qAT_PlusCCUG ((T_ACI_CMD_SRC)srcId,&mode,&idx,&info); | |
1481 switch (ret) | |
1482 { | |
1483 case AT_CMPL: | |
1484 { | |
1485 resp_disp (srcId, cl,"eee",&mode,&idx,&info); | |
1486 break; | |
1487 } | |
1488 case AT_FAIL: | |
1489 { | |
1490 cmdCmeError (CME_ERR_Unknown); | |
1491 break; | |
1492 } | |
1493 } | |
1494 return (map_aci_2_ati_rslt (ret)); | |
1495 } | |
1496 | |
1497 /* | |
1498 +--------------------------------------------------------------------+ | |
1499 | PROJECT : GSM-F&D (8411) MODULE : ACI_CMD | | |
1500 | STATE : code ROUTINE : atPlusCMOD | | |
1501 +--------------------------------------------------------------------+ | |
1502 | |
1503 PURPOSE : +CMOD command (call mode) | |
1504 */ | |
1505 | |
1506 GLOBAL T_ATI_RSLT setatPlusCMOD (char *cl, UBYTE srcId) | |
1507 { | |
1508 T_ACI_RETURN ret = AT_FAIL; | |
1509 T_ACI_CMOD_MOD mode = CMOD_MOD_NotPresent; | |
1510 | |
1511 cl = parse(cl, "d", &mode); | |
1512 if (!cl) | |
1513 { | |
1514 cmdCmeError (CME_ERR_OpNotAllow); | |
1515 return (ATI_FAIL); | |
1516 } | |
1517 | |
1518 #ifdef FF_ATI_BAT | |
1519 { | |
1520 T_BAT_cmd_send cmd; | |
1521 T_BAT_cmd_set_plus_cmod my_bat_set_plus_cmod; | |
1522 | |
1523 TRACE_FUNCTION("setatPLusCMOD() calls bat_send() <=== as APPLICATION"); | |
1524 | |
1525 memset(&my_bat_set_plus_cmod, 0, sizeof(my_bat_set_plus_cmod)); | |
1526 cmd.ctrl_params = BAT_CMD_SET_PLUS_CMOD; | |
1527 cmd.params.ptr_set_plus_cmod = &my_bat_set_plus_cmod; | |
1528 | |
1529 my_bat_set_plus_cmod.mode = mode; | |
1530 | |
1531 bat_send(ati_bat_get_client(srcId), &cmd); | |
1532 | |
1533 return ATI_EXCT; /* executing, because response is passed by callback function */ | |
1534 } | |
1535 #else /* OLD FUNCTION BODY */ | |
1536 | |
1537 TRACE_FUNCTION("setatPLusCMOD()"); | |
1538 | |
1539 ret = sAT_PlusCMOD ((T_ACI_CMD_SRC)srcId,mode); | |
1540 switch (ret) | |
1541 { | |
1542 case AT_FAIL: | |
1543 cmdCmeError (CME_ERR_Unknown); | |
1544 break; | |
1545 | |
1546 default: | |
1547 break; | |
1548 } | |
1549 return (map_aci_2_ati_rslt (ret)); | |
1550 | |
1551 #endif /* no FF_ATI_BAT*/ | |
1552 } | |
1553 | |
1554 | |
1555 GLOBAL T_ATI_RSLT queatPlusCMOD (char *cl, UBYTE srcId) | |
1556 { | |
1557 T_ACI_RETURN ret = AT_FAIL; | |
1558 T_ACI_CMOD_MOD mode = CMOD_MOD_NotPresent; | |
1559 | |
1560 TRACE_FUNCTION("queatPLusCMOD()"); | |
1561 | |
1562 ret = qAT_PlusCMOD ((T_ACI_CMD_SRC)srcId,&mode); | |
1563 | |
1564 switch (ret) | |
1565 { | |
1566 case AT_CMPL: | |
1567 { | |
1568 resp_disp (srcId, cl, "e",&mode); | |
1569 break; | |
1570 } | |
1571 case AT_FAIL: | |
1572 { | |
1573 cmdCmeError (CME_ERR_OpNotAllow); | |
1574 break; | |
1575 } | |
1576 } | |
1577 return (map_aci_2_ati_rslt (ret)); | |
1578 } | |
1579 | |
1580 /* | |
1581 +--------------------------------------------------------------------+ | |
1582 | PROJECT : GSM-F&D (8411) MODULE : ACI_CMD | | |
1583 | STATE : code ROUTINE : atPlusCR | | |
1584 +--------------------------------------------------------------------+ | |
1585 | |
1586 PURPOSE : +CR command (Service reporting control) | |
1587 */ | |
1588 | |
1589 GLOBAL T_ATI_RSLT setatPlusCR (char *cl, UBYTE srcId) | |
1590 { | |
1591 TRACE_FUNCTION("setatPlusCR()"); | |
1592 | |
1593 return (GenAtCR_C( cl, srcId, AT_CMD_CR )); | |
1594 } | |
1595 | |
1596 GLOBAL T_ATI_RSLT queatPlusCR (char *cl, UBYTE srcId) | |
1597 { | |
1598 UBYTE x = 0; | |
1599 | |
1600 TRACE_FUNCTION("queatPlusCR()"); | |
1601 | |
1602 x = (ati_user_output_cfg[srcId].CR_stat?1:0); | |
1603 | |
1604 resp_disp (srcId, cl, "b", &x); | |
1605 | |
1606 return (ATI_CMPL); | |
1607 } | |
1608 | |
1609 /* | |
1610 +--------------------------------------------------------------------+ | |
1611 | PROJECT : GSM-F&D (8411) MODULE : ACI_CMD | | |
1612 | STATE : code ROUTINE : atPlusCAOC | | |
1613 +--------------------------------------------------------------------+ | |
1614 | |
1615 PURPOSE : +CAOC command (Advice of Charge) | |
1616 */ | |
1617 GLOBAL T_ATI_RSLT setatPlusCAOC (char* cl, UBYTE srcId) | |
1618 { | |
1619 LONG ccm = 0L; | |
1620 SHORT mode = 0; | |
1621 T_ACI_RETURN ret = AT_FAIL; | |
1622 | |
1623 switch ( *cl ) | |
1624 { | |
1625 case('\0'): | |
1626 break; | |
1627 | |
1628 default: | |
1629 { | |
1630 cl = parse(cl, "d", &mode); | |
1631 if (!cl) | |
1632 { | |
1633 cmdCmeError (CME_ERR_OpNotAllow); | |
1634 return (ATI_FAIL); | |
1635 } | |
1636 | |
1637 switch(mode) | |
1638 { | |
1639 case (0): | |
1640 /* | |
1641 * AT+CAOC=0 queries the actual ccm value | |
1642 */ | |
1643 cl++; | |
1644 break; | |
1645 | |
1646 case (1): | |
1647 /* | |
1648 * AT+CAOC=1 deactivates the unsolicited report mode | |
1649 */ | |
1650 ati_user_output_cfg[srcId].CAOC_stat=0; | |
1651 return (ATI_CMPL); | |
1652 | |
1653 case (2): | |
1654 /* | |
1655 * AT+CAOC=2 activates the unsolicited report mode | |
1656 */ | |
1657 ati_user_output_cfg[srcId].CAOC_stat=1; | |
1658 return (ATI_CMPL); | |
1659 | |
1660 default: | |
1661 cmdCmeError (CME_ERR_OpNotAllow); | |
1662 return (ATI_FAIL); | |
1663 } | |
1664 break; | |
1665 } | |
1666 } | |
1667 | |
1668 #ifdef FF_ATI_BAT | |
1669 { | |
1670 T_BAT_cmd_send cmd; | |
1671 T_BAT_cmd_set_plus_caoc my_bat_set_plus_caoc; | |
1672 | |
1673 TRACE_FUNCTION("setatPLusCAOC() calls bat_send() <=== as APPLICATION"); | |
1674 | |
1675 memset(&my_bat_set_plus_caoc, 0, sizeof(my_bat_set_plus_caoc)); | |
1676 cmd.ctrl_params = BAT_CMD_SET_PLUS_CAOC; | |
1677 cmd.params.ptr_set_plus_caoc = &my_bat_set_plus_caoc; | |
1678 | |
1679 my_bat_set_plus_caoc.mode = mode; | |
1680 | |
1681 bat_send(ati_bat_get_client(srcId), &cmd); | |
1682 | |
1683 return ATI_EXCT; /* executing, because response is passed by callback function */ | |
1684 } | |
1685 #else /* OLD FUNCTION BODY */ | |
1686 | |
1687 TRACE_FUNCTION("setatPLusCAOC()"); | |
1688 | |
1689 ret = qAT_PlusCAOC((T_ACI_CMD_SRC)srcId,&ccm); | |
1690 sprintf (g_sa,"+CAOC: \"%06X\"", ccm); | |
1691 io_sendMessage (srcId, g_sa, ATI_NORMAL_OUTPUT); | |
1692 return (map_aci_2_ati_rslt (ret)); | |
1693 | |
1694 #endif /* no FF_ATI_BAT*/ | |
1695 } | |
1696 | |
1697 | |
1698 GLOBAL T_ATI_RSLT queatPlusCAOC (char* cl, UBYTE srcId) | |
1699 { | |
1700 UBYTE x = 0; | |
1701 | |
1702 TRACE_FUNCTION("queatPLusCAOC()"); | |
1703 | |
1704 /* | |
1705 * AT+CAOC? requests the actual mode | |
1706 */ | |
1707 x = ati_user_output_cfg[srcId].CAOC_stat + 1; | |
1708 | |
1709 resp_disp(srcId, cl,"b",&x); | |
1710 | |
1711 return (ATI_CMPL); | |
1712 } | |
1713 | |
1714 /* | |
1715 +--------------------------------------------------------------------+ | |
1716 | PROJECT : GSM-F&D (8411) MODULE : ACI_CMD | | |
1717 | STATE : code ROUTINE : setatPlusCACM | | |
1718 +--------------------------------------------------------------------+ | |
1719 | |
1720 PURPOSE : +CACM command (Advice of Charge, Accumulated Call Meter) | |
1721 */ | |
1722 GLOBAL T_ATI_RSLT setatPlusCACM (char* cl, UBYTE srcId) | |
1723 { | |
1724 char pin2 [MAX_PWD_LENGTH] = {0} ; | |
1725 T_ACI_RETURN ret = AT_FAIL; | |
1726 T_ATI_SRC_PARAMS *src_params = find_element (ati_src_list, srcId, search_ati_src_id); | |
1727 | |
1728 cl = parse(cl, "n", (LONG)MAX_PWD_LENGTH, &pin2); | |
1729 if ( !cl ) | |
1730 { | |
1731 cmdCmeError(CME_ERR_OpNotAllow); | |
1732 return (ATI_FAIL); | |
1733 } | |
1734 | |
1735 #ifdef FF_ATI_BAT | |
1736 { | |
1737 T_BAT_cmd_send cmd; | |
1738 T_BAT_cmd_set_plus_cacm my_bat_set_plus_cacm; | |
1739 | |
1740 TRACE_FUNCTION("setatPLusCACM() calls bat_send() <=== as APPLICATION"); | |
1741 | |
1742 memset(&my_bat_set_plus_cacm, 0, sizeof(my_bat_set_plus_cacm)); | |
1743 cmd.ctrl_params = BAT_CMD_SET_PLUS_CACM; | |
1744 cmd.params.ptr_set_plus_cacm = &my_bat_set_plus_cacm; | |
1745 | |
1746 my_bat_set_plus_cacm.c_passwd = strlen(pin2); | |
1747 memcpy(my_bat_set_plus_cacm.passwd, pin2, my_bat_set_plus_cacm.c_passwd); | |
1748 src_params->curAtCmd = AT_CMD_CACM; | |
1749 bat_send(ati_bat_get_client(srcId), &cmd); | |
1750 | |
1751 return ATI_EXCT; /* executing, because response is passed by callback function */ | |
1752 } | |
1753 #else /* OLD FUNCTION BODY */ | |
1754 | |
1755 TRACE_FUNCTION("setatPLusCACM()"); | |
1756 | |
1757 ret = sAT_PlusCACM((T_ACI_CMD_SRC)srcId,pin2); | |
1758 | |
1759 switch (ret) | |
1760 { | |
1761 case AT_EXCT: | |
1762 { | |
1763 src_params->curAtCmd = AT_CMD_CACM; | |
1764 break; | |
1765 } | |
1766 case AT_BUSY: | |
1767 { | |
1768 cmdCmeError (CME_ERR_SimBusy); | |
1769 break; | |
1770 } | |
1771 case AT_FAIL: | |
1772 { | |
1773 cmdCmeError (CME_ERR_OpNotAllow); | |
1774 break; | |
1775 } | |
1776 } | |
1777 return (map_aci_2_ati_rslt (ret)); | |
1778 | |
1779 #endif /* no FF_ATI_BAT*/ | |
1780 } | |
1781 | |
1782 | |
1783 GLOBAL T_ATI_RSLT queatPlusCACM (char* cl, UBYTE srcId) | |
1784 { | |
1785 LONG acm = 0L; | |
1786 T_ACI_RETURN ret = AT_FAIL; | |
1787 | |
1788 TRACE_FUNCTION("queatPLusCACM()"); | |
1789 | |
1790 /* | |
1791 * +AT+CACM? requests the actual value | |
1792 */ | |
1793 ret = qAT_PlusCACM((T_ACI_CMD_SRC)srcId,&acm); | |
1794 if( ret NEQ AT_CMPL ) | |
1795 { | |
1796 cmdCmeError(CME_ERR_Unknown); | |
1797 } | |
1798 else | |
1799 { | |
1800 sprintf(g_sa,"+CACM: \"%06X\"", acm); | |
1801 io_sendMessage(srcId, g_sa, ATI_NORMAL_OUTPUT); | |
1802 } | |
1803 return (map_aci_2_ati_rslt (ret)); | |
1804 } | |
1805 | |
1806 | |
1807 | |
1808 /* | |
1809 +--------------------------------------------------------------------+ | |
1810 | PROJECT : GSM-F&D (8411) MODULE : ACI_CMD | | |
1811 | STATE : code ROUTINE : atPlusCAMM | | |
1812 +--------------------------------------------------------------------+ | |
1813 | |
1814 PURPOSE : +CAMM command (Advice of Charge, | |
1815 Accumulated Call Meter Maximum) | |
1816 */ | |
1817 GLOBAL T_ATI_RSLT setatPlusCAMM (char* cl, UBYTE srcId) | |
1818 { | |
1819 char pin2 [MAX_PWD_LENGTH] = {0}; | |
1820 char new_acmmax [MAX_CM_LENGTH] = {0}; | |
1821 char *pNewAcmMax = new_acmmax; | |
1822 LONG acmmax = 0L; | |
1823 T_ACI_RETURN ret = AT_FAIL; | |
1824 T_ATI_SRC_PARAMS *src_params = find_element (ati_src_list, srcId, search_ati_src_id); | |
1825 | |
1826 cl = parse(cl,"sn",(LONG)MAX_CM_LENGTH, &new_acmmax, | |
1827 (LONG)MAX_PWD_LENGTH, &pin2); | |
1828 | |
1829 if ( !cl OR *new_acmmax EQ '\0' ) | |
1830 { | |
1831 cmdCmeError(CME_ERR_OpNotAllow); | |
1832 return (ATI_FAIL); | |
1833 } | |
1834 | |
1835 pNewAcmMax = parse(pNewAcmMax, "y", &acmmax); | |
1836 if ( !pNewAcmMax ) | |
1837 { | |
1838 cmdCmeError(CME_ERR_OpNotAllow); | |
1839 return (ATI_FAIL); | |
1840 } | |
1841 | |
1842 #ifdef FF_ATI_BAT | |
1843 { | |
1844 T_BAT_cmd_send cmd; | |
1845 T_BAT_cmd_set_plus_camm my_bat_set_plus_camm; | |
1846 | |
1847 TRACE_FUNCTION("setatPLusCAMM() calls bat_send() <=== as APPLICATION"); | |
1848 | |
1849 memset(&my_bat_set_plus_camm, 0, sizeof(my_bat_set_plus_camm)); | |
1850 cmd.ctrl_params = BAT_CMD_SET_PLUS_CAMM; | |
1851 cmd.params.ptr_set_plus_camm = &my_bat_set_plus_camm; | |
1852 | |
1853 my_bat_set_plus_camm.acmmax = (S32)acmmax; | |
1854 my_bat_set_plus_camm.c_passwd = strlen(pin2); | |
1855 memcpy(my_bat_set_plus_camm.passwd, pin2, my_bat_set_plus_camm.c_passwd); | |
1856 src_params->curAtCmd = AT_CMD_CAMM; | |
1857 bat_send(ati_bat_get_client(srcId), &cmd); | |
1858 | |
1859 return ATI_EXCT; /* executing, because response is passed by callback function */ | |
1860 } | |
1861 #else /* OLD FUNCTION BODY */ | |
1862 | |
1863 TRACE_FUNCTION("setatPLusCAMM()"); | |
1864 | |
1865 ret = sAT_PlusCAMM((T_ACI_CMD_SRC)srcId, acmmax, pin2); | |
1866 | |
1867 switch (ret) | |
1868 { | |
1869 case AT_EXCT: | |
1870 { | |
1871 src_params->curAtCmd = AT_CMD_CAMM; | |
1872 break; | |
1873 } | |
1874 case AT_BUSY: | |
1875 { | |
1876 cmdCmeError (CME_ERR_SimBusy); | |
1877 break; | |
1878 } | |
1879 default: | |
1880 { | |
1881 cmdCmeError (CME_ERR_OpNotAllow); | |
1882 break; | |
1883 } | |
1884 } | |
1885 return (map_aci_2_ati_rslt (ret)); | |
1886 | |
1887 #endif /* no FF_ATI_BAT*/ | |
1888 } | |
1889 | |
1890 | |
1891 GLOBAL T_ATI_RSLT queatPlusCAMM (char* cl, UBYTE srcId) | |
1892 { | |
1893 LONG acmmax = 0L; | |
1894 T_ACI_RETURN ret = AT_FAIL; | |
1895 | |
1896 TRACE_FUNCTION("queatPLusCAMM()"); | |
1897 | |
1898 /* | |
1899 * +AT+CAMM? requests the actual value | |
1900 */ | |
1901 ret = qAT_PlusCAMM((T_ACI_CMD_SRC)srcId,&acmmax); | |
1902 if( ret NEQ AT_CMPL ) | |
1903 { | |
1904 cmdCmeError(CME_ERR_Unknown); | |
1905 return (ATI_FAIL); | |
1906 } | |
1907 | |
1908 sprintf (g_sa,"+CAMM: \"%06X\"", acmmax); | |
1909 io_sendMessage (srcId, g_sa, ATI_NORMAL_OUTPUT); | |
1910 return (map_aci_2_ati_rslt (ret)); | |
1911 } | |
1912 | |
1913 /* | |
1914 +--------------------------------------------------------------------+ | |
1915 | PROJECT : GSM-F&D (8411) MODULE : ACI_CMD | | |
1916 | STATE : code ROUTINE : atPlusCPUC | | |
1917 +--------------------------------------------------------------------+ | |
1918 | |
1919 PURPOSE : +CPUC command (Advice of Charge, | |
1920 Price per unit and currency) | |
1921 */ | |
1922 GLOBAL T_ATI_RSLT setatPlusCPUC (char* cl, UBYTE srcId) | |
1923 { | |
1924 char currency [MAX_CUR_LEN] = {0x00}; | |
1925 char cvtdCurrency [2*MAX_CUR_LEN] = {0x00}; | |
1926 USHORT lenCurrency = 0; | |
1927 USHORT lenCvtdCurrency = 0; | |
1928 char ppu [MAX_PPU_LENGTH] = {0x00}; | |
1929 char pin2 [MAX_PWD_LENGTH] = {0x00}; | |
1930 T_ACI_RETURN ret = AT_FAIL; | |
1931 T_ATI_SRC_PARAMS *src_params = find_element (ati_src_list, srcId, search_ati_src_id); | |
1932 | |
1933 /* | |
1934 * AT+CPUC=currency, ppu, pw sets the PUCT with or without password. | |
1935 */ | |
1936 cl = parse(cl,"zsn", | |
1937 (LONG)MAX_CUR_LEN, | |
1938 strlen(cl), | |
1939 cl, | |
1940 &lenCurrency, | |
1941 currency, | |
1942 (LONG)MAX_PPU_LENGTH, | |
1943 ppu, | |
1944 (LONG)MAX_PWD_LENGTH, | |
1945 pin2); | |
1946 | |
1947 if ( !cl OR *ppu EQ '\0' ) | |
1948 { | |
1949 cmdCmeError(CME_ERR_OpNotAllow); | |
1950 return (ATI_FAIL); | |
1951 } | |
1952 | |
1953 srcId_cb = srcId; | |
1954 utl_chsetToGsm ((UBYTE*)currency, | |
1955 lenCurrency, | |
1956 (UBYTE*)cvtdCurrency, | |
1957 &lenCvtdCurrency, | |
1958 #ifdef REL99 | |
1959 sizeof(cvtdCurrency), | |
1960 #endif | |
1961 GSM_ALPHA_Int); | |
1962 | |
1963 #ifdef FF_ATI_BAT | |
1964 { | |
1965 T_BAT_cmd_send cmd; | |
1966 T_BAT_cmd_set_plus_cpuc my_bat_set_plus_cpuc; | |
1967 | |
1968 TRACE_FUNCTION("setatPLusCPUC() calls bat_send() <=== as APPLICATION"); | |
1969 | |
1970 memset(&my_bat_set_plus_cpuc, 0, sizeof(my_bat_set_plus_cpuc)); | |
1971 cmd.ctrl_params = BAT_CMD_SET_PLUS_CPUC; | |
1972 cmd.params.ptr_set_plus_cpuc = &my_bat_set_plus_cpuc; | |
1973 | |
1974 my_bat_set_plus_cpuc.c_currency = (U8)lenCurrency; | |
1975 memcpy(my_bat_set_plus_cpuc.currency, currency, lenCurrency); | |
1976 my_bat_set_plus_cpuc.c_ppu = strlen(ppu); | |
1977 memcpy(my_bat_set_plus_cpuc.ppu, ppu, my_bat_set_plus_cpuc.c_ppu); | |
1978 my_bat_set_plus_cpuc.c_passwd = strlen(pin2); | |
1979 my_bat_set_plus_cpuc.v_passwd = my_bat_set_plus_cpuc.c_passwd ? TRUE : FALSE; | |
1980 memcpy(my_bat_set_plus_cpuc.passwd, pin2, my_bat_set_plus_cpuc.c_passwd); | |
1981 src_params->curAtCmd = AT_CMD_CPUC; | |
1982 bat_send(ati_bat_get_client(srcId), &cmd); | |
1983 | |
1984 return ATI_EXCT; /* executing, because response is passed by callback function */ | |
1985 } | |
1986 #else /* OLD FUNCTION BODY */ | |
1987 | |
1988 TRACE_FUNCTION("setatPLusCPUC()"); | |
1989 | |
1990 ret = sAT_PlusCPUC((T_ACI_CMD_SRC)srcId,cvtdCurrency,ppu,pin2); | |
1991 | |
1992 switch (ret) | |
1993 { | |
1994 case AT_EXCT: | |
1995 { | |
1996 src_params->curAtCmd = AT_CMD_CPUC; | |
1997 break; | |
1998 } | |
1999 case AT_BUSY: | |
2000 { | |
2001 cmdCmeError (CME_ERR_SimBusy); | |
2002 break; | |
2003 } | |
2004 default: | |
2005 { | |
2006 cmdCmeError (CME_ERR_OpNotAllow); | |
2007 break; | |
2008 } | |
2009 } | |
2010 return (map_aci_2_ati_rslt (ret)); | |
2011 | |
2012 #endif /* no FF_ATI_BAT*/ | |
2013 } | |
2014 | |
2015 | |
2016 GLOBAL T_ATI_RSLT queatPlusCPUC (char* cl, UBYTE srcId) | |
2017 { | |
2018 char currency [MAX_CUR_LEN] = {0x00}; | |
2019 char cvtdCurrency [2*MAX_CUR_LEN] = {0x00}; | |
2020 USHORT lenCvtdCurrency = 0; | |
2021 USHORT pos = 0; | |
2022 char ppu [MAX_PPU_LENGTH] = {0x00}; | |
2023 T_ACI_RETURN ret = AT_FAIL; | |
2024 | |
2025 | |
2026 TRACE_FUNCTION("queatPLusCPUC()"); | |
2027 | |
2028 /* | |
2029 * +AT+CPUC? requests the actual value | |
2030 */ | |
2031 ret = qAT_PlusCPUC((T_ACI_CMD_SRC)srcId,currency, ppu); | |
2032 | |
2033 if( ret NEQ AT_CMPL ) | |
2034 { | |
2035 cmdCmeError(CME_ERR_Unknown); | |
2036 return (ATI_FAIL); | |
2037 } | |
2038 | |
2039 | |
2040 pos = sprintf(g_sa,"+CPUC: "); | |
2041 | |
2042 srcId_cb = srcId; | |
2043 utl_chsetFromGsm((UBYTE*)currency, | |
2044 (USHORT)strlen(currency), | |
2045 (UBYTE*)cvtdCurrency, | |
2046 sizeof(cvtdCurrency), | |
2047 &lenCvtdCurrency, | |
2048 GSM_ALPHA_Def); | |
2049 pos += sprints(g_sa+pos,cvtdCurrency,lenCvtdCurrency); | |
2050 pos += sprintf(g_sa+pos,",\"%s\"",ppu); | |
2051 io_sendMessage(srcId, g_sa, ATI_NORMAL_OUTPUT); | |
2052 | |
2053 return (map_aci_2_ati_rslt (ret)); | |
2054 } | |
2055 | |
2056 /* | |
2057 +--------------------------------------------------------------------+ | |
2058 | PROJECT : GSM-F&D (8411) MODULE : ACI_CMD | | |
2059 | STATE : code ROUTINE : atPlusCLCC | | |
2060 +--------------------------------------------------------------------+ | |
2061 | |
2062 PURPOSE : +CLCCcommand (list current calls) | |
2063 */ | |
2064 GLOBAL T_ATI_RSLT setatPlusCLCC(char *cl, UBYTE srcId) | |
2065 { | |
2066 #ifdef FF_ATI_BAT | |
2067 | |
2068 T_BAT_cmd_send cmd; | |
2069 T_BAT_no_parameter dummy; | |
2070 cmd.ctrl_params = BAT_CMD_QUE_PLUS_CLCC; | |
2071 dummy.bat_dummy = 0xFF; | |
2072 cmd.params.ptr_que_plus_clcc = &dummy; | |
2073 | |
2074 TRACE_FUNCTION("setatPlusCLCC() calls bat_send() <=== as APPLICATION"); | |
2075 | |
2076 bat_send(ati_bat_get_client(srcId), &cmd); | |
2077 | |
2078 return (ATI_EXCT); /* executing, because response is passed by callback function */ | |
2079 | |
2080 #else /* no FF_ATI_BAT */ | |
2081 | |
2082 char *me = "+CLCC: "; | |
2083 T_ACI_CLCC_CALDESC *calLst = NULL; | |
2084 UBYTE lstIdx = 0; | |
2085 SHORT pos = 0; | |
2086 USHORT lenCvtdAlpha = 0; | |
2087 UBYTE type = 0; | |
2088 | |
2089 CHAR cvtdAlpha[2*MAX_ALPHA_LEN]; | |
2090 | |
2091 TRACE_FUNCTION("setatPlusCLCC()"); | |
2092 | |
2093 srcId_cb = srcId; /* For utl_chsetFromGsm() */ | |
2094 switch (*cl) | |
2095 { | |
2096 case(';'): | |
2097 case(0x0): | |
2098 { | |
2099 /* Check if we have enough RAM for the following ACI_MALLOC */ | |
2100 USHORT free, alloc; | |
2101 int ret; | |
2102 ret = vsi_m_status ( hCommACI, | |
2103 MAX_CALL_NR * sizeof (T_ACI_CLCC_CALDESC), | |
2104 PRIM_POOL_PARTITION, | |
2105 &free, | |
2106 &alloc ); | |
2107 if (ret EQ VSI_ERROR || free EQ 0) | |
2108 { | |
2109 cmdCmeError(CME_ERR_MemFull); | |
2110 return (ATI_FAIL); | |
2111 } | |
2112 } | |
2113 ACI_MALLOC (calLst, MAX_CALL_NR * sizeof (T_ACI_CLCC_CALDESC)); | |
2114 (void)qAT_PlusCLCC((T_ACI_CMD_SRC)srcId, calLst); /* Always returns AT_CMPL */ | |
2115 | |
2116 /* 20 is approximatly the amount of extra characters (like ",") */ | |
2117 | |
2118 for( lstIdx = 0; lstIdx < MAX_CALL_NR; lstIdx++ ) | |
2119 { | |
2120 if( calLst[lstIdx].idx EQ ACI_NumParmNotPresent ) | |
2121 break; | |
2122 | |
2123 pos = sprintf(g_sa,"%s%d",me,calLst[lstIdx].idx); | |
2124 | |
2125 if (calLst[lstIdx].dir NEQ CLCC_DIR_NotPresent) | |
2126 pos += sprintf(g_sa+pos,",%d",calLst[lstIdx].dir); | |
2127 else | |
2128 pos += sprintf(g_sa+pos,","); | |
2129 if (calLst[lstIdx].stat NEQ CLCC_STAT_NotPresent) | |
2130 pos += sprintf(g_sa+pos,",%d",calLst[lstIdx].stat); | |
2131 else | |
2132 pos += sprintf(g_sa+pos,","); | |
2133 if (calLst[lstIdx].mode NEQ CLCC_MODE_NotPresent) | |
2134 pos += sprintf(g_sa+pos,",%d",calLst[lstIdx].mode); | |
2135 else | |
2136 pos += sprintf(g_sa+pos,","); | |
2137 if (calLst[lstIdx].mpty NEQ CLCC_MPTY_NotPresent) | |
2138 pos += sprintf(g_sa+pos,",%d",calLst[lstIdx].mpty); | |
2139 else | |
2140 pos += sprintf(g_sa+pos,","); | |
2141 | |
2142 if (calLst[lstIdx].number[0] NEQ 0x0) | |
2143 { | |
2144 pos += sprintf(g_sa+pos,",\"%s\"",calLst[lstIdx].number); | |
2145 if (calLst[lstIdx].type.ton NEQ TON_NotPresent) | |
2146 { | |
2147 type = toa_merge(calLst[lstIdx].type); | |
2148 pos += sprintf(g_sa+pos,",%d",(int)type); | |
2149 } | |
2150 #ifdef NO_ASCIIZ | |
2151 if (calLst[lstIdx].alpha.len NEQ 0x0) | |
2152 { | |
2153 pos += sprintf(g_sa+pos,","); | |
2154 utl_chsetFromGsm ( calLst[lstIdx].alpha.data, | |
2155 calLst[lstIdx].alpha.len, | |
2156 (UBYTE*)cvtdAlpha, | |
2157 sizeof(cvtdAlpha), | |
2158 &lenCvtdAlpha, | |
2159 GSM_ALPHA_Def ); | |
2160 pos += sprints ( g_sa + pos, cvtdAlpha, lenCvtdAlpha ); | |
2161 } | |
2162 #else /* #ifdef NO_ASCIIZ */ | |
2163 if (calLst[lstIdx].alpha[0] NEQ 0x0) | |
2164 { | |
2165 pos += sprintf(g_sa+pos,","); | |
2166 utl_chsetFromGsm ( (UBYTE*)calLst[lstIdx].alpha, | |
2167 0, | |
2168 (UBYTE*)cvtdAlpha, | |
2169 sizeof(cvtdAlpha), | |
2170 &lenCvtdAlpha, | |
2171 GSM_ALPHA_Int ); | |
2172 pos += sprints ( g_sa + pos, cvtdAlpha, lenCvtdAlpha ); | |
2173 } | |
2174 #endif /* #ifdef NO_ASCIIZ */ | |
2175 } | |
2176 | |
2177 ci_remTrailCom(g_sa, pos); | |
2178 io_sendMessage(srcId, g_sa, ATI_NORMAL_OUTPUT); | |
2179 } | |
2180 ACI_MFREE (calLst); | |
2181 break; | |
2182 default: | |
2183 cmdCmeError(CME_ERR_Unknown); | |
2184 return (ATI_FAIL); | |
2185 } | |
2186 return (ATI_CMPL); | |
2187 | |
2188 #endif /* no FF_ATI_BAT */ | |
2189 } | |
2190 | |
2191 /* | |
2192 +--------------------------------------------------------------------+ | |
2193 | PROJECT : GSM-F&D (8411) MODULE : ACI_CMD | | |
2194 | STATE : code ROUTINE : atPercentCLCC | | |
2195 +--------------------------------------------------------------------+ | |
2196 | |
2197 PURPOSE : %CLCCcommand (list current calls) | |
2198 */ | |
2199 GLOBAL T_ATI_RSLT setatPercentCLCC(char *cl, UBYTE srcId) | |
2200 { | |
2201 char *me = "%CLCC: "; | |
2202 T_ACI_CLCC_CALDESC *calLst = NULL; | |
2203 UBYTE lstIdx = 0; | |
2204 SHORT pos = 0; | |
2205 USHORT lenCvtdAlpha = 0; | |
2206 UBYTE type = 0; | |
2207 CHAR cvtdAlpha[2*MAX_ALPHA_LEN]; | |
2208 | |
2209 TRACE_FUNCTION("setatPercentCLCC()"); | |
2210 | |
2211 srcId_cb = srcId; /* For utl_chsetFromGsm() */ | |
2212 | |
2213 switch (*cl) | |
2214 { | |
2215 case(';'): | |
2216 case(0x0): | |
2217 ACI_MALLOC (calLst, MAX_CALL_NR * sizeof (T_ACI_CLCC_CALDESC)); | |
2218 memset(calLst, 0 , MAX_CALL_NR * sizeof (T_ACI_CLCC_CALDESC)); | |
2219 (void)qAT_PlusCLCC((T_ACI_CMD_SRC)srcId, calLst); /* Always returns AT_CMPL */ | |
2220 | |
2221 /* 20 is approximatly the amount of extra characters (like ",") */ | |
2222 | |
2223 for( lstIdx = 0; lstIdx < MAX_CALL_NR; lstIdx++ ) | |
2224 { | |
2225 if( calLst[lstIdx].idx EQ ACI_NumParmNotPresent ) | |
2226 break; | |
2227 | |
2228 pos = sprintf(g_sa,"%s%d",me,calLst[lstIdx].idx); | |
2229 | |
2230 if (calLst[lstIdx].dir NEQ CLCC_DIR_NotPresent) | |
2231 pos += sprintf(g_sa+pos,",%d",calLst[lstIdx].dir); | |
2232 else | |
2233 pos += sprintf(g_sa+pos,","); | |
2234 if (calLst[lstIdx].stat NEQ CLCC_STAT_NotPresent) | |
2235 pos += sprintf(g_sa+pos,",%d",calLst[lstIdx].stat); | |
2236 else | |
2237 pos += sprintf(g_sa+pos,","); | |
2238 if (calLst[lstIdx].mode NEQ CLCC_MODE_NotPresent) | |
2239 pos += sprintf(g_sa+pos,",%d",calLst[lstIdx].mode); | |
2240 else | |
2241 pos += sprintf(g_sa+pos,","); | |
2242 if (calLst[lstIdx].mpty NEQ CLCC_MPTY_NotPresent) | |
2243 pos += sprintf(g_sa+pos,",%d",calLst[lstIdx].mpty); | |
2244 else | |
2245 pos += sprintf(g_sa+pos,","); | |
2246 if (calLst[lstIdx].class_type NEQ CLCC_CLASS_NotPresent) | |
2247 pos += sprintf(g_sa+pos,",%d",calLst[lstIdx].class_type); | |
2248 else | |
2249 pos += sprintf(g_sa+pos,","); | |
2250 | |
2251 if (calLst[lstIdx].number[0] NEQ 0x0) | |
2252 { | |
2253 pos += sprintf(g_sa+pos,",\"%s\"",calLst[lstIdx].number); | |
2254 if (calLst[lstIdx].type.ton NEQ TON_NotPresent) | |
2255 { | |
2256 type = toa_merge(calLst[lstIdx].type); | |
2257 pos += sprintf(g_sa+pos,",%d",(int)type); | |
2258 } | |
2259 #ifdef NO_ASCIIZ | |
2260 if (calLst[lstIdx].alpha.len NEQ 0x0) | |
2261 { | |
2262 pos += sprintf(g_sa+pos,","); | |
2263 utl_chsetFromGsm ( calLst[lstIdx].alpha.data, | |
2264 calLst[lstIdx].alpha.len, | |
2265 (UBYTE*)cvtdAlpha, | |
2266 sizeof(cvtdAlpha), | |
2267 &lenCvtdAlpha, | |
2268 GSM_ALPHA_Def ); | |
2269 pos += sprints ( g_sa + pos, cvtdAlpha, lenCvtdAlpha ); | |
2270 } | |
2271 #else /* #ifdef NO_ASCIIZ */ | |
2272 if (calLst[lstIdx].alpha[0] NEQ 0x0) | |
2273 { | |
2274 pos += sprintf(g_sa+pos,","); | |
2275 utl_chsetFromGsm ( (UBYTE*)calLst[lstIdx].alpha, | |
2276 0, | |
2277 (UBYTE*)cvtdAlpha, | |
2278 sizeof(cvtdAlpha), | |
2279 &lenCvtdAlpha, | |
2280 GSM_ALPHA_Int ); | |
2281 pos += sprints ( g_sa + pos, cvtdAlpha, lenCvtdAlpha ); | |
2282 } | |
2283 #endif /* #ifdef NO_ASCIIZ */ | |
2284 } | |
2285 | |
2286 ci_remTrailCom(g_sa, pos); | |
2287 io_sendMessage(srcId, g_sa, ATI_NORMAL_OUTPUT); | |
2288 } | |
2289 ACI_MFREE (calLst); | |
2290 break; | |
2291 default: | |
2292 cmdCmeError(CME_ERR_Unknown); | |
2293 return (ATI_FAIL); | |
2294 } | |
2295 return (ATI_CMPL); | |
2296 } | |
2297 | |
2298 /* | |
2299 +--------------------------------------------------------------------+ | |
2300 | PROJECT : GSM-F&D (8411) MODULE : ACI_CMD | | |
2301 | STATE : code ROUTINE : atPlusCCWA | | |
2302 +--------------------------------------------------------------------+ | |
2303 | |
2304 PURPOSE : +CCWA command (Call Waiting Managment) | |
2305 */ | |
2306 GLOBAL T_ATI_RSLT setatPlusCCWA (char *cl, UBYTE srcId) | |
2307 { | |
2308 T_ACI_RETURN ret = AT_FAIL; | |
2309 T_ACI_CCWA_MOD mode = CCWA_MOD_NotInterrogate; | |
2310 T_ACI_CLASS class_type = CLASS_NotPresent; | |
2311 SHORT val = -1; | |
2312 T_ATI_SRC_PARAMS *src_params = find_element (ati_src_list, srcId, search_ati_src_id); | |
2313 | |
2314 cl = parse(cl, "rdd", &val, &mode, &class_type); | |
2315 if (!cl OR val > 1 ) | |
2316 { | |
2317 cmdCmeError (CME_ERR_OpNotAllow); | |
2318 return (ATI_FAIL); | |
2319 } | |
2320 | |
2321 if (val >= 0) | |
2322 { | |
2323 at.flags.CCWA_stat=(UBYTE) val; | |
2324 } | |
2325 | |
2326 #ifdef FF_ATI_BAT | |
2327 { | |
2328 T_BAT_cmd_send cmd; | |
2329 T_BAT_cmd_set_plus_ccwa my_bat_set_plus_ccwa; | |
2330 | |
2331 TRACE_FUNCTION("setatPLusCCWA() calls bat_send() <=== as APPLICATION"); | |
2332 | |
2333 memset(&my_bat_set_plus_ccwa, 0, sizeof(my_bat_set_plus_ccwa)); | |
2334 cmd.ctrl_params = BAT_CMD_SET_PLUS_CCWA; | |
2335 cmd.params.ptr_set_plus_ccwa = &my_bat_set_plus_ccwa; | |
2336 | |
2337 my_bat_set_plus_ccwa.mode = mode; | |
2338 my_bat_set_plus_ccwa.bearer_class = class_type; | |
2339 src_params->curAtCmd = AT_CMD_CCWA; | |
2340 bat_send(ati_bat_get_client(srcId), &cmd); | |
2341 | |
2342 return ATI_EXCT; /* executing, because response is passed by callback function */ | |
2343 } | |
2344 #else /* OLD FUNCTION BODY */ | |
2345 | |
2346 TRACE_FUNCTION("setatPLusCCWA()"); | |
2347 | |
2348 if (mode EQ CCWA_MOD_Query) /*query mode*/ | |
2349 { | |
2350 ret = qAT_PlusCCWA ((T_ACI_CMD_SRC)srcId,class_type); | |
2351 switch (ret) | |
2352 { | |
2353 case AT_EXCT: | |
2354 src_params->curAtCmd = AT_CMD_CCWA; | |
2355 break; | |
2356 | |
2357 default: | |
2358 cmdCmeError(CME_ERR_Unknown); | |
2359 break; | |
2360 } | |
2361 } | |
2362 else /*set mode*/ | |
2363 { | |
2364 ret = sAT_PlusCCWA ((T_ACI_CMD_SRC)srcId,mode,class_type); | |
2365 switch (ret) | |
2366 { | |
2367 case AT_EXCT: | |
2368 break; | |
2369 | |
2370 case AT_FAIL: | |
2371 case AT_BUSY: | |
2372 cmdCmeError (CME_ERR_Unknown); | |
2373 break; | |
2374 } | |
2375 } | |
2376 return (map_aci_2_ati_rslt (ret)); | |
2377 | |
2378 #endif /* no FF_ATI_BAT*/ | |
2379 } | |
2380 | |
2381 | |
2382 GLOBAL T_ATI_RSLT queatPlusCCWA (CHAR *cl, UBYTE srcId) | |
2383 { | |
2384 TRACE_FUNCTION("queatPLusCCWA()"); | |
2385 | |
2386 resp_disp (srcId, cl,"b",&at.flags.CCWA_stat); | |
2387 return (ATI_CMPL); | |
2388 } | |
2389 | |
2390 /* | |
2391 +--------------------------------------------------------------------+ | |
2392 | PROJECT : GSM-F&D (8411) MODULE : ACI_CMD | | |
2393 | STATE : code ROUTINE : atPlusVTS | | |
2394 +--------------------------------------------------------------------+ | |
2395 | |
2396 PURPOSE : +VTS command (send DTMF) | |
2397 */ | |
2398 GLOBAL T_ATI_RSLT setatPlusVTS (char * cl, UBYTE srcId) | |
2399 { | |
2400 T_ACI_RETURN ret = AT_FAIL; | |
2401 SHORT duration = ACI_NumParmNotPresent; | |
2402 CHAR dtmf = '\0'; | |
2403 T_ATI_SRC_PARAMS *src_params = find_element (ati_src_list, srcId, search_ati_src_id); | |
2404 | |
2405 if( *cl EQ '\0' ) | |
2406 { | |
2407 cmdCmeError(CME_ERR_OpNotAllow); | |
2408 return (ATI_FAIL); | |
2409 } | |
2410 | |
2411 cl = parse (cl, "ar", (ULONG)1, &dtmf, &duration); | |
2412 if (!cl) | |
2413 { | |
2414 cmdCmeError(CME_ERR_OpNotAllow); | |
2415 return (ATI_FAIL); | |
2416 } | |
2417 | |
2418 #ifdef FF_ATI_BAT | |
2419 { | |
2420 T_BAT_cmd_send cmd; | |
2421 T_BAT_cmd_set_plus_vts my_bat_set_plus_vts; | |
2422 | |
2423 TRACE_FUNCTION("setatPlusVTS() calls bat_send() <=== as APPLICATION"); | |
2424 | |
2425 memset(&my_bat_set_plus_vts, 0, sizeof(my_bat_set_plus_vts)); | |
2426 cmd.ctrl_params = BAT_CMD_SET_PLUS_VTS; | |
2427 cmd.params.ptr_set_plus_vts = &my_bat_set_plus_vts; | |
2428 | |
2429 my_bat_set_plus_vts.dtmf = dtmf; | |
2430 src_params->curAtCmd = AT_CMD_VTS; | |
2431 bat_send(ati_bat_get_client(srcId), &cmd); | |
2432 | |
2433 return ATI_EXCT; /* executing, because response is passed by callback function */ | |
2434 } | |
2435 #else /* OLD FUNCTION BODY */ | |
2436 | |
2437 TRACE_FUNCTION("setatPlusVTS()"); | |
2438 | |
2439 ret = sAT_PlusVTS((T_ACI_CMD_SRC)srcId,dtmf,VTS_MOD_Auto); | |
2440 | |
2441 switch (ret) | |
2442 { | |
2443 case AT_EXCT: | |
2444 src_params->curAtCmd = AT_CMD_VTS; | |
2445 break; | |
2446 | |
2447 case AT_FAIL: | |
2448 case AT_BUSY: | |
2449 cmdCmeError (CME_ERR_Unknown); | |
2450 break; | |
2451 } | |
2452 return (map_aci_2_ati_rslt (ret)); | |
2453 | |
2454 #endif /* no FF_ATI_BAT*/ | |
2455 } | |
2456 | |
2457 /* | |
2458 +--------------------------------------------------------------------+ | |
2459 | PROJECT : GSM-F&D (8411) MODULE : ACI_CMD | | |
2460 | STATE : code ROUTINE : setatPercentRDL | | |
2461 +--------------------------------------------------------------------+ | |
2462 | |
2463 PURPOSE : %RDL command (set redial mode) | |
2464 */ | |
2465 | |
2466 GLOBAL T_ATI_RSLT setatPercentRDL (char* cl, UBYTE srcId) | |
2467 { | |
2468 T_ACI_CC_REDIAL_MODE rdlmode = AUTOM_REP_NOT_PRESENT; | |
2469 T_ACI_CC_REDIAL_NOTIF usr_notif = NOTIF_NO_PRESENT; | |
2470 T_ACI_RETURN ret = AT_FAIL; | |
2471 | |
2472 cl = parse(cl, "dd", &rdlmode, &usr_notif); | |
2473 if(!cl) | |
2474 { | |
2475 cmdCmeError(CME_ERR_OpNotAllow); | |
2476 return (ATI_FAIL); | |
2477 } | |
2478 | |
2479 #ifdef FF_ATI_BAT | |
2480 { | |
2481 T_BAT_cmd_send cmd; | |
2482 T_BAT_cmd_set_percent_rdl my_bat_set_percent_rdl; | |
2483 | |
2484 TRACE_FUNCTION("setatPercentRDL() calls bat_send() <=== as APPLICATION"); | |
2485 | |
2486 memset(&my_bat_set_percent_rdl, 0, sizeof(my_bat_set_percent_rdl)); | |
2487 cmd.ctrl_params = BAT_CMD_SET_PERCENT_RDL; | |
2488 cmd.params.ptr_set_percent_rdl = &my_bat_set_percent_rdl; | |
2489 | |
2490 my_bat_set_percent_rdl.mode = (T_BAT_percent_rdl_mode)&rdlmode; | |
2491 | |
2492 bat_send(ati_bat_get_client(srcId), &cmd); | |
2493 | |
2494 return ATI_EXCT; /* executing, because response is passed by callback function */ | |
2495 } | |
2496 #else /* OLD FUNCTION BODY */ | |
2497 | |
2498 TRACE_FUNCTION("setatPercentRDL()"); | |
2499 | |
2500 ret = sAT_PercentRDL ((T_ACI_CMD_SRC)srcId, rdlmode, usr_notif); | |
2501 | |
2502 if (ret NEQ AT_CMPL) | |
2503 { | |
2504 cmdCmeError(CME_ERR_OpNotAllow); | |
2505 } | |
2506 return (map_aci_2_ati_rslt (ret)); | |
2507 | |
2508 #endif /* no FF_ATI_BAT*/ | |
2509 } | |
2510 | |
2511 /* | |
2512 +--------------------------------------------------------------------+ | |
2513 | PROJECT : GSM-F&D (8411) MODULE : ACI_CMD | | |
2514 | STATE : code ROUTINE : queatPercentRDL | | |
2515 +--------------------------------------------------------------------+ | |
2516 | |
2517 PURPOSE : %RDL command (query redial mode) | |
2518 */ | |
2519 | |
2520 GLOBAL T_ATI_RSLT queatPercentRDL (char* cl, UBYTE srcId) | |
2521 { | |
2522 T_ACI_CC_REDIAL_MODE rdlmode = AUTOM_REP_NOT_PRESENT; | |
2523 T_ACI_CC_REDIAL_NOTIF usr_notif = NOTIF_NO_PRESENT; | |
2524 T_ACI_RETURN ret = AT_FAIL; | |
2525 | |
2526 TRACE_FUNCTION("queatPercentRDL()"); | |
2527 | |
2528 ret = qAT_PercentRDL ((T_ACI_CMD_SRC)srcId,&rdlmode, &usr_notif); | |
2529 | |
2530 if(ret EQ AT_CMPL) | |
2531 { | |
2532 resp_disp (srcId, cl,"bb",&rdlmode, &usr_notif); | |
2533 } | |
2534 else | |
2535 { | |
2536 cmdCmeError (CME_ERR_Unknown); | |
2537 } | |
2538 return (map_aci_2_ati_rslt (ret)); | |
2539 } | |
2540 | |
2541 #ifdef TI_PS_FF_AT_P_CMD_RDLB | |
2542 /* | |
2543 +--------------------------------------------------------------------+ | |
2544 | PROJECT : GSM-F&D (8411) MODULE : ACI_CMD | | |
2545 | STATE : code ROUTINE : setatPercentRDLB | | |
2546 +--------------------------------------------------------------------+ | |
2547 | |
2548 PURPOSE : %RDLB command (delete black list of redialling phone | |
2549 numbers) | |
2550 */ | |
2551 | |
2552 GLOBAL T_ATI_RSLT setatPercentRDLB (char* cl, UBYTE srcId) | |
2553 { | |
2554 T_ACI_RETURN ret = AT_FAIL; | |
2555 T_ACI_CC_REDIAL_NOTIF usr_notif = NOTIF_NO_PRESENT; | |
2556 T_ACI_CC_REDIAL_BLMODE blmode = BLMODE_NO_PRESENT; | |
2557 | |
2558 cl = parse(cl, "dd", &blmode, &usr_notif); | |
2559 if(!cl) | |
2560 { | |
2561 cmdCmeError(CME_ERR_OpNotAllow); | |
2562 return (ATI_FAIL); | |
2563 } | |
2564 | |
2565 #ifdef FF_ATI_BAT | |
2566 { | |
2567 T_BAT_cmd_send cmd; | |
2568 T_BAT_cmd_set_percent_rdlb my_bat_set_percent_rdlb; | |
2569 | |
2570 TRACE_FUNCTION("setatPercentRDLB() calls bat_send() <=== as APPLICATION"); | |
2571 | |
2572 memset(&my_bat_set_percent_rdlb, 0, sizeof(my_bat_set_percent_rdlb)); | |
2573 cmd.ctrl_params = BAT_CMD_SET_PERCENT_RDLB; | |
2574 cmd.params.ptr_set_percent_rdlb = &my_bat_set_percent_rdlb; | |
2575 | |
2576 my_bat_set_percent_rdlb.mode = (T_BAT_percent_rdlb_mode)&blmode; | |
2577 | |
2578 bat_send(ati_bat_get_client(srcId), &cmd); | |
2579 | |
2580 return ATI_EXCT; /* executing, because response is passed by callback function */ | |
2581 } | |
2582 #else /* OLD FUNCTION BODY */ | |
2583 | |
2584 TRACE_FUNCTION("setatPercentRDLB()"); | |
2585 | |
2586 ret = sAT_PercentRDLB((T_ACI_CMD_SRC)srcId, blmode, usr_notif); | |
2587 | |
2588 if (ret NEQ AT_CMPL) | |
2589 { | |
2590 cmdCmeError(CME_ERR_OpNotAllow); | |
2591 } | |
2592 return (map_aci_2_ati_rslt (ret)); | |
2593 | |
2594 #endif /* no FF_ATI_BAT*/ | |
2595 } | |
2596 | |
2597 /* | |
2598 +--------------------------------------------------------------------+ | |
2599 | PROJECT : GSM-F&D (8411) MODULE : ACI_CMD | | |
2600 | STATE : code ROUTINE : queatPercentRDLB | | |
2601 +--------------------------------------------------------------------+ | |
2602 | |
2603 PURPOSE : %RDLB command (query black list of redialling phone | |
2604 numbers) | |
2605 */ | |
2606 | |
2607 GLOBAL T_ATI_RSLT queatPercentRDLB (char* cl, UBYTE srcId) | |
2608 { | |
2609 T_ACI_RETURN ret = AT_FAIL; | |
2610 T_ACI_CC_REDIAL_BLACKL blackl; | |
2611 T_ACI_CC_REDIAL_NOTIF usr_notif= NOTIF_NO_PRESENT; | |
2612 UBYTE i,j; | |
2613 UBYTE type; | |
2614 | |
2615 TRACE_FUNCTION("queatPercentRDLB()"); | |
2616 | |
2617 memset(&blackl, 0, sizeof(T_ACI_CC_REDIAL_BLACKL)); | |
2618 | |
2619 ret = qAT_PercentRDLB ((T_ACI_CMD_SRC)srcId,&blackl,&usr_notif); | |
2620 | |
2621 if(ret EQ AT_CMPL) | |
2622 { | |
2623 resp_disp (srcId, cl,"b", &usr_notif); /* output user notification state */ | |
2624 for(i=0; i<blackl.blCount; i++) /* output black list */ | |
2625 { | |
2626 type = (UBYTE)toa_merge(blackl.blNum[i].type); | |
2627 for(j=0; j<blackl.blNum[i].numb_len; j++) | |
2628 { | |
2629 blackl.blNum[i].number[j] = (blackl.blNum[i].number[j] | 0x30); | |
2630 } | |
2631 sprintf(g_sa,"%s:\"%s\",%d","%RDLB",blackl.blNum[i].number, | |
2632 (int)type); | |
2633 io_sendMessage(srcId, g_sa, ATI_NORMAL_OUTPUT); | |
2634 } | |
2635 } | |
2636 else | |
2637 { | |
2638 cmdCmeError (CME_ERR_Unknown); | |
2639 } | |
2640 return (map_aci_2_ati_rslt (ret)); | |
2641 } | |
2642 #endif /* TI_PS_FF_AT_P_CMD_RDLB */ | |
2643 /* | |
2644 +--------------------------------------------------------------------+ | |
2645 | PROJECT : GSM-F&D (8411) MODULE : ACI_CMD | | |
2646 | STATE : code ROUTINE : atPercentVTS | | |
2647 +--------------------------------------------------------------------+ | |
2648 | |
2649 PURPOSE : %VTS command (send DTMF) | |
2650 */ | |
2651 GLOBAL T_ATI_RSLT setatPercentVTS (char * cl, UBYTE srcId) | |
2652 { | |
2653 T_ACI_RETURN ret = AT_FAIL; | |
2654 CHAR dtmf = 0x0; | |
2655 T_ATI_SRC_PARAMS *src_params = find_element (ati_src_list, srcId, search_ati_src_id); | |
2656 T_ACI_VTS_MOD mode = VTS_MOD_Auto; | |
2657 | |
2658 if( *cl EQ '\0' ) | |
2659 { | |
2660 cmdCmeError(CME_ERR_OpNotAllow); | |
2661 return (ATI_FAIL); | |
2662 } | |
2663 | |
2664 cl = parse (cl, "ar", (ULONG)1, &dtmf, &mode); | |
2665 | |
2666 if (!cl) | |
2667 { | |
2668 cmdCmeError(CME_ERR_OpNotAllow); | |
2669 return (ATI_FAIL); | |
2670 } | |
2671 | |
2672 if (mode EQ VTS_MOD_NotPresent) | |
2673 { | |
2674 mode = VTS_MOD_Auto; | |
2675 } | |
2676 | |
2677 #ifdef FF_ATI_BAT | |
2678 { | |
2679 T_BAT_cmd_send cmd; | |
2680 T_BAT_cmd_set_percent_vts my_bat_set_percent_vts; | |
2681 | |
2682 TRACE_FUNCTION("setatPercentVTS() calls bat_send() <=== as APPLICATION"); | |
2683 | |
2684 memset(&my_bat_set_percent_vts, 0, sizeof(my_bat_set_percent_vts)); | |
2685 cmd.ctrl_params = BAT_CMD_SET_PERCENT_VTS; | |
2686 cmd.params.ptr_set_percent_vts = &my_bat_set_percent_vts; | |
2687 | |
2688 my_bat_set_percent_vts.dtmf = dtmf; | |
2689 my_bat_set_percent_vts.mode = mode; | |
2690 src_params->curAtCmd = AT_CMD_VTS; | |
2691 bat_send(ati_bat_get_client(srcId), &cmd); | |
2692 | |
2693 return ATI_EXCT; /* executing, because response is passed by callback function */ | |
2694 } | |
2695 #else /* OLD FUNCTION BODY */ | |
2696 | |
2697 TRACE_FUNCTION("setatPercentVTS()"); | |
2698 | |
2699 ret = sAT_PlusVTS((T_ACI_CMD_SRC)srcId,dtmf,mode); | |
2700 | |
2701 switch (ret) | |
2702 { | |
2703 case AT_EXCT: | |
2704 { | |
2705 src_params->curAtCmd = AT_CMD_VTS; | |
2706 break; | |
2707 } | |
2708 case AT_FAIL: | |
2709 case AT_BUSY: | |
2710 { | |
2711 cmdCmeError (CME_ERR_Unknown); | |
2712 break; | |
2713 } | |
2714 } | |
2715 | |
2716 return (map_aci_2_ati_rslt (ret)); | |
2717 | |
2718 #endif /* no FF_ATI_BAT*/ | |
2719 } | |
2720 | |
2721 | |
2722 /* | |
2723 +--------------------------------------------------------------------+ | |
2724 | PROJECT : GSM-F&D (8411) MODULE : ACI_CMD | | |
2725 | STATE : code ROUTINE : atPlusCSNS | | |
2726 +--------------------------------------------------------------------+ | |
2727 | |
2728 PURPOSE : +CSNS command (single numbering scheme) | |
2729 */ | |
2730 GLOBAL T_ATI_RSLT setatPlusCSNS (char* cl, UBYTE srcId) | |
2731 { | |
2732 T_ACI_CSNS_MOD mode = CSNS_MOD_NotPresent; | |
2733 T_ACI_RETURN ret = AT_FAIL; | |
2734 | |
2735 cl= parse (cl, "d", &mode); | |
2736 if (!cl) | |
2737 { | |
2738 cmdCmeError(CME_ERR_OpNotAllow); | |
2739 return (ATI_FAIL); | |
2740 } | |
2741 | |
2742 #ifdef FF_ATI_BAT | |
2743 { | |
2744 T_BAT_cmd_send cmd; | |
2745 T_BAT_cmd_set_plus_csns my_bat_set_plus_csns; | |
2746 | |
2747 TRACE_FUNCTION("setatPlusCSNS() calls bat_send() <=== as APPLICATION"); | |
2748 | |
2749 memset(&my_bat_set_plus_csns, 0, sizeof(my_bat_set_plus_csns)); | |
2750 cmd.ctrl_params = BAT_CMD_SET_PLUS_CSNS; | |
2751 cmd.params.ptr_set_plus_csns = &my_bat_set_plus_csns; | |
2752 | |
2753 my_bat_set_plus_csns.mode = mode; | |
2754 | |
2755 bat_send(ati_bat_get_client(srcId), &cmd); | |
2756 | |
2757 return ATI_EXCT; /* executing, because response is passed by callback function */ | |
2758 } | |
2759 #else /* OLD FUNCTION BODY */ | |
2760 | |
2761 TRACE_FUNCTION("setatPlusCSNS()"); | |
2762 | |
2763 ret = sAT_PlusCSNS ((T_ACI_CMD_SRC)srcId, mode); | |
2764 if (ret NEQ AT_CMPL) | |
2765 { | |
2766 cmdCmeError(CME_ERR_OpNotAllow); | |
2767 } | |
2768 return (map_aci_2_ati_rslt (ret)); | |
2769 | |
2770 #endif /* no FF_ATI_BAT*/ | |
2771 } | |
2772 | |
2773 GLOBAL T_ATI_RSLT queatPlusCSNS (char* cl, UBYTE srcId) | |
2774 { | |
2775 T_ACI_CSNS_MOD mode = CSNS_MOD_NotPresent; | |
2776 T_ACI_RETURN ret = AT_FAIL; | |
2777 | |
2778 TRACE_FUNCTION("queatPlusCSNS()"); | |
2779 | |
2780 ret = qAT_PlusCSNS ((T_ACI_CMD_SRC)srcId,&mode); | |
2781 | |
2782 if(ret EQ AT_CMPL) | |
2783 { | |
2784 resp_disp (srcId, cl,"e",&mode); | |
2785 } | |
2786 else | |
2787 { | |
2788 cmdCmeError (CME_ERR_Unknown); | |
2789 } | |
2790 return (map_aci_2_ati_rslt (ret)); | |
2791 } | |
2792 #ifdef TI_PS_FF_AT_CMD_P_ECC | |
2793 /* | |
2794 +--------------------------------------------------------------------+ | |
2795 | PROJECT : GSM-F&D (8411) MODULE : ACI_CMD | | |
2796 | STATE : code ROUTINE : setatPercentECC | | |
2797 +--------------------------------------------------------------------+ | |
2798 | |
2799 PURPOSE : %ECC command (set additional ECC numbers) | |
2800 */ | |
2801 | |
2802 GLOBAL T_ATI_RSLT setatPercentECC (char* cl, UBYTE srcId) | |
2803 { | |
2804 T_ACI_RETURN ret = AT_FAIL; | |
2805 U8 index; | |
2806 char ecc_number[ADDITIONAL_ECC_NUMBER_LENGTH+1]; /* +1 for '\0' */ | |
2807 UBYTE idx; | |
2808 T_ATI_SRC_PARAMS *src_params = find_element (ati_src_list, srcId, search_ati_src_id); | |
2809 | |
2810 TRACE_FUNCTION("setatPercentECC()"); | |
2811 | |
2812 memset(ecc_number,0,sizeof(ecc_number)); | |
2813 | |
2814 cl = parse(cl,"ds", | |
2815 &index, | |
2816 (LONG)sizeof(ecc_number), | |
2817 ecc_number); | |
2818 | |
2819 if (cl EQ NULL) | |
2820 { | |
2821 idx = get_parse_index(); /* get the problematic component */ | |
2822 TRACE_EVENT_P1("index %d",idx); | |
2823 switch (idx) | |
2824 { | |
2825 case 1: | |
2826 cmdCmeError(CME_ERR_InvIdx); | |
2827 break; | |
2828 case 2: | |
2829 cmdCmeError(CME_ERR_TxtToLong); | |
2830 break; | |
2831 default: | |
2832 cmdCmeError(CME_ERR_OpNotAllow); | |
2833 break; | |
2834 } | |
2835 return ATI_FAIL; | |
2836 } | |
2837 | |
2838 #ifdef FF_ATI_BAT | |
2839 { | |
2840 T_BAT_cmd_send cmd; | |
2841 T_BAT_cmd_set_percent_ecc ecc; | |
2842 | |
2843 memset(&ecc, 0, sizeof(ecc)); | |
2844 cmd.ctrl_params = BAT_CMD_SET_PERCENT_ECC; | |
2845 cmd.params.ptr_set_percent_ecc = &ecc; | |
2846 ecc.index = index; | |
2847 ecc.c_number = (U8)strlen(ecc_number); | |
2848 memcpy(ecc.number, ecc_number, ecc.c_number); | |
2849 src_params->curAtCmd = AT_CMD_P_ECC; | |
2850 bat_send(ati_bat_get_client(srcId), &cmd); | |
2851 | |
2852 return ATI_EXCT; | |
2853 } | |
2854 #else | |
2855 ret = sAT_PercentECC((T_ACI_CMD_SRC)srcId, index, ecc_number); | |
2856 | |
2857 return (map_aci_2_ati_rslt(ret)); | |
2858 #endif | |
2859 } | |
2860 #endif /* TI_PS_FF_AT_CMD_P_ECC */ | |
2861 | |
2862 /* | |
2863 +--------------------------------------------------------------------+ | |
2864 | PROJECT : GSM-F&D (8411) MODULE : ACI_CMD | | |
2865 | STATE : code ROUTINE : setatPlusCVHU | | |
2866 +--------------------------------------------------------------------+ | |
2867 | |
2868 PURPOSE : +CVHU command (set voice hangup control) | |
2869 */ | |
2870 GLOBAL T_ATI_RSLT setatPlusCVHU (char* cl, UBYTE srcId) | |
2871 { | |
2872 T_ACI_CVHU_MODE mode = CVHU_DropDTR_IGNORED; | |
2873 T_ACI_RETURN ret = AT_FAIL; | |
2874 T_ATI_SRC_PARAMS *src_params = find_element (ati_src_list, srcId, search_ati_src_id); | |
2875 | |
2876 TRACE_FUNCTION("setatPlusCVHU()"); | |
2877 | |
2878 cl= parse (cl,"d",&mode); | |
2879 if(!cl) | |
2880 { | |
2881 cmdCmeError(CME_ERR_OpNotAllow); | |
2882 return (ATI_FAIL); | |
2883 } | |
2884 #ifdef FF_ATI_BAT | |
2885 { | |
2886 T_BAT_cmd_send cmd; | |
2887 T_BAT_cmd_set_plus_cvhu cvhu; | |
2888 | |
2889 memset(&cvhu, 0, sizeof(cvhu)); | |
2890 cmd.ctrl_params = BAT_CMD_SET_PLUS_CVHU; | |
2891 cmd.params.ptr_set_plus_cvhu = &cvhu; | |
2892 cvhu.cvhu_mode = mode; | |
2893 src_params->curAtCmd = AT_CMD_CVHU; | |
2894 bat_send(ati_bat_get_client(srcId), &cmd); | |
2895 | |
2896 return ATI_EXCT; | |
2897 } | |
2898 #else | |
2899 ret= sAT_PlusCVHU ((T_ACI_CMD_SRC)srcId, mode); | |
2900 if (ret NEQ AT_CMPL) | |
2901 { | |
2902 cmdCmeError(CME_ERR_OpNotAllow); | |
2903 } | |
2904 return (map_aci_2_ati_rslt (ret)); | |
2905 #endif | |
2906 } | |
2907 | |
2908 /* | |
2909 +--------------------------------------------------------------------+ | |
2910 | PROJECT : GSM-F&D (8411) MODULE : ACI_CMD | | |
2911 | STATE : code ROUTINE : queatPlusCVHU | | |
2912 +--------------------------------------------------------------------+ | |
2913 | |
2914 PURPOSE : +CVHU command (query voice hangup control) | |
2915 */ | |
2916 GLOBAL T_ATI_RSLT queatPlusCVHU (char* cl, UBYTE srcId) | |
2917 { | |
2918 T_ACI_CVHU_MODE mode = CVHU_DropDTR_IGNORED; | |
2919 T_ACI_RETURN ret = AT_FAIL; | |
2920 T_ATI_SRC_PARAMS *src_params = find_element (ati_src_list, srcId, search_ati_src_id); | |
2921 | |
2922 TRACE_FUNCTION("queatPlusCVHU()"); | |
2923 | |
2924 #ifdef FF_ATI_BAT | |
2925 { | |
2926 T_BAT_cmd_send cmd; | |
2927 T_BAT_no_parameter dummy; | |
2928 | |
2929 TRACE_FUNCTION("queatPlusCVHU() calls bat_send() <=== as APPLICATION"); | |
2930 | |
2931 cmd.ctrl_params = BAT_CMD_QUE_PLUS_CVHU; | |
2932 dummy.bat_dummy = 0xFF; | |
2933 cmd.params.ptr_que_plus_cvhu = &dummy; | |
2934 src_params->curAtCmd = AT_CMD_CVHU; | |
2935 bat_send(ati_bat_get_client(srcId), &cmd); | |
2936 return ATI_EXCT; /* executing, because response is passed by callback function */ | |
2937 } | |
2938 #else /* no FF_ATI_BAT */ | |
2939 ret = qAT_PlusCVHU ((T_ACI_CMD_SRC)srcId, &mode); | |
2940 | |
2941 if(ret EQ AT_CMPL) | |
2942 { | |
2943 resp_disp (srcId, cl, "e", &mode); | |
2944 } | |
2945 else | |
2946 { | |
2947 cmdCmeError (CME_ERR_Unknown); | |
2948 } | |
2949 return (map_aci_2_ati_rslt (ret)); | |
2950 #endif /* FF_ATI_BAT */ | |
2951 } | |
2952 #endif /* ATI_CC_C */ | |
2953 |