FreeCalypso > hg > leo2moko-debug
comparison g23m/condat/ms/src/aci/ati_gprs.c @ 0:509db1a7b7b8
initial import: leo2moko-r1
author | Space Falcon <falcon@ivan.Harhan.ORG> |
---|---|
date | Mon, 01 Jun 2015 03:24:05 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:509db1a7b7b8 |
---|---|
1 /* | |
2 +----------------------------------------------------------------------------- | |
3 | Project : | |
4 | Modul : | |
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 : GPRS AT Command Handler. | |
18 +----------------------------------------------------------------------------- | |
19 */ | |
20 | |
21 #if defined (GPRS) && defined (DTI) | |
22 | |
23 #ifndef GACI_CMD_C | |
24 #define GACI_CMD_C | |
25 #endif | |
26 | |
27 #undef DUMMY_ATI_STRINGS | |
28 | |
29 #include "aci_all.h" | |
30 | |
31 /*includes*/ | |
32 #include "dti.h" /* functionality of the dti library */ | |
33 #include "aci_cmh.h" | |
34 #include "ati_cmd.h" | |
35 #include "aci_io.h" | |
36 #include "aci_cmd.h" | |
37 #include "aci_lst.h" | |
38 #include "l4_tim.h" | |
39 | |
40 #include "gdi.h" | |
41 #include "audio.h" | |
42 #include "p_sim.h" | |
43 #include "p_aci.h" | |
44 #include "aoc.h" | |
45 #include "aci.h" | |
46 #include "pcm.h" | |
47 #include "rx.h" | |
48 #include "pwr.h" | |
49 | |
50 #include "dti_conn_mng.h" | |
51 #include "dti_cntrl_mng.h" | |
52 | |
53 #include "gaci.h" | |
54 #include "gaci_cmh.h" | |
55 #include "psa.h" | |
56 #include "psa_sm.h" | |
57 | |
58 #ifdef FAX_AND_DATA | |
59 //#include "aci_fd.h" | |
60 #endif | |
61 | |
62 #include "cmh.h" | |
63 #include "cmh_sm.h" | |
64 | |
65 #include "aci_io.h" | |
66 #include "aci_mem.h" | |
67 | |
68 #if defined(FF_WAP) OR defined (FF_GPF_TCPIP) || defined (FF_SAT_E) | |
69 #include "gaci_srcc.h" | |
70 #include "psa_tcpip.h" | |
71 #include "wap_aci.h" | |
72 #endif /* defined(WAP) OR defined (FF_GPF_TCPIP) || defined (FF_SAT_E)*/ | |
73 | |
74 #include "gaci_cmd.h" | |
75 #include "aci_prs.h" | |
76 | |
77 #include "ati_int.h" | |
78 | |
79 #include "dcm_f.h" | |
80 | |
81 #ifdef FF_ATI_BAT | |
82 | |
83 #include "typedefs.h" | |
84 #include "gdd.h" | |
85 #include "bat.h" | |
86 | |
87 #include "ati_bat.h" | |
88 | |
89 #endif /*FF_ATI_BAT*/ | |
90 | |
91 EXTERN char *cmdErrStr; | |
92 EXTERN T_ACI_LIST *ati_src_list; | |
93 | |
94 GLOBAL T_ATI_RSLT setatPlusCGDCONT (char *cl, UBYTE srcId); | |
95 GLOBAL T_ATI_RSLT setatPlusCGQREQ (char *cl, UBYTE srcId); | |
96 GLOBAL T_ATI_RSLT setatPlusCGQMIN (char *cl, UBYTE srcId); | |
97 GLOBAL T_ATI_RSLT setatPlusCGATT (char *cl, UBYTE srcId); | |
98 GLOBAL T_ATI_RSLT setatPlusCGACT (char *cl, UBYTE srcId); | |
99 GLOBAL T_ATI_RSLT setatPlusCGDATA (char *cl, UBYTE srcId); | |
100 GLOBAL T_ATI_RSLT setatPlusCGPADDR (char *cl, UBYTE srcId); | |
101 GLOBAL T_ATI_RSLT setatPlusCGAUTO (char *cl, UBYTE srcId); | |
102 GLOBAL T_ATI_RSLT setatPlusCGANS (char *cl, UBYTE srcId); | |
103 GLOBAL T_ATI_RSLT setatPlusCGCLASS (char *cl, UBYTE srcId); | |
104 GLOBAL T_ATI_RSLT setatPlusCGEREP (char *cl, UBYTE srcId); | |
105 GLOBAL T_ATI_RSLT setatPlusCGREG (char *cl, UBYTE srcId); | |
106 GLOBAL T_ATI_RSLT setatPlusCGSMS (char *cl, UBYTE srcId); | |
107 GLOBAL T_ATI_RSLT setatPercentCGEREP (char *cl, UBYTE srcId); | |
108 | |
109 GLOBAL T_ATI_RSLT queatPlusCGDCONT (char *cl, UBYTE srcId); | |
110 GLOBAL T_ATI_RSLT queatPlusCGQREQ (char *cl, UBYTE srcId); | |
111 GLOBAL T_ATI_RSLT queatPlusCGQMIN (char *cl, UBYTE srcId); | |
112 GLOBAL T_ATI_RSLT queatPlusCGATT (char *cl, UBYTE srcId); | |
113 GLOBAL T_ATI_RSLT queatPlusCGACT (char *cl, UBYTE srcId); | |
114 GLOBAL T_ATI_RSLT queatPlusCGAUTO (char *cl, UBYTE srcId); | |
115 GLOBAL T_ATI_RSLT queatPlusCGCLASS (char *cl, UBYTE srcId); | |
116 GLOBAL T_ATI_RSLT queatPlusCGEREP (char *cl, UBYTE srcId); | |
117 GLOBAL T_ATI_RSLT queatPlusCGREG (char *cl, UBYTE srcId); | |
118 GLOBAL T_ATI_RSLT queatPlusCGSMS (char *cl, UBYTE srcId); | |
119 GLOBAL T_ATI_RSLT queatPercentCGEREP (char *cl, UBYTE srcId); | |
120 | |
121 GLOBAL T_ATI_RSLT tesatPlusCGDCONT (char *cl, UBYTE srcId); | |
122 GLOBAL T_ATI_RSLT tesatPlusCGPADDR (char *cl, UBYTE srcId); | |
123 GLOBAL T_ATI_RSLT tesatPlusCGSMS (char *cl, UBYTE srcId); | |
124 | |
125 GLOBAL T_ATI_RSLT atGD (char *cl, UBYTE srcId, BOOL *gprs_command); | |
126 | |
127 GLOBAL T_ATI_RSLT setatPercentCGAATT (char *cl, UBYTE srcId); | |
128 GLOBAL T_ATI_RSLT queatPercentCGAATT (char *cl, UBYTE srcId); | |
129 | |
130 GLOBAL T_ATI_RSLT setatPercentCGREG (char *cl, UBYTE srcId); | |
131 GLOBAL T_ATI_RSLT queatPercentCGREG (char *cl, UBYTE srcId); | |
132 GLOBAL T_ATI_RSLT queatPercentCGPCO (UBYTE srcId,USHORT cid); | |
133 GLOBAL T_ATI_RSLT setatPercentCGCLASS (CHAR *cl, UBYTE srcId); | |
134 GLOBAL T_ATI_RSLT queatPercentCGCLASS (CHAR *cl, UBYTE srcId); | |
135 /* | |
136 +------------------------------------------------------------------------------------+ | |
137 | PROJECT : GPRS (8441) MODULE : GACI_CMD | | |
138 | STATE : finnished ROUTINE : gaci_ati_cmd_init_each_source | | |
139 +------------------------------------------------------------------------------------+ | |
140 | |
141 PURPOSE : initialize GACI relevant ATI parameters. | |
142 */ | |
143 | |
144 GLOBAL void gaci_ati_cmd_init_each_source( UBYTE srcId ) | |
145 { | |
146 /* init +CGREG param */ | |
147 ati_creg_init(srcId, PlusCGREG_CMD); | |
148 | |
149 /* init %CGREG param */ | |
150 ati_creg_init(srcId, PercentCGREG_CMD); | |
151 | |
152 /* init %CGEREP param */ | |
153 ati_user_output_cfg[srcId].Percent_CGEREP_stat = 0; | |
154 ati_user_output_cfg[srcId].CGEREP_mode = 0; | |
155 ati_user_output_cfg[srcId].CGEREP_bfr = 0; | |
156 } | |
157 | |
158 /* | |
159 +--------------------------------------------------------------------+ | |
160 | PROJECT : GPRS (8441) MODULE : GACI_CMD | | |
161 | STATE : finnished ROUTINE : atPlusCGDCONT | | |
162 +--------------------------------------------------------------------+ | |
163 | |
164 PURPOSE : +CGDCONT command ( PDP context definition ) | |
165 */ | |
166 | |
167 #define MAGIC_EMPTY_APN "\x0ff" | |
168 | |
169 GLOBAL T_ATI_RSLT setatPlusCGDCONT (char *cl, UBYTE srcId) | |
170 { | |
171 T_ACI_RETURN ret = AT_FAIL; | |
172 T_GPRS_CONT_REC inputCtxt = {MAGIC_EMPTY_APN, | |
173 "", | |
174 "", | |
175 CGDCONT_D_COMP_OMITTED, | |
176 CGDCONT_H_COMP_OMITTED, | |
177 {GPRS_QOS_OMITTED, GPRS_QOS_OMITTED, GPRS_QOS_OMITTED, GPRS_QOS_OMITTED, GPRS_QOS_OMITTED}, | |
178 {GPRS_QOS_OMITTED, GPRS_QOS_OMITTED, GPRS_QOS_OMITTED, GPRS_QOS_OMITTED, GPRS_QOS_OMITTED} }; | |
179 SHORT cid = GPRS_CID_OMITTED; | |
180 T_ATI_SRC_PARAMS *src_params = find_element (ati_src_list, srcId, search_ati_src_id); | |
181 | |
182 TRACE_FUNCTION("setatPlusCGDCONT ()"); | |
183 | |
184 cl=parse(cl,"rsssrr",&cid | |
185 ,(LONG)MAX_PDP_TYPE_LEN, inputCtxt.pdp_type | |
186 ,(LONG)MAX_APN_LEN, inputCtxt.apn | |
187 ,(LONG)MAX_PDP_ADDR_LEN, inputCtxt.pdp_addr | |
188 ,&inputCtxt.d_comp | |
189 ,&inputCtxt.h_comp); | |
190 | |
191 if (!strcmp(inputCtxt.apn, MAGIC_EMPTY_APN)) | |
192 { | |
193 /* if APN was ommitted then parse leaves the string untouched */ | |
194 inputCtxt.apn[0]='\0'; /* so clear the apn */ | |
195 } | |
196 else if (inputCtxt.apn[0] EQ '\0') | |
197 { | |
198 /* if entered APN was "", parse clears the buffer */ | |
199 strcpy(inputCtxt.apn, MAGIC_EMPTY_APN); /* fill magic empty apn */ | |
200 } | |
201 | |
202 if ( !cl ) | |
203 { | |
204 cmdCmeError(CME_ERR_OpNotAllow); | |
205 return (ATI_FAIL); | |
206 } | |
207 | |
208 #ifdef FF_ATI_BAT | |
209 | |
210 { | |
211 T_BAT_cmd_send cmd; | |
212 T_BAT_cmd_set_plus_cgdcont cgdcont; | |
213 UBYTE len; | |
214 | |
215 cmd.ctrl_params = BAT_CMD_SET_PLUS_CGDCONT; | |
216 cmd.params.ptr_set_plus_cgdcont=&cgdcont; | |
217 | |
218 cgdcont.cid=(T_BAT_pdp_cid)cid; | |
219 | |
220 if (utl_strcasecmp((const char *)inputCtxt.pdp_type, (const char *)"ip")) | |
221 cgdcont.pdp_type=BAT_PDP_TYPE_NOT_PRESENT; | |
222 else | |
223 cgdcont.pdp_type=BAT_PDP_TYPE_IPV4; | |
224 | |
225 len=strlen(inputCtxt.apn); | |
226 | |
227 if (len<=BAT_MAX_APN_LEN) | |
228 { | |
229 cgdcont.v_apn=TRUE; | |
230 cgdcont.c_apn=(U8)len; | |
231 memcpy(cgdcont.apn,inputCtxt.apn,len); | |
232 } | |
233 else | |
234 { | |
235 cgdcont.v_apn=FALSE; | |
236 } | |
237 | |
238 len=strlen(inputCtxt.pdp_addr); | |
239 | |
240 if (len<=BAT_MAX_PDP_ADD) | |
241 { | |
242 cgdcont.v_pdp_addr=TRUE; | |
243 cgdcont.c_pdp_addr=(U8)len; | |
244 memcpy(cgdcont.pdp_addr,inputCtxt.pdp_addr,len); | |
245 } | |
246 else | |
247 { | |
248 cgdcont.v_pdp_addr=FALSE; | |
249 } | |
250 | |
251 cgdcont.d_comp=(T_BAT_plus_cgdcont_d_comp)inputCtxt.d_comp; | |
252 cgdcont.h_comp=(T_BAT_plus_cgdcont_h_comp)inputCtxt.h_comp; | |
253 | |
254 bat_send(ati_bat_get_client(srcId), &cmd); | |
255 | |
256 src_params->curAtCmd=AT_CMD_CGDCONT; | |
257 return(ATI_EXCT); | |
258 } | |
259 | |
260 #else | |
261 | |
262 ret = sAT_PlusCGDCONT (srcId, cid ,&inputCtxt); | |
263 switch (ret) | |
264 { | |
265 case (AT_CMPL): /*operation completed*/ | |
266 return (ATI_CMPL); | |
267 case (AT_EXCT): | |
268 src_params->curAtCmd = AT_CMD_CGDCONT; | |
269 return (ATI_EXCT); | |
270 default: | |
271 cmdCmeError(CME_ERR_Unknown); /*Command failed*/ | |
272 return (ATI_FAIL); | |
273 } | |
274 | |
275 #endif | |
276 } | |
277 | |
278 GLOBAL T_ATI_RSLT queatPlusCGDCONT (char *cl, UBYTE srcId) | |
279 { | |
280 #ifndef FF_ATI_BAT | |
281 char *me="+CGDCONT: "; | |
282 T_ACI_RETURN ret = AT_FAIL; | |
283 T_GPRS_CONT_REC defCtxts[MAX_CID_PLUS_EINS]; | |
284 SHORT cid_array[MAX_CID_PLUS_EINS]; | |
285 int i = 0, pos = 0, pos2 = 0; | |
286 #endif | |
287 | |
288 TRACE_FUNCTION("queatPlusCGDCONT ()"); | |
289 | |
290 #ifdef FF_ATI_BAT | |
291 { | |
292 T_BAT_cmd_send cmd; | |
293 T_BAT_no_parameter dummy; | |
294 | |
295 cmd.ctrl_params = BAT_CMD_QUE_PLUS_CGDCONT; | |
296 dummy.bat_dummy = 0xFF; | |
297 cmd.params.ptr_que_plus_cgdcont = &dummy; | |
298 bat_send(ati_bat_get_client(srcId), &cmd); | |
299 return(ATI_EXCT); | |
300 } | |
301 #else | |
302 | |
303 ret = qAT_PlusCGDCONT (srcId, &defCtxts, cid_array); | |
304 if (ret EQ AT_CMPL) | |
305 { | |
306 for ( i = 0; i < MAX_CID && cid_array[i] NEQ INVALID_CID; i++ ) | |
307 { | |
308 if (!strcmp(defCtxts[i].apn, MAGIC_EMPTY_APN)) /* special empty APN detected, printout "" */ | |
309 { | |
310 sprintf(g_sa,"%s%hd,\"%s\",\"\",\"%s\",%hd,%hd", | |
311 me, | |
312 cid_array[i], | |
313 defCtxts[i].pdp_type, | |
314 /* defCtxts[i].apn, */ | |
315 defCtxts[i].pdp_addr, | |
316 defCtxts[i].d_comp, | |
317 defCtxts[i].h_comp ); | |
318 } | |
319 | |
320 else if (defCtxts[i].apn[0] == '\0') | |
321 { /* no APN defined, printout nothing */ | |
322 sprintf(g_sa,"%s%hd,\"%s\",,\"%s\",%hd,%hd", | |
323 me, | |
324 cid_array[i], | |
325 defCtxts[i].pdp_type, | |
326 /* defCtxts[i].apn, */ | |
327 defCtxts[i].pdp_addr, | |
328 defCtxts[i].d_comp, | |
329 defCtxts[i].h_comp ); | |
330 } | |
331 else | |
332 { /* normal, printout the "apn" */ | |
333 sprintf(g_sa,"%s%hd,\"%s\",\"%s\",\"%s\",%hd,%hd", | |
334 me, | |
335 cid_array[i], | |
336 defCtxts[i].pdp_type, | |
337 defCtxts[i].apn, | |
338 defCtxts[i].pdp_addr, | |
339 defCtxts[i].d_comp, | |
340 defCtxts[i].h_comp ); | |
341 } | |
342 io_sendMessage(srcId, g_sa, ATI_NORMAL_OUTPUT); | |
343 } | |
344 return (ATI_CMPL); | |
345 } | |
346 else | |
347 { | |
348 cmdCmeError(CME_ERR_Unknown); | |
349 return (ATI_FAIL); | |
350 } | |
351 | |
352 #endif /*FF_ATI_BAT*/ | |
353 } | |
354 | |
355 | |
356 GLOBAL T_ATI_RSLT tesatPlusCGDCONT (char *cl, UBYTE srcId) | |
357 { | |
358 char *me="+CGDCONT: "; | |
359 | |
360 sprintf(g_sa,"%s(1-%d),\"IP\",,,(0),(0,1)", | |
361 me, MAX_CID ); | |
362 | |
363 io_sendMessage(srcId, g_sa, ATI_NORMAL_OUTPUT); | |
364 return (ATI_CMPL); | |
365 } | |
366 | |
367 /* | |
368 +--------------------------------------------------------------------+ | |
369 | PROJECT : GPRS (8441) MODULE : GACI_CMD | | |
370 | STATE : finnished ROUTINE : atPlusCGQREQ | | |
371 +--------------------------------------------------------------------+ | |
372 | |
373 PURPOSE : +CGQREQ command (context QOS request) | |
374 */ | |
375 | |
376 GLOBAL T_ATI_RSLT setatPlusCGQREQ (char *cl, UBYTE srcId) | |
377 { | |
378 T_ACI_RETURN ret = AT_FAIL; | |
379 T_QOS input_qos = { ( UBYTE ) GPRS_QOS_OMITTED }; | |
380 SHORT cid = GPRS_CID_OMITTED; | |
381 T_ATI_SRC_PARAMS *src_params = find_element (ati_src_list, srcId, search_ati_src_id); | |
382 | |
383 TRACE_FUNCTION("setatPlusCGQREQ ()"); | |
384 | |
385 cl=parse(cl,"raaaar",&cid | |
386 ,1L ,&input_qos.preced | |
387 ,1L ,&input_qos.delay | |
388 ,1L ,&input_qos.relclass | |
389 ,1L ,&input_qos.peak | |
390 ,&input_qos.mean); | |
391 | |
392 if (cl EQ NULL) | |
393 { | |
394 cmdCmeError(CME_ERR_OpNotAllow); | |
395 return (ATI_FAIL); | |
396 } | |
397 | |
398 if ( input_qos.preced NEQ GPRS_QOS_OMITTED ) | |
399 input_qos.preced -= '0'; | |
400 if ( input_qos.delay NEQ GPRS_QOS_OMITTED ) | |
401 input_qos.delay -= '0'; | |
402 if ( input_qos.relclass NEQ GPRS_QOS_OMITTED ) | |
403 input_qos.relclass -= '0'; | |
404 if ( input_qos.peak NEQ GPRS_QOS_OMITTED ) | |
405 input_qos.peak -= '0'; | |
406 if ( input_qos.mean EQ 0xff ) | |
407 input_qos.mean = 0; | |
408 | |
409 #ifdef FF_ATI_BAT | |
410 | |
411 { | |
412 T_BAT_cmd_send cmd; | |
413 T_BAT_cmd_set_plus_cgqreq cgqreq; | |
414 | |
415 cmd.ctrl_params = BAT_CMD_SET_PLUS_CGQREQ; | |
416 cmd.params.ptr_set_plus_cgqreq=&cgqreq; | |
417 | |
418 cgqreq.cid=(T_BAT_pdp_cid)cid; | |
419 /* | |
420 if (input_qos.preced!=GPRS_QOS_OMITTED) | |
421 cgqreq.precedence=(T_BAT_precedence)input_qos.preced; | |
422 else | |
423 cgqreq.precedence=BAT_PRECEDENCE_NOT_PRESENT; | |
424 | |
425 if (input_qos.delay!=GPRS_QOS_OMITTED) | |
426 cgqreq.delay=(T_BAT_delay)input_qos.delay; | |
427 else | |
428 cgqreq.delay=BAT_DELAY_NOT_PRESENT; | |
429 | |
430 if (input_qos.relclass!=GPRS_QOS_OMITTED) | |
431 cgqreq.reliability=(T_BAT_reliability)input_qos.relclass; | |
432 else | |
433 cgqreq.reliability=BAT_RELIABILITY_NOT_PRESENT; | |
434 | |
435 if (input_qos.peak!=GPRS_QOS_OMITTED) | |
436 cgqreq.peak=(T_BAT_peak)input_qos.peak; | |
437 else | |
438 cgqreq.peak=BAT_PEAK_NOT_PRESENT; | |
439 | |
440 if (input_qos.mean) | |
441 cgqreq.mean=(T_BAT_mean)input_qos.mean; | |
442 else | |
443 cgqreq.mean=BAT_MEAN_NOT_PRESENT; | |
444 */ | |
445 | |
446 cgqreq.precedence = (T_BAT_precedence)input_qos.preced; | |
447 cgqreq.delay = (T_BAT_delay)input_qos.delay; | |
448 cgqreq.reliability = (T_BAT_reliability)input_qos.relclass; | |
449 cgqreq.peak = (T_BAT_peak)input_qos.peak; | |
450 cgqreq.mean = (T_BAT_mean)input_qos.mean; | |
451 | |
452 bat_send(ati_bat_get_client(srcId), &cmd); | |
453 | |
454 src_params->curAtCmd=AT_CMD_CGQREQ; | |
455 return(ATI_EXCT); | |
456 } | |
457 | |
458 #else | |
459 | |
460 ret = sAT_PlusCGQREQ (srcId, cid ,&input_qos); | |
461 switch (ret) | |
462 { | |
463 case (AT_CMPL): /*operation completed*/ | |
464 return (ATI_CMPL); | |
465 case (AT_EXCT): | |
466 src_params->curAtCmd = AT_CMD_CGQREQ; | |
467 return (ATI_EXCT); | |
468 default: | |
469 cmdCmeError(CME_ERR_Unknown); /*Command failed*/ | |
470 return (ATI_FAIL); | |
471 } | |
472 | |
473 #endif | |
474 } | |
475 | |
476 GLOBAL T_ATI_RSLT queatPlusCGQREQ (char *cl, UBYTE srcId) | |
477 { | |
478 #ifndef FF_ATI_BAT | |
479 char *me="+CGQREQ: "; | |
480 T_ACI_RETURN ret = AT_FAIL; | |
481 T_QOS *pdef_qos[MAX_CID_PLUS_EINS]; | |
482 SHORT cid_array[MAX_CID_PLUS_EINS]; | |
483 int i = 0; | |
484 #endif | |
485 | |
486 TRACE_FUNCTION("queatPlusCGQREQ ()"); | |
487 | |
488 #ifdef FF_ATI_BAT | |
489 { | |
490 T_BAT_cmd_send cmd; | |
491 T_BAT_no_parameter dummy; | |
492 | |
493 cmd.ctrl_params = BAT_CMD_QUE_PLUS_CGQREQ; | |
494 dummy.bat_dummy = 0xFF; | |
495 cmd.params.ptr_que_plus_cgqreq = &dummy; | |
496 bat_send(ati_bat_get_client(srcId), &cmd); | |
497 return(ATI_EXCT); | |
498 } | |
499 #else | |
500 | |
501 ret=qAT_PlusCGQREQ (srcId, pdef_qos, cid_array); | |
502 if (ret EQ AT_CMPL) | |
503 { | |
504 for ( i = 0; i < MAX_CID && pdef_qos[i]; i++ ) | |
505 { | |
506 sprintf(g_sa,"%s%hd,%d,%d,%d,%d,%d", me, cid_array[i], | |
507 pdef_qos[i]->preced, | |
508 pdef_qos[i]->delay, | |
509 pdef_qos[i]->relclass, | |
510 pdef_qos[i]->peak, | |
511 pdef_qos[i]->mean ); | |
512 | |
513 io_sendMessage(srcId, g_sa, ATI_NORMAL_OUTPUT); | |
514 } | |
515 } | |
516 else | |
517 { | |
518 cmdCmeError(CME_ERR_Unknown); | |
519 return (ATI_FAIL); | |
520 } | |
521 | |
522 return (map_aci_2_ati_rslt(ret)); | |
523 | |
524 #endif | |
525 } | |
526 | |
527 /* | |
528 +--------------------------------------------------------------------+ | |
529 | PROJECT : GPRS (8441) MODULE : GACI_CMD | | |
530 | STATE : finished ROUTINE : atPlusCGQMIN | | |
531 +--------------------------------------------------------------------+ | |
532 | |
533 PURPOSE : +CGQMIN command (context min QOS requirement) | |
534 */ | |
535 | |
536 GLOBAL T_ATI_RSLT setatPlusCGQMIN (char *cl, UBYTE srcId) | |
537 { | |
538 T_ACI_RETURN ret = AT_FAIL; | |
539 T_QOS input_qos = { ( UBYTE ) GPRS_QOS_OMITTED }; | |
540 SHORT cid = GPRS_CID_OMITTED; | |
541 T_ATI_SRC_PARAMS *src_params = find_element (ati_src_list, srcId, search_ati_src_id); | |
542 | |
543 TRACE_FUNCTION("setatPlusCGQMIN ()"); | |
544 | |
545 cl=parse(cl,"raaaar",&cid | |
546 ,1L ,&input_qos.preced | |
547 ,1L ,&input_qos.delay | |
548 ,1L ,&input_qos.relclass | |
549 ,1L ,&input_qos.peak | |
550 ,&input_qos.mean); | |
551 | |
552 if ( input_qos.preced NEQ GPRS_QOS_OMITTED ) | |
553 input_qos.preced -= '0'; | |
554 if ( input_qos.delay NEQ GPRS_QOS_OMITTED ) | |
555 input_qos.delay -= '0'; | |
556 if ( input_qos.relclass NEQ GPRS_QOS_OMITTED ) | |
557 input_qos.relclass -= '0'; | |
558 if ( input_qos.peak NEQ GPRS_QOS_OMITTED ) | |
559 input_qos.peak -= '0'; | |
560 | |
561 if ( input_qos.mean EQ 0xff ) | |
562 input_qos.mean = 0; | |
563 | |
564 if ( !cl ) | |
565 { | |
566 cmdCmeError(CME_ERR_OpNotAllow); | |
567 return (ATI_FAIL); | |
568 } | |
569 | |
570 #ifdef FF_ATI_BAT | |
571 | |
572 { | |
573 T_BAT_cmd_send cmd; | |
574 T_BAT_cmd_set_plus_cgqmin cgqmin; | |
575 | |
576 cmd.ctrl_params = BAT_CMD_SET_PLUS_CGQMIN; | |
577 cmd.params.ptr_set_plus_cgqmin=&cgqmin; | |
578 | |
579 cgqmin.cid=(T_BAT_pdp_cid)cid; | |
580 /* | |
581 if (input_qos.preced!=GPRS_QOS_OMITTED) | |
582 cgqmin.precedence=(T_BAT_precedence)input_qos.preced; | |
583 else | |
584 cgqmin.precedence=BAT_PRECEDENCE_NOT_PRESENT; | |
585 | |
586 if (input_qos.delay!=GPRS_QOS_OMITTED) | |
587 cgqmin.delay=(T_BAT_delay)input_qos.delay; | |
588 else | |
589 cgqmin.delay=BAT_DELAY_NOT_PRESENT; | |
590 | |
591 if (input_qos.relclass!=GPRS_QOS_OMITTED) | |
592 cgqmin.reliability=(T_BAT_reliability)input_qos.relclass; | |
593 else | |
594 cgqmin.reliability=BAT_RELIABILITY_NOT_PRESENT; | |
595 | |
596 if (input_qos.peak!=GPRS_QOS_OMITTED) | |
597 cgqmin.peak=(T_BAT_peak)input_qos.peak; | |
598 else | |
599 cgqmin.peak=BAT_PEAK_NOT_PRESENT; | |
600 | |
601 if (input_qos.mean) | |
602 cgqmin.mean=(T_BAT_mean)input_qos.mean; | |
603 else | |
604 cgqmin.mean=BAT_MEAN_NOT_PRESENT; | |
605 */ | |
606 | |
607 cgqmin.precedence = (T_BAT_precedence)input_qos.preced; | |
608 cgqmin.delay = (T_BAT_delay)input_qos.delay; | |
609 cgqmin.reliability = (T_BAT_reliability)input_qos.relclass; | |
610 cgqmin.peak = (T_BAT_peak)input_qos.peak; | |
611 cgqmin.mean = (T_BAT_mean)input_qos.mean; | |
612 | |
613 bat_send(ati_bat_get_client(srcId), &cmd); | |
614 | |
615 src_params->curAtCmd=AT_CMD_CGQMIN; | |
616 return(ATI_EXCT); | |
617 } | |
618 | |
619 #else | |
620 | |
621 ret = sAT_PlusCGQMIN (srcId, cid ,&input_qos); | |
622 switch (ret) | |
623 { | |
624 case (AT_CMPL): /*operation completed*/ | |
625 return (ATI_CMPL); | |
626 case (AT_EXCT): | |
627 src_params->curAtCmd = AT_CMD_CGQMIN; | |
628 return (ATI_EXCT); | |
629 default: | |
630 cmdCmeError(CME_ERR_Unknown); /*Command failed*/ | |
631 return (ATI_FAIL); | |
632 } | |
633 #endif | |
634 } | |
635 | |
636 GLOBAL T_ATI_RSLT queatPlusCGQMIN (char *cl, UBYTE srcId) | |
637 { | |
638 #ifndef FF_ATI_BAT | |
639 char *me="+CGQMIN: "; | |
640 T_ACI_RETURN ret = AT_FAIL; | |
641 T_QOS *pdef_qos[MAX_CID_PLUS_EINS]; | |
642 SHORT cid_array[MAX_CID_PLUS_EINS]; | |
643 int i = 0; | |
644 #endif | |
645 | |
646 TRACE_FUNCTION("queatPlusCGQMIN ()"); | |
647 | |
648 #ifdef FF_ATI_BAT | |
649 { | |
650 T_BAT_cmd_send cmd; | |
651 T_BAT_no_parameter dummy; | |
652 | |
653 cmd.ctrl_params = BAT_CMD_QUE_PLUS_CGQMIN; | |
654 dummy.bat_dummy = 0xFF; | |
655 cmd.params.ptr_que_plus_cgqmin = &dummy; | |
656 | |
657 bat_send(ati_bat_get_client(srcId), &cmd); | |
658 | |
659 return(ATI_EXCT); | |
660 } | |
661 #else | |
662 | |
663 ret=qAT_PlusCGQMIN (srcId, pdef_qos, cid_array); | |
664 if (ret EQ AT_CMPL) | |
665 { | |
666 for ( i = 0; i < MAX_CID && pdef_qos[i]; i++ ) | |
667 { | |
668 sprintf(g_sa,"%s%hd,%d,%d,%d,%d,%d", me, cid_array[i], | |
669 pdef_qos[i]->preced, | |
670 pdef_qos[i]->delay, | |
671 pdef_qos[i]->relclass, | |
672 pdef_qos[i]->peak, | |
673 pdef_qos[i]->mean ); | |
674 | |
675 io_sendMessage(srcId, g_sa, ATI_NORMAL_OUTPUT); | |
676 } | |
677 } | |
678 else | |
679 { | |
680 cmdCmeError(CME_ERR_Unknown); | |
681 return (ATI_FAIL); | |
682 } | |
683 | |
684 return (map_aci_2_ati_rslt(ret)); | |
685 | |
686 #endif /*FF_ATI_BAT*/ | |
687 } | |
688 | |
689 /* | |
690 +--------------------------------------------------------------------+ | |
691 | PROJECT : GPRS (8441) MODULE : GACI_CMD | | |
692 | STATE : finished ROUTINE : atPlusCGATT | | |
693 +--------------------------------------------------------------------+ | |
694 | |
695 PURPOSE : +CGATT command ( GPRS attach/detach ) | |
696 */ | |
697 | |
698 GLOBAL T_ATI_RSLT setatPlusCGATT (char *cl, UBYTE srcId) | |
699 { | |
700 T_ACI_RETURN ret = AT_FAIL; | |
701 T_CGATT_STATE state = CGATT_STATE_OMITTED; | |
702 T_ATI_SRC_PARAMS *src_params = find_element (ati_src_list, srcId, search_ati_src_id); | |
703 | |
704 TRACE_FUNCTION("setatPlusCGATT ()"); | |
705 | |
706 cl=parse(cl,"d",&state); | |
707 | |
708 if ( !cl ) | |
709 { | |
710 cmdCmeError(CME_ERR_OpNotAllow); | |
711 return (ATI_FAIL); | |
712 } | |
713 | |
714 #ifdef FF_ATI_BAT | |
715 | |
716 { | |
717 T_BAT_cmd_send cmd; | |
718 T_BAT_cmd_set_plus_cgatt cgatt; | |
719 | |
720 cmd.ctrl_params = BAT_CMD_SET_PLUS_CGATT; | |
721 cmd.params.ptr_set_plus_cgatt=&cgatt; | |
722 | |
723 /* | |
724 * This relies on T_CGATT_STATE being identical to | |
725 * T_BAT_plus_cgatt_state. | |
726 */ | |
727 cgatt.state=(T_BAT_plus_cgatt_state)state; | |
728 | |
729 bat_send(ati_bat_get_client(srcId), &cmd); | |
730 | |
731 src_params->curAtCmd=AT_CMD_CGATT; | |
732 return(ATI_EXCT); | |
733 } | |
734 | |
735 #else | |
736 | |
737 ret = sAT_PlusCGATT ( srcId, state ); | |
738 switch (ret) | |
739 { | |
740 case (AT_CMPL): /*operation completed*/ | |
741 return (ATI_CMPL); | |
742 case (AT_EXCT): | |
743 src_params->curAtCmd = AT_CMD_CGATT; | |
744 return (ATI_EXCT); | |
745 default: | |
746 cmdCmeError(CME_ERR_Unknown); /*Command failed*/ | |
747 return (ATI_FAIL); | |
748 } | |
749 | |
750 #endif /*FF_ATI_BAT*/ | |
751 } | |
752 | |
753 GLOBAL T_ATI_RSLT queatPlusCGATT (char *cl, UBYTE srcId) | |
754 { | |
755 #ifndef FF_ATI_BAT | |
756 char *me="+CGATT: "; | |
757 T_ACI_RETURN ret = AT_FAIL; | |
758 T_CGATT_STATE state = CGATT_STATE_OMITTED; | |
759 #endif | |
760 | |
761 TRACE_FUNCTION("queatPlusCGATT ()"); | |
762 | |
763 #ifdef FF_ATI_BAT | |
764 { | |
765 T_BAT_cmd_send cmd; | |
766 T_BAT_no_parameter dummy; | |
767 | |
768 cmd.ctrl_params = BAT_CMD_QUE_PLUS_CGATT; | |
769 dummy.bat_dummy = 0xFF; | |
770 cmd.params.ptr_que_plus_cgatt = &dummy; | |
771 | |
772 bat_send(ati_bat_get_client(srcId), &cmd); | |
773 | |
774 return(ATI_EXCT); | |
775 } | |
776 #else | |
777 | |
778 ret = qAT_PlusCGATT(srcId, &state); | |
779 if (ret EQ AT_CMPL) | |
780 { | |
781 sprintf(g_sa,"%s%d", me, state); | |
782 io_sendMessage(srcId, g_sa, ATI_NORMAL_OUTPUT); | |
783 } | |
784 else | |
785 { | |
786 cmdCmeError(CME_ERR_Unknown); | |
787 return (ATI_FAIL); | |
788 } | |
789 | |
790 return (map_aci_2_ati_rslt(ret)); | |
791 | |
792 #endif /*FF_ATI_BAT*/ | |
793 } | |
794 | |
795 | |
796 /* | |
797 +--------------------------------------------------------------------+ | |
798 | PROJECT : GPRS (8441) MODULE : GACI_CMD | | |
799 | STATE : finished ROUTINE : atPlusCGCLASS | | |
800 +--------------------------------------------------------------------+ | |
801 | |
802 PURPOSE : +CGCLASS command (GPRS class change) | |
803 */ | |
804 | |
805 GLOBAL T_ATI_RSLT setatPlusCGCLASS (char *cl, UBYTE srcId) | |
806 { | |
807 char *me="+CGCLASS: "; | |
808 T_ACI_RETURN ret = AT_FAIL; | |
809 T_CGCLASS_CLASS m_class = CGCLASS_CLASS_OMITTED; | |
810 char test_class[3]=""; | |
811 T_ATI_SRC_PARAMS *src_params = find_element (ati_src_list, srcId, search_ati_src_id); | |
812 | |
813 TRACE_FUNCTION("atPlusCGCLASS ()"); | |
814 | |
815 cl = parse (cl,"s", (LONG)3, &test_class ); | |
816 | |
817 switch (*test_class) | |
818 { | |
819 case 'A': | |
820 break; | |
821 case 'B': | |
822 m_class = CGCLASS_CLASS_B; | |
823 break; | |
824 case 'C': | |
825 switch(*(test_class + 1)) | |
826 { | |
827 case 'G': | |
828 m_class = CGCLASS_CLASS_CG; | |
829 break; | |
830 case 'C': | |
831 m_class = CGCLASS_CLASS_CC; | |
832 break; | |
833 default: | |
834 break; | |
835 } | |
836 break; | |
837 default: | |
838 break; | |
839 } | |
840 | |
841 if ( !cl || m_class == CGCLASS_CLASS_OMITTED ) | |
842 { | |
843 cmdCmeError(CME_ERR_OpNotAllow); | |
844 return (ATI_FAIL); | |
845 } | |
846 | |
847 #ifdef FF_ATI_BAT | |
848 | |
849 { | |
850 T_BAT_cmd_send cmd; | |
851 T_BAT_cmd_set_plus_cgclass cgclass; | |
852 | |
853 cmd.ctrl_params = BAT_CMD_SET_PLUS_CGCLASS; | |
854 cmd.params.ptr_set_plus_cgclass=&cgclass; | |
855 | |
856 /* | |
857 * This relies on T_BAT_mobile_class and T_CGCLASS_CLASS | |
858 * being identical. | |
859 */ | |
860 cgclass.mobile_class=(T_BAT_mobile_class)m_class; | |
861 | |
862 bat_send(ati_bat_get_client(srcId), &cmd); | |
863 | |
864 src_params->curAtCmd=AT_CMD_CGCLASS; | |
865 return(ATI_EXCT); | |
866 } | |
867 | |
868 #else | |
869 | |
870 ret = sAT_PlusCGCLASS ( srcId, m_class ); | |
871 switch (ret) | |
872 { | |
873 case (AT_CMPL): /*operation completed*/ | |
874 return (ATI_CMPL); | |
875 case (AT_EXCT): | |
876 src_params->curAtCmd = AT_CMD_CGCLASS; | |
877 return (ATI_EXCT); | |
878 default: | |
879 cmdCmeError(CME_ERR_Unknown); /*Command failed*/ | |
880 return (ATI_FAIL); | |
881 } | |
882 | |
883 #endif /*FF_ATI_BAT*/ | |
884 } | |
885 | |
886 GLOBAL T_ATI_RSLT queatPlusCGCLASS (char *cl, UBYTE srcId) | |
887 { | |
888 | |
889 #ifndef FF_ATI_BAT | |
890 char *me="+CGCLASS: "; | |
891 char *classes[] = {"A","B","CG","CC"}; | |
892 T_ACI_RETURN ret = AT_FAIL; | |
893 T_CGCLASS_CLASS m_class = CGCLASS_CLASS_OMITTED; | |
894 char test_class[3]=""; | |
895 #endif | |
896 | |
897 TRACE_FUNCTION("queatPlusCGCLASS ()"); | |
898 | |
899 #ifdef FF_ATI_BAT | |
900 { | |
901 T_BAT_cmd_send cmd; | |
902 T_BAT_no_parameter dummy; | |
903 | |
904 cmd.ctrl_params = BAT_CMD_QUE_PLUS_CGCLASS; | |
905 dummy.bat_dummy = 0xFF; | |
906 cmd.params.ptr_que_plus_cgclass = &dummy; | |
907 bat_send(ati_bat_get_client(srcId), &cmd); | |
908 return(ATI_EXCT); | |
909 } | |
910 #else | |
911 | |
912 ret = qAT_PlusCGCLASS(srcId, &m_class); | |
913 if (ret EQ AT_CMPL) | |
914 { | |
915 sprintf(g_sa,"%s\"%s\"", me, classes[m_class]); | |
916 io_sendMessage(srcId, g_sa, ATI_NORMAL_OUTPUT); | |
917 } | |
918 else | |
919 { | |
920 cmdCmeError(CME_ERR_Unknown); | |
921 return (ATI_FAIL); | |
922 } | |
923 | |
924 return (map_aci_2_ati_rslt(ret)); | |
925 | |
926 #endif /*FF_ATI_BAT*/ | |
927 } | |
928 | |
929 | |
930 /* | |
931 +--------------------------------------------------------------------+ | |
932 | PROJECT : GPRS (8441) MODULE : GACI_CMD | | |
933 | STATE : finnished ROUTINE : atPlusCGACT | | |
934 +--------------------------------------------------------------------+ | |
935 | |
936 PURPOSE : +CGACT command (context activation/deactivation) | |
937 */ | |
938 | |
939 GLOBAL T_ATI_RSLT setatPlusCGACT (char *cl, UBYTE srcId) | |
940 { | |
941 char *end; | |
942 T_ACI_RETURN ret = AT_FAIL; | |
943 T_CGACT_STATE state = CGACT_STATE_OMITTED; | |
944 SHORT count = 0; | |
945 SHORT cid, cid_array[MAX_CID_PLUS_EINS]; | |
946 T_ATI_SRC_PARAMS *src_params = find_element (ati_src_list, srcId, search_ati_src_id); | |
947 | |
948 TRACE_FUNCTION("setatPlusCGACT ()"); | |
949 | |
950 end = cl; | |
951 | |
952 if ( *cl != ',' ) | |
953 state = (T_CGACT_STATE) strtol(cl, &end, 10); | |
954 | |
955 while ( *end EQ ',' ) | |
956 { | |
957 cl = end; /* advace to the next delimiter */ | |
958 cl ++; /* skip the delimiter */ | |
959 cid = INVALID_CID; | |
960 | |
961 cid = ( SHORT ) strtol (cl, &end, 10); | |
962 | |
963 if (cid < 1 || cid > MAX_CID || count >= MAX_CID) | |
964 { | |
965 cmdCmeError(CME_ERR_OpNotAllow); | |
966 return (ATI_FAIL); | |
967 } | |
968 cid_array[count] = cid; | |
969 count ++; | |
970 } | |
971 | |
972 cid_array[count] = INVALID_CID; | |
973 cl = end; | |
974 | |
975 #ifdef FF_ATI_BAT | |
976 | |
977 { | |
978 T_BAT_cmd_send cmd; | |
979 T_BAT_cmd_set_plus_cgact cgact; | |
980 UBYTE n; | |
981 | |
982 cmd.ctrl_params = BAT_CMD_SET_PLUS_CGACT; | |
983 cmd.params.ptr_set_plus_cgact=&cgact; | |
984 | |
985 /* | |
986 * This relies on T_BAT_plus_cgact_state and T_CGACT_STATE | |
987 * being identical. | |
988 */ | |
989 cgact.state=(T_BAT_plus_cgact_state)state; | |
990 | |
991 for (n=0;((n<count) && (n<BAT_MAX_PDP_CID));n++) | |
992 cgact.cid[n]=(T_BAT_pdp_cid)cid_array[n]; | |
993 | |
994 cgact.c_cid=(U8)n; | |
995 | |
996 bat_send(ati_bat_get_client(srcId), &cmd); | |
997 | |
998 src_params->curAtCmd=AT_CMD_CGACT; | |
999 return(ATI_EXCT); | |
1000 } | |
1001 | |
1002 #else | |
1003 | |
1004 /* (De) Activate necessary contexts */ | |
1005 ret = sAT_PlusCGACT ( srcId, state, cid_array ); | |
1006 switch (ret) | |
1007 { | |
1008 case (AT_CMPL): /*operation completed*/ | |
1009 return (ATI_CMPL); | |
1010 case (AT_EXCT): | |
1011 src_params->curAtCmd = AT_CMD_CGACT; | |
1012 return (ATI_EXCT); | |
1013 default: | |
1014 cmdCmeError(CME_ERR_Unknown); /*Command failed*/ | |
1015 return (ATI_FAIL); | |
1016 } | |
1017 | |
1018 #endif /*FF_ATI_BAT*/ | |
1019 } | |
1020 | |
1021 GLOBAL T_ATI_RSLT queatPlusCGACT (char *cl, UBYTE srcId) | |
1022 { | |
1023 #ifndef FF_ATI_BAT | |
1024 char *me="+CGACT: "; | |
1025 T_ACI_RETURN ret = AT_FAIL; | |
1026 SHORT count = 0; | |
1027 SHORT cid_array[MAX_CID_PLUS_EINS]; | |
1028 BOOL states[MAX_CID_PLUS_EINS]; | |
1029 #endif | |
1030 | |
1031 TRACE_FUNCTION("queatPlusCGACT ()"); | |
1032 | |
1033 #ifdef FF_ATI_BAT | |
1034 { | |
1035 T_BAT_cmd_send cmd; | |
1036 T_BAT_no_parameter dummy; | |
1037 | |
1038 cmd.ctrl_params = BAT_CMD_QUE_PLUS_CGACT; | |
1039 dummy.bat_dummy = 0xFF; | |
1040 cmd.params.ptr_que_plus_cgact = &dummy; | |
1041 bat_send(ati_bat_get_client(srcId), &cmd); | |
1042 return(ATI_EXCT); | |
1043 } | |
1044 #else | |
1045 | |
1046 ret=qAT_PlusCGACT(srcId, states, cid_array); | |
1047 if (ret EQ AT_CMPL) | |
1048 { | |
1049 for ( count = 0; count < MAX_CID && cid_array[count] NEQ INVALID_CID; count++ ) | |
1050 { | |
1051 sprintf(g_sa,"%s%hd,%d", me, cid_array[count], states[count] EQ TRUE? 1 : 0); | |
1052 io_sendMessage(srcId, g_sa, ATI_NORMAL_OUTPUT); | |
1053 } | |
1054 } | |
1055 else | |
1056 { | |
1057 cmdCmeError(CME_ERR_Unknown); | |
1058 return (ATI_FAIL); | |
1059 } | |
1060 | |
1061 return (map_aci_2_ati_rslt(ret)); | |
1062 | |
1063 #endif /*FF_ATI_BAT*/ | |
1064 } | |
1065 | |
1066 | |
1067 /* | |
1068 +--------------------------------------------------------------------+ | |
1069 | PROJECT : GPRS (8441) MODULE : GACI_CMD | | |
1070 | STATE : finnished ROUTINE : atPlusCGDATA | | |
1071 +--------------------------------------------------------------------+ | |
1072 | |
1073 PURPOSE : +CGDATA command (data connect) | |
1074 */ | |
1075 | |
1076 GLOBAL T_ATI_RSLT setatPlusCGDATA (char *cl, UBYTE srcId) | |
1077 { | |
1078 char L2P[MAX_L2P_LENGTH] = "", *end; | |
1079 T_ACI_RETURN ret = AT_FAIL; | |
1080 SHORT count = 0, stop = 1; | |
1081 SHORT cid_array[MAX_CID_PLUS_EINS] = { GPRS_CID_OMITTED }; | |
1082 T_ATI_SRC_PARAMS *src_params = find_element (ati_src_list, srcId, search_ati_src_id); | |
1083 | |
1084 TRACE_FUNCTION("setatPlusCGDATA ()"); | |
1085 | |
1086 switch ( *cl ) | |
1087 { | |
1088 case ',': | |
1089 /* the L2P is unspecified */ | |
1090 *L2P = 0; | |
1091 break; | |
1092 case '\"': | |
1093 cl++; | |
1094 while (*cl && stop) | |
1095 { | |
1096 if ( *cl NEQ '\"' && count < MAX_L2P_LENGTH - 1 ) | |
1097 { | |
1098 L2P[count] = *cl; | |
1099 count ++; | |
1100 cl ++; | |
1101 } | |
1102 else | |
1103 { | |
1104 L2P[count] = 0; | |
1105 stop = 0; | |
1106 } | |
1107 } | |
1108 | |
1109 if ( *cl NEQ '\"' ) | |
1110 { /* Bad user input, abort */ | |
1111 cmdCmeError(CME_ERR_OpNotAllow); | |
1112 return (ATI_FAIL); | |
1113 } | |
1114 | |
1115 cl++; | |
1116 break; | |
1117 case 0: | |
1118 break; | |
1119 default: | |
1120 /* Bad user input, abort */ | |
1121 cmdCmeError(CME_ERR_OpNotAllow); | |
1122 return (ATI_FAIL); | |
1123 } | |
1124 | |
1125 end = cl; | |
1126 count = 0; | |
1127 while ( *end EQ ',' ) | |
1128 { | |
1129 cl = end; | |
1130 cl ++; | |
1131 | |
1132 cid_array[count] = ( SHORT ) strtol (cl, &end, 10); | |
1133 | |
1134 if ( count >= MAX_CID ) | |
1135 { | |
1136 cmdCmeError(CME_ERR_OpNotAllow); | |
1137 return (ATI_FAIL); | |
1138 } | |
1139 count ++; | |
1140 } | |
1141 | |
1142 if ( count ) | |
1143 cid_array[count] = INVALID_CID; | |
1144 | |
1145 cl = end; | |
1146 | |
1147 /* | |
1148 * if no cid is given or if there is no matching context definition | |
1149 * the function sAT_PlusCGDATA will process this | |
1150 */ | |
1151 | |
1152 #ifdef FF_ATI_BAT | |
1153 | |
1154 { | |
1155 T_BAT_cmd_send cmd; | |
1156 T_BAT_cmd_set_plus_cgdata cgdata; | |
1157 UBYTE n; | |
1158 UBYTE len; | |
1159 | |
1160 cmd.ctrl_params = BAT_CMD_SET_PLUS_CGDATA; | |
1161 cmd.params.ptr_set_plus_cgdata=&cgdata; | |
1162 | |
1163 cgdata.v_cid=FALSE; | |
1164 | |
1165 if (count) | |
1166 { | |
1167 for (n=0;((n<count) && (n<BAT_MAX_PDP_CID));n++) | |
1168 cgdata.cid[n]=(T_BAT_pdp_cid)cid_array[n]; | |
1169 | |
1170 cgdata.c_cid=(U8)n; | |
1171 cgdata.v_cid=TRUE; | |
1172 } | |
1173 | |
1174 cgdata.v_l2p=FALSE; | |
1175 | |
1176 if (L2P[0]) | |
1177 { | |
1178 if ((len=strlen(L2P))<=BAT_MAX_CGDATA_L2P_LEN) | |
1179 { | |
1180 cgdata.v_l2p=TRUE; | |
1181 memcpy(cgdata.l2p,L2P,len); | |
1182 cgdata.c_l2p=len; | |
1183 } | |
1184 } | |
1185 bat_send(ati_bat_get_client(srcId), &cmd); | |
1186 | |
1187 src_params->curAtCmd=AT_CMD_CGDATA; | |
1188 return(ATI_EXCT); | |
1189 } | |
1190 | |
1191 #else | |
1192 | |
1193 /* establish communication between the TE and the network */ | |
1194 ret = sAT_PlusCGDATA ( srcId, L2P, cid_array ); | |
1195 switch (ret) | |
1196 { | |
1197 case (AT_CMPL): /*operation completed*/ | |
1198 return (ATI_CMPL); | |
1199 case (AT_EXCT): | |
1200 cmdErrStr = NULL; | |
1201 src_params->curAtCmd = AT_CMD_CGDATA; | |
1202 return (ATI_EXCT); | |
1203 default: | |
1204 cmdCmeError(CME_ERR_Unknown); /*Command failed*/ | |
1205 return (ATI_FAIL); | |
1206 } | |
1207 | |
1208 #endif /*FF_ATI_BAT*/ | |
1209 } | |
1210 | |
1211 /* | |
1212 +--------------------------------------------------------------------+ | |
1213 | PROJECT : GPRS (8441) MODULE : GACI_CMD | | |
1214 | STATE : code ROUTINE : atPlusCGPADDR | | |
1215 +--------------------------------------------------------------------+ | |
1216 | |
1217 PURPOSE : +CGPADDR command (show PDP addresses) | |
1218 active command returns a list of last used PDP addresses | |
1219 for specified cids. If unspecified, returns list for all | |
1220 defined cids. | |
1221 */ | |
1222 | |
1223 GLOBAL T_ATI_RSLT setatPlusCGPADDR (char *cl, UBYTE srcId) | |
1224 { | |
1225 char *me="+CGPADDR: ", *end; | |
1226 #ifndef FF_ATI_BAT | |
1227 T_ACI_RETURN ret; | |
1228 T_PDP_ADDRESS pdp_addresses[MAX_CID]; | |
1229 #endif | |
1230 | |
1231 SHORT count = 0; | |
1232 SHORT cid_array[MAX_CID_PLUS_EINS]; | |
1233 | |
1234 TRACE_FUNCTION("setatPlusCGPADDR ()"); | |
1235 | |
1236 do | |
1237 { | |
1238 cid_array[count] = ( SHORT ) strtol (cl, &end, 10); | |
1239 count ++; | |
1240 cl = end; | |
1241 if ( *cl EQ ',' ) | |
1242 cl++; | |
1243 } | |
1244 while ( *end EQ ',' ); | |
1245 | |
1246 cid_array[count] = INVALID_CID; | |
1247 cl = end; | |
1248 | |
1249 #ifdef FF_ATI_BAT | |
1250 | |
1251 { | |
1252 T_BAT_cmd_send cmd; | |
1253 T_BAT_cmd_set_plus_cgpaddr cgpaddr; | |
1254 UBYTE n; | |
1255 | |
1256 cmd.ctrl_params = BAT_CMD_SET_PLUS_CGPADDR; | |
1257 cmd.params.ptr_set_plus_cgpaddr=&cgpaddr; | |
1258 | |
1259 cgpaddr.c_cid=0; | |
1260 | |
1261 if (count) | |
1262 { | |
1263 for (n=0;((n<count) && (n<BAT_MAX_PDP_CID));n++) | |
1264 cgpaddr.cid[n]=(T_BAT_pdp_cid)cid_array[n]; | |
1265 | |
1266 cgpaddr.c_cid=(U8)n; | |
1267 } | |
1268 bat_send(ati_bat_get_client(srcId), &cmd); | |
1269 return(ATI_EXCT); | |
1270 } | |
1271 | |
1272 #else | |
1273 | |
1274 /* return a list of PDP addresses for the specified context identifier */ | |
1275 ret = sAT_PlusCGPADDR ( srcId, cid_array, pdp_addresses ); | |
1276 switch (ret) | |
1277 { | |
1278 case (AT_CMPL): /*operation completed*/ | |
1279 count = 0; | |
1280 if (cid_array[0] NEQ INVALID_CID) | |
1281 { | |
1282 while ( cid_array[count] NEQ INVALID_CID ) | |
1283 { | |
1284 if (*pdp_addresses[count]) | |
1285 sprintf(g_sa,"%s%hd,\"%s\"", me, cid_array[count], pdp_addresses[count]); | |
1286 else | |
1287 sprintf(g_sa,"%s%hd", me, cid_array[count]); | |
1288 | |
1289 io_sendMessage(srcId, g_sa, ATI_NORMAL_OUTPUT); | |
1290 count ++; | |
1291 } | |
1292 } | |
1293 return (ATI_CMPL); | |
1294 default: | |
1295 cmdCmeError(CME_ERR_Unknown); /*Command failed*/ | |
1296 return (ATI_FAIL); | |
1297 } | |
1298 | |
1299 #endif /*FF_ATI_BAT*/ | |
1300 | |
1301 } | |
1302 | |
1303 GLOBAL T_ATI_RSLT tesatPlusCGPADDR (char *cl, UBYTE srcId) | |
1304 { | |
1305 #ifndef FF_ATI_BAT | |
1306 char *me="+CGPADDR: "; | |
1307 T_ACI_RETURN ret; | |
1308 SHORT count = 0; | |
1309 SHORT cid_array[MAX_CID_PLUS_EINS]; | |
1310 int pos = 0; | |
1311 #endif | |
1312 | |
1313 TRACE_FUNCTION("tesatPlusCGPADDR ()"); | |
1314 | |
1315 #ifdef FF_ATI_BAT | |
1316 { | |
1317 T_BAT_cmd_send cmd; | |
1318 T_BAT_no_parameter dummy; | |
1319 | |
1320 cmd.ctrl_params = BAT_CMD_TST_PLUS_CGPADDR; | |
1321 dummy.bat_dummy = 0xFF; | |
1322 cmd.params.ptr_tst_plus_cgpaddr = &dummy; | |
1323 bat_send(ati_bat_get_client(srcId), &cmd); | |
1324 return(ATI_EXCT); | |
1325 } | |
1326 #else | |
1327 | |
1328 /* return a list of defined context identifier */ | |
1329 ret = tAT_PlusCGPADDR ( srcId, cid_array ); | |
1330 switch (ret) | |
1331 { | |
1332 case (AT_CMPL): /*operation completed*/ | |
1333 pos = sprintf(g_sa,"%s(", me); | |
1334 while ( cid_array[count] NEQ INVALID_CID ) | |
1335 { | |
1336 if ( count NEQ 0 ) | |
1337 { | |
1338 g_sa[pos] = ','; pos++; | |
1339 } | |
1340 pos += sprintf(g_sa + pos,"%hd", cid_array[count]); | |
1341 count ++; | |
1342 } | |
1343 g_sa[pos] = ')'; pos++; | |
1344 g_sa[pos] = 0; | |
1345 io_sendMessage(srcId, g_sa, ATI_NORMAL_OUTPUT); | |
1346 return (ATI_CMPL); | |
1347 default: | |
1348 cmdCmeError(CME_ERR_Unknown); /*Command failed*/ | |
1349 return (ATI_FAIL); | |
1350 } | |
1351 | |
1352 #endif /*FF_ATI_BAT*/ | |
1353 } | |
1354 | |
1355 /* | |
1356 +--------------------------------------------------------------------+ | |
1357 | PROJECT : GPRS (8441) MODULE : GACI_CMD | | |
1358 | STATE : finnished ROUTINE : atPlusCGAUTO | | |
1359 +--------------------------------------------------------------------+ | |
1360 | |
1361 PURPOSE : +CGAUTO command (auto answer/modem compatibility control) | |
1362 */ | |
1363 | |
1364 GLOBAL T_ATI_RSLT setatPlusCGAUTO (char *cl, UBYTE srcId) | |
1365 { | |
1366 T_ACI_RETURN ret = AT_FAIL; | |
1367 T_CGAUTO_N n = CGAUTO_N_OMITTED; /* Invalid range value to detect an empty parameter */ | |
1368 T_ATI_SRC_PARAMS *src_params = find_element (ati_src_list, srcId, search_ati_src_id); | |
1369 | |
1370 TRACE_FUNCTION("setatPlusCGAUTO ()"); | |
1371 | |
1372 cl = parse (cl,"d", &n ); | |
1373 ret = sAT_PlusCGAUTO ( srcId, n ); | |
1374 switch (ret) | |
1375 { | |
1376 case (AT_CMPL): /*operation completed*/ | |
1377 at.rngPrms.srcID_CGAUTO = srcId; | |
1378 return (ATI_CMPL); | |
1379 case (AT_EXCT): | |
1380 src_params->curAtCmd = AT_CMD_CGATT; | |
1381 at.rngPrms.srcID_CGAUTO = srcId; | |
1382 return (ATI_EXCT); | |
1383 default: | |
1384 cmdCmeError(CME_ERR_Unknown); /*Command failed*/ | |
1385 return (ATI_FAIL); | |
1386 } | |
1387 } | |
1388 | |
1389 GLOBAL T_ATI_RSLT queatPlusCGAUTO (char *cl, UBYTE srcId) | |
1390 { | |
1391 char *me="+CGAUTO: "; | |
1392 T_ACI_RETURN ret = AT_FAIL; | |
1393 T_CGAUTO_N n = CGAUTO_N_OMITTED; /* Invalid range value to detect an empty parameter */ | |
1394 | |
1395 TRACE_FUNCTION("queatPlusCGAUTO ()"); | |
1396 | |
1397 ret = qAT_PlusCGAUTO(srcId, &n); | |
1398 if (ret EQ AT_CMPL) | |
1399 { | |
1400 sprintf(g_sa,"%s%hd", me, n); | |
1401 io_sendMessage(srcId, g_sa, ATI_NORMAL_OUTPUT); | |
1402 } | |
1403 else | |
1404 { | |
1405 cmdCmeError(CME_ERR_Unknown); | |
1406 return (ATI_FAIL); | |
1407 } | |
1408 | |
1409 return (map_aci_2_ati_rslt(ret)); | |
1410 } | |
1411 | |
1412 /* | |
1413 +--------------------------------------------------------------------+ | |
1414 | PROJECT : GPRS (8441) MODULE : GACI_CMD | | |
1415 | STATE : code ROUTINE : atPlusCGANS | | |
1416 +--------------------------------------------------------------------+ | |
1417 | |
1418 PURPOSE : +CGANS command (answer NW context req) | |
1419 */ | |
1420 | |
1421 GLOBAL T_ATI_RSLT setatPlusCGANS (char *cl, UBYTE srcId) | |
1422 { | |
1423 char L2P[MAX_L2P_LENGTH] = "", *end; | |
1424 T_ACI_RETURN ret = AT_FAIL; | |
1425 SHORT cid = GPRS_CID_OMITTED, response = -1, count = 0, stop = 1; | |
1426 T_ATI_SRC_PARAMS *src_params = find_element (ati_src_list, srcId, search_ati_src_id); | |
1427 | |
1428 TRACE_FUNCTION("setatPlusCGANS ()"); | |
1429 | |
1430 response = ( SHORT ) strtol (cl, &end, 10); | |
1431 cl = end; | |
1432 | |
1433 if ( *cl EQ ',' ) | |
1434 { | |
1435 cl++; | |
1436 switch ( *cl ) | |
1437 { | |
1438 case ',': | |
1439 /* the L2P is unspecified */ | |
1440 *L2P = 0; | |
1441 break; | |
1442 case '\"': | |
1443 cl++; | |
1444 while (*cl && stop) | |
1445 { | |
1446 if ( *cl NEQ '\"' && count < MAX_L2P_LENGTH - 1 ) | |
1447 { | |
1448 L2P[count] = *cl; | |
1449 count ++; | |
1450 cl ++; | |
1451 } | |
1452 else | |
1453 { | |
1454 L2P[count] = 0; | |
1455 stop = 0; | |
1456 } | |
1457 } | |
1458 | |
1459 if ( *cl NEQ '\"' ) | |
1460 { /* Bad user input, abort */ | |
1461 cmdCmeError(CME_ERR_OpNotAllow); | |
1462 return (ATI_FAIL); | |
1463 } | |
1464 | |
1465 cl++; | |
1466 break; | |
1467 default: | |
1468 /* Bad user input, abort */ | |
1469 cmdCmeError(CME_ERR_OpNotAllow); | |
1470 return (ATI_FAIL); | |
1471 } | |
1472 if ( *cl EQ ',' ) | |
1473 { | |
1474 cl++; | |
1475 cid = ( SHORT ) strtol (cl, &end, 10); | |
1476 cl = end; | |
1477 } | |
1478 } | |
1479 | |
1480 #ifdef FF_ATI_BAT | |
1481 { | |
1482 T_BAT_cmd_send cmd; | |
1483 T_BAT_cmd_set_plus_cgans cgans; | |
1484 UBYTE len; | |
1485 | |
1486 cmd.ctrl_params = BAT_CMD_SET_PLUS_CGANS; | |
1487 cmd.params.ptr_set_plus_cgans=&cgans; | |
1488 | |
1489 cgans.cid=(T_BAT_pdp_cid)cid; | |
1490 | |
1491 /* | |
1492 * This relies on T_BAT_plus_cgans_response and T_CGANS_RESPONSE | |
1493 * being identical. | |
1494 */ | |
1495 cgans.response=(T_BAT_plus_cgans_response)response; | |
1496 | |
1497 len=strlen(L2P); | |
1498 | |
1499 cgans.v_l2p=FALSE; | |
1500 | |
1501 if ((len) && (len<=BAT_MAX_CGANS_L2P_LEN)) | |
1502 { | |
1503 memcpy(cgans.l2p,L2P,len); | |
1504 cgans.c_l2p=(U8)len; | |
1505 cgans.v_l2p=TRUE; | |
1506 } | |
1507 bat_send(ati_bat_get_client(srcId), &cmd); | |
1508 | |
1509 src_params->curAtCmd=AT_CMD_CGANS; | |
1510 | |
1511 if ((at.rngPrms.isRng==TRUE) && (at.rngPrms.mode==CRING_MOD_Gprs)) | |
1512 ati_stop_ring(); | |
1513 | |
1514 return(ATI_EXCT); | |
1515 } | |
1516 | |
1517 #else | |
1518 | |
1519 /* return a list of PDP addresses for the specified context identifier */ | |
1520 ret = sAT_PlusCGANS ( srcId, response, L2P, cid ); | |
1521 | |
1522 switch (ret) | |
1523 { | |
1524 case (AT_CMPL): /*operation completed*/ | |
1525 return (ATI_CMPL); | |
1526 | |
1527 case (AT_EXCT): | |
1528 src_params->curAtCmd = AT_CMD_CGANS; | |
1529 if ( at.rngPrms.isRng EQ TRUE AND | |
1530 at.rngPrms.mode EQ CRING_MOD_Gprs ) | |
1531 { | |
1532 ati_stop_ring(); | |
1533 } | |
1534 return (ATI_EXCT); | |
1535 | |
1536 default: | |
1537 cmdCmeError(CME_ERR_Unknown); /*Command failed*/ | |
1538 return (ATI_FAIL); | |
1539 } | |
1540 | |
1541 #endif /*FF_ATI_BAT*/ | |
1542 } | |
1543 | |
1544 /* | |
1545 +--------------------------------------------------------------------+ | |
1546 | PROJECT : GPRS (8441) MODULE : GACI_CMD | | |
1547 | STATE : code ROUTINE : setatPlusCGEREP | | |
1548 +--------------------------------------------------------------------+ | |
1549 | |
1550 PURPOSE : +CGEREP command | |
1551 */ | |
1552 | |
1553 GLOBAL T_ATI_RSLT setatPlusCGEREP (char *cl, UBYTE srcId) | |
1554 { | |
1555 T_ACI_RETURN ret; | |
1556 T_CGEREP_MODE mode = CGEREP_MODE_OMITTED; | |
1557 T_CGEREP_BFR bfr = CGEREP_BFR_OMITTED; | |
1558 T_ATI_SRC_PARAMS *src_params = find_element (ati_src_list, srcId, search_ati_src_id); | |
1559 | |
1560 TRACE_FUNCTION("setatPlusCGEREP ()"); | |
1561 | |
1562 cl=parse(cl,"dd",&mode, &bfr); | |
1563 | |
1564 ret = sAT_PlusCGEREP ( srcId, mode, bfr ); | |
1565 switch (ret) | |
1566 { | |
1567 case (AT_CMPL): /*operation completed*/ | |
1568 return (ATI_CMPL); | |
1569 case (AT_EXCT): | |
1570 src_params->curAtCmd = AT_CMD_CGEREP; | |
1571 return (ATI_EXCT); | |
1572 default: | |
1573 cmdCmeError(CME_ERR_Unknown); /*Command failed*/ | |
1574 return (ATI_FAIL); | |
1575 } | |
1576 } | |
1577 | |
1578 GLOBAL T_ATI_RSLT queatPlusCGEREP (char *cl, UBYTE srcId) | |
1579 { | |
1580 char *me="+CGEREP: "; | |
1581 T_ACI_RETURN ret; | |
1582 T_CGEREP_MODE mode = CGEREP_MODE_OMITTED; | |
1583 T_CGEREP_BFR bfr = CGEREP_BFR_OMITTED; | |
1584 | |
1585 TRACE_FUNCTION("queatPlusCGEREP ()"); | |
1586 | |
1587 ret=qAT_PlusCGEREP(srcId, &mode, &bfr); | |
1588 if (ret EQ AT_CMPL) | |
1589 { | |
1590 sprintf(g_sa,"%s%d,%d", me, mode, bfr); | |
1591 io_sendMessage(srcId, g_sa, ATI_NORMAL_OUTPUT); | |
1592 } | |
1593 else | |
1594 { | |
1595 cmdCmeError(CME_ERR_Unknown); | |
1596 return (ATI_FAIL); | |
1597 } | |
1598 | |
1599 return (map_aci_2_ati_rslt(ret)); | |
1600 } | |
1601 | |
1602 /* | |
1603 +--------------------------------------------------------------------+ | |
1604 | PROJECT : GPRS (8441) MODULE : GACI_CMD | | |
1605 | STATE : code ROUTINE : atPercentCGEREP | | |
1606 +--------------------------------------------------------------------+ | |
1607 | |
1608 PURPOSE : %CGEREP command | |
1609 */ | |
1610 | |
1611 GLOBAL T_ATI_RSLT setatPercentCGEREP (char *cl, UBYTE srcId) | |
1612 { | |
1613 TRACE_FUNCTION("setatPercentCGEREP ()"); | |
1614 | |
1615 switch( *cl ) | |
1616 { | |
1617 case '0': | |
1618 ati_user_output_cfg[srcId].Percent_CGEREP_stat = 0; | |
1619 return (ATI_CMPL); | |
1620 | |
1621 case '1': | |
1622 ati_user_output_cfg[srcId].Percent_CGEREP_stat = 1; | |
1623 return (ATI_CMPL); | |
1624 | |
1625 default: | |
1626 cmdCmeError(CME_ERR_OpNotAllow); | |
1627 return (ATI_FAIL); | |
1628 } | |
1629 } | |
1630 | |
1631 GLOBAL T_ATI_RSLT queatPercentCGEREP (char *cl, UBYTE srcId) | |
1632 { | |
1633 char *me="%CGEREP: "; | |
1634 UBYTE mode; | |
1635 | |
1636 TRACE_FUNCTION("queatPercentCGEREP ()"); | |
1637 | |
1638 mode = ati_user_output_cfg[srcId].Percent_CGEREP_stat; | |
1639 | |
1640 sprintf(g_sa,"%s%d", me, mode); | |
1641 io_sendMessage(srcId, g_sa, ATI_NORMAL_OUTPUT); | |
1642 | |
1643 return (ATI_CMPL); | |
1644 } | |
1645 | |
1646 | |
1647 /* | |
1648 +--------------------------------------------------------------------+ | |
1649 | PROJECT : GPRS (8441) MODULE : GACI_CMD | | |
1650 | STATE : code ROUTINE : setatPlusCGREG | | |
1651 +--------------------------------------------------------------------+ | |
1652 | |
1653 PURPOSE : +CGREG command | |
1654 */ | |
1655 | |
1656 GLOBAL T_ATI_RSLT setatPlusCGREG (char *cl, UBYTE srcId) | |
1657 { | |
1658 T_ATI_CREG_MOD mode=CREG_MOD_OFF; | |
1659 | |
1660 TRACE_FUNCTION("setatPlusCGREG()"); | |
1661 | |
1662 cl=parse(cl,"d",&mode); | |
1663 | |
1664 switch(mode) | |
1665 { | |
1666 case CREG_MOD_OFF: | |
1667 case CREG_MOD_ON: | |
1668 case CREG_MOD_LOC_INF_ON: | |
1669 /* user wants to set mode: reset CREG related ATI parameters */ | |
1670 ati_creg_init(srcId, PlusCGREG_CMD); | |
1671 ati_gprs_user_output_cfg[srcId].plus_cgreg.mod_lac_cid.pres_mode = mode; | |
1672 return ATI_CMPL; | |
1673 | |
1674 default: | |
1675 cmdCmeError(CME_ERR_OpNotAllow); | |
1676 return ATI_FAIL; | |
1677 } | |
1678 } | |
1679 | |
1680 GLOBAL T_ATI_RSLT queatPlusCGREG (char *cl, UBYTE srcId) | |
1681 { | |
1682 #ifndef FF_ATI_BAT | |
1683 T_CGREG_STAT stat; | |
1684 USHORT lac, cid; | |
1685 T_ATI_CREG_MOD mode; | |
1686 short pos; | |
1687 #endif | |
1688 | |
1689 TRACE_FUNCTION("queatPlusCGREG()"); | |
1690 | |
1691 #ifdef FF_ATI_BAT | |
1692 { | |
1693 T_BAT_cmd_send cmd; | |
1694 T_BAT_no_parameter dummy; | |
1695 | |
1696 cmd.ctrl_params = BAT_CMD_QUE_PLUS_CGREG; | |
1697 dummy.bat_dummy = 0xFF; | |
1698 cmd.params.ptr_que_plus_cgreg = &dummy; | |
1699 bat_send(ati_bat_get_client(srcId), &cmd); | |
1700 return(ATI_EXCT); | |
1701 } | |
1702 #else | |
1703 | |
1704 mode = ati_gprs_user_output_cfg[srcId].plus_cgreg.mod_lac_cid.pres_mode; | |
1705 | |
1706 if (qAT_PlusCGREG(srcId, &stat, &lac, &cid) NEQ AT_CMPL) | |
1707 { | |
1708 cmdCmeError(CME_ERR_Unknown); | |
1709 return ATI_FAIL; | |
1710 } | |
1711 | |
1712 pos = sprintf(g_sa, "+CGREG: %d,%d", mode, stat); | |
1713 | |
1714 if(mode EQ CREG_MOD_LOC_INF_ON) | |
1715 { | |
1716 if(stat EQ CGREG_STAT_REG_HOME OR stat EQ CGREG_STAT_REG_ROAM) | |
1717 sprintf(g_sa+pos, ",\"%04X\",\"%04X\"", lac, cid); | |
1718 } | |
1719 | |
1720 io_sendMessage(srcId, g_sa, ATI_NORMAL_OUTPUT); | |
1721 return ATI_CMPL; | |
1722 | |
1723 #endif /*FF_ATI_BAT*/ | |
1724 } | |
1725 | |
1726 | |
1727 /* | |
1728 +--------------------------------------------------------------------+ | |
1729 | PROJECT : GPRS (8441) MODULE : GACI_CMD | | |
1730 | STATE : code ROUTINE : setatPercentCGREG | | |
1731 +--------------------------------------------------------------------+ | |
1732 | |
1733 PURPOSE : %CGREG command | |
1734 */ | |
1735 | |
1736 GLOBAL T_ATI_RSLT setatPercentCGREG (char *cl, UBYTE srcId) | |
1737 { | |
1738 T_ATI_CREG_MOD mode=CREG_MOD_OFF; | |
1739 | |
1740 TRACE_FUNCTION("setatPercentCGREG()"); | |
1741 | |
1742 cl=parse(cl,"d",&mode); | |
1743 | |
1744 switch(mode) | |
1745 { | |
1746 case CREG_MOD_OFF: | |
1747 case CREG_MOD_ON: | |
1748 case CREG_MOD_LOC_INF_ON: | |
1749 case CREG_MOD_LOC_INF_ON_CTXACT: | |
1750 /* user wants to set mode: reset CREG related ATI parameters */ | |
1751 ati_creg_init(srcId, PercentCGREG_CMD); | |
1752 ati_gprs_user_output_cfg[srcId].percent_cgreg.mod_lac_cid.pres_mode = mode; | |
1753 return ATI_CMPL; | |
1754 | |
1755 default: | |
1756 cmdCmeError(CME_ERR_OpNotAllow); | |
1757 return ATI_FAIL; | |
1758 } | |
1759 } | |
1760 | |
1761 GLOBAL T_ATI_RSLT queatPercentCGREG (char *cl, UBYTE srcId) | |
1762 { | |
1763 #ifndef FF_ATI_BAT | |
1764 T_P_CGREG_STAT stat; | |
1765 USHORT lac, cid; | |
1766 T_ATI_CREG_MOD mode; | |
1767 SHORT pos; | |
1768 #endif | |
1769 | |
1770 TRACE_FUNCTION("queatPercentCGREG()"); | |
1771 | |
1772 #ifdef FF_ATI_BAT | |
1773 { | |
1774 T_BAT_cmd_send cmd; | |
1775 T_BAT_no_parameter dummy; | |
1776 | |
1777 cmd.ctrl_params = BAT_CMD_QUE_PERCENT_CGREG; | |
1778 dummy.bat_dummy = 0xFF; | |
1779 cmd.params.ptr_que_plus_cgreg = &dummy; | |
1780 | |
1781 bat_send(ati_bat_get_client(srcId), &cmd); | |
1782 return(ATI_EXCT); | |
1783 } | |
1784 #else | |
1785 | |
1786 mode = ati_gprs_user_output_cfg[srcId].percent_cgreg.mod_lac_cid.pres_mode; | |
1787 | |
1788 if (qAT_PercentCGREG(srcId, &stat, &lac, &cid) NEQ AT_CMPL) | |
1789 { | |
1790 cmdCmeError(CME_ERR_Unknown); | |
1791 return ATI_FAIL; | |
1792 } | |
1793 | |
1794 pos = sprintf(g_sa,"%s: %d,%d", "%CGREG", mode, stat); | |
1795 | |
1796 if (mode EQ CREG_MOD_LOC_INF_ON OR mode EQ CREG_MOD_LOC_INF_ON_CTXACT) | |
1797 { | |
1798 if (stat EQ P_CGREG_STAT_REG_HOME OR stat EQ P_CGREG_STAT_REG_ROAM) | |
1799 pos += sprintf(g_sa+pos, ",\"%04X\",\"%04X\"", lac, cid); | |
1800 else if (mode EQ CREG_MOD_LOC_INF_ON_CTXACT) | |
1801 pos += sprintf(g_sa+pos, ",,"); /* if CTXACT follows so lac and cid are ommitted */ | |
1802 } | |
1803 | |
1804 if (mode EQ CREG_MOD_LOC_INF_ON_CTXACT) | |
1805 sprintf(g_sa+pos, (cmhSM_isContextActive() ? ",1" : ",0")); | |
1806 | |
1807 io_sendMessage(srcId, g_sa, ATI_NORMAL_OUTPUT); | |
1808 return ATI_CMPL; | |
1809 | |
1810 #endif /*FF_ATI_BAT*/ | |
1811 } | |
1812 | |
1813 | |
1814 /* | |
1815 +--------------------------------------------------------------------+ | |
1816 | PROJECT : GPRS (8441) MODULE : GACI_CMD | | |
1817 | STATE : code ROUTINE : atPlusCGSMS | | |
1818 +--------------------------------------------------------------------+ | |
1819 | |
1820 PURPOSE : +CGSMS command (define MO SMS behaviour) | |
1821 */ | |
1822 | |
1823 GLOBAL T_ATI_RSLT setatPlusCGSMS (char *cl, UBYTE srcId) | |
1824 { | |
1825 #ifndef FF_ATI_BAT | |
1826 T_ACI_RETURN ret; | |
1827 #endif | |
1828 T_CGSMS_SERVICE service = CGSMS_SERVICE_OMITTED; /* Invalid range value to detect an empty parameter */ | |
1829 T_ATI_SRC_PARAMS *src_params = find_element (ati_src_list, srcId, search_ati_src_id); | |
1830 | |
1831 TRACE_FUNCTION("setatPlusCGSMS ()"); | |
1832 | |
1833 cl=parse(cl,"d",&service); | |
1834 | |
1835 #ifdef FF_ATI_BAT | |
1836 | |
1837 { | |
1838 T_BAT_cmd_send cmd; | |
1839 T_BAT_cmd_set_plus_cgsms cgsms; | |
1840 | |
1841 cmd.ctrl_params = BAT_CMD_SET_PLUS_CGSMS; | |
1842 cmd.params.ptr_set_plus_cgsms=&cgsms; | |
1843 | |
1844 /* | |
1845 * This relies on T_BAT_plus_cgsms_service and T_CGSMS_SERVICE | |
1846 * being identical. | |
1847 */ | |
1848 cgsms.service=(T_BAT_plus_cgsms_service)service; | |
1849 | |
1850 bat_send(ati_bat_get_client(srcId), &cmd); | |
1851 | |
1852 src_params->curAtCmd=AT_CMD_CGSMS; | |
1853 return(ATI_EXCT); | |
1854 } | |
1855 | |
1856 #else | |
1857 | |
1858 ret = sAT_PlusCGSMS ( srcId, service ); | |
1859 switch (ret) | |
1860 { | |
1861 case (AT_CMPL): /*operation completed*/ | |
1862 return (ATI_CMPL); | |
1863 case (AT_EXCT): | |
1864 src_params->curAtCmd = AT_CMD_CGSMS; | |
1865 return (ATI_EXCT); | |
1866 default: | |
1867 cmdCmeError(CME_ERR_Unknown); /*Command failed*/ | |
1868 return (ATI_FAIL); | |
1869 } | |
1870 | |
1871 #endif /*FF_ATI_BAT*/ | |
1872 } | |
1873 | |
1874 GLOBAL T_ATI_RSLT queatPlusCGSMS (char *cl, UBYTE srcId) | |
1875 { | |
1876 #ifndef FF_ATI_BAT | |
1877 char *me="+CGSMS: "; | |
1878 T_ACI_RETURN ret; | |
1879 T_CGSMS_SERVICE service = CGSMS_SERVICE_OMITTED; /* Invalid range value to detect an empty parameter */ | |
1880 #endif | |
1881 | |
1882 TRACE_FUNCTION("queatPlusCGSMS ()"); | |
1883 | |
1884 #ifdef FF_ATI_BAT | |
1885 { | |
1886 T_BAT_cmd_send cmd; | |
1887 T_BAT_no_parameter dummy; | |
1888 | |
1889 cmd.ctrl_params = BAT_CMD_QUE_PLUS_CGSMS; | |
1890 dummy.bat_dummy = 0xFF; | |
1891 cmd.params.ptr_que_plus_cgsms = &dummy; | |
1892 bat_send(ati_bat_get_client(srcId), &cmd); | |
1893 return(ATI_EXCT); | |
1894 } | |
1895 #else | |
1896 | |
1897 ret = qAT_PlusCGSMS(srcId, &service); | |
1898 if (ret EQ AT_CMPL) | |
1899 { | |
1900 sprintf(g_sa,"%s%hd", me, service); | |
1901 io_sendMessage(srcId, g_sa, ATI_NORMAL_OUTPUT); | |
1902 return (ATI_CMPL); | |
1903 } | |
1904 else | |
1905 { | |
1906 cmdCmeError(CME_ERR_Unknown); | |
1907 return (ATI_FAIL); | |
1908 } | |
1909 | |
1910 #endif /*FF_ATI_BAT*/ | |
1911 } | |
1912 | |
1913 GLOBAL T_ATI_RSLT tesatPlusCGSMS (char *cl, UBYTE srcId) | |
1914 { | |
1915 char *me="+CGSMS: ", list[10] = "(0-3)"; | |
1916 T_ACI_RETURN ret; | |
1917 T_CGSMS_SERVICE service = CGSMS_SERVICE_OMITTED; /* Invalid range value to detect an empty parameter */ | |
1918 SHORT service_list; | |
1919 | |
1920 TRACE_FUNCTION("tesatPlusCGSMS ()"); | |
1921 | |
1922 ret = tAT_PlusCGSMS ( srcId, &service_list ); | |
1923 switch (ret) | |
1924 { | |
1925 case (AT_CMPL): /*operation completed*/ | |
1926 if ( service_list NEQ 15 ) | |
1927 { | |
1928 list[1] = service EQ 1 ? '0':'1'; | |
1929 list[2] = ')'; | |
1930 list[3] = 0; | |
1931 } | |
1932 cl++; | |
1933 sprintf(g_sa,"%s%s", me, list); | |
1934 io_sendMessage(srcId, g_sa, ATI_NORMAL_OUTPUT); | |
1935 return (ATI_CMPL); | |
1936 default: | |
1937 cmdCmeError(CME_ERR_Unknown); /*Command failed*/ | |
1938 return (ATI_FAIL); | |
1939 } | |
1940 } | |
1941 | |
1942 /* | |
1943 +--------------------------------------------------------------------+ | |
1944 | PROJECT : GPRS (8441) MODULE : GACI_CMD | | |
1945 | STATE : finnished ROUTINE : atGD | | |
1946 +--------------------------------------------------------------------+ | |
1947 | |
1948 PURPOSE : +ATD command | |
1949 */ | |
1950 | |
1951 GLOBAL T_ATI_RSLT atGD (char *cl, UBYTE srcId, BOOL *gprs_command) | |
1952 { | |
1953 | |
1954 SHORT count = 0, cid_array[2] = { GPRS_CID_OMITTED, INVALID_CID }, i = 0; | |
1955 T_ACI_RETURN ret = AT_FAIL; | |
1956 char L2P[MAX_L2P_LENGTH] = "PPP", save_char, *p_save_char, *end; | |
1957 T_ATI_SRC_PARAMS *src_params = find_element (ati_src_list, srcId, search_ati_src_id); | |
1958 int l2pID = -1; | |
1959 | |
1960 TRACE_FUNCTION ("atGD()"); | |
1961 | |
1962 if (cl EQ NULL) | |
1963 { | |
1964 *gprs_command = FALSE; | |
1965 return (ATI_FAIL); | |
1966 } | |
1967 | |
1968 /* ignore modifier */ | |
1969 switch ( *cl ) | |
1970 { | |
1971 case 'T': | |
1972 case 't': | |
1973 case 'P': | |
1974 case 'p': | |
1975 if ( *(cl + 1) EQ '*' ) | |
1976 { | |
1977 cl ++; | |
1978 } | |
1979 else | |
1980 { | |
1981 *gprs_command = FALSE; | |
1982 return (ATI_FAIL); | |
1983 } | |
1984 break; | |
1985 case '*': | |
1986 break; | |
1987 default: | |
1988 *gprs_command = FALSE; | |
1989 return (ATI_FAIL); | |
1990 } | |
1991 | |
1992 /* check the service code */ | |
1993 | |
1994 #if defined(FF_WAP) OR defined(FF_GPF_TCPIP) || defined (FF_SAT_E) | |
1995 if ( (*(cl + 1) NEQ '9') || | |
1996 ( ( *(cl + 2) NEQ '9' ) && ( *(cl + 2) NEQ '8' ) ) ) | |
1997 { | |
1998 *gprs_command = FALSE; | |
1999 return (ATI_FAIL); | |
2000 } | |
2001 | |
2002 else if ( *(cl + 2) EQ '8' ) /* atd*98# -> WAP over GPRS */ | |
2003 { | |
2004 /* if call not yet marked as WAP call, mark it now */ | |
2005 if (!Wap_Call) | |
2006 { | |
2007 TRACE_EVENT ("ati_gprs, atGD, cmd is atd*98#"); | |
2008 sAT_PercentWAP(srcId, 1); | |
2009 } | |
2010 l2pID = GPRS_CID_OMITTED; | |
2011 } | |
2012 | |
2013 #else /* defined(WAP) OR defined(FF_GPF_TCPIP) || defined (FF_SAT_E)*/ | |
2014 if ( *(cl + 1) NEQ '9' || *(cl + 2) NEQ '9' ) | |
2015 { | |
2016 *gprs_command = FALSE; | |
2017 return (ATI_FAIL); | |
2018 } | |
2019 #endif /*defined(WAP) OR defined(FF_GPF_TCPIP) || defined (FF_SAT_E)*/ | |
2020 | |
2021 cl += 3; | |
2022 /* now *98 or *99 detected */ | |
2023 /* the next character must be # or * for GPRS, otherwise this is USSD and not GPRS related! */ | |
2024 | |
2025 if (*cl NEQ '#' AND *cl NEQ '*') | |
2026 { | |
2027 *gprs_command = FALSE; | |
2028 return (ATI_FAIL); | |
2029 } | |
2030 | |
2031 *gprs_command = TRUE; | |
2032 | |
2033 /* parse the parameter list */ | |
2034 while ( *cl EQ '*' ) | |
2035 { | |
2036 count ++; /* count the parameter of the command */ | |
2037 cl ++; | |
2038 p_save_char = strpbrk (cl, "*#" ); | |
2039 if ( !p_save_char ) | |
2040 { /* Bad user input*/ | |
2041 cmdCmeError(CME_ERR_OpNotAllow); | |
2042 return (ATI_FAIL); | |
2043 } | |
2044 | |
2045 #if defined(FF_WAP) OR defined(FF_GPF_TCPIP) || defined (FF_SAT_E) | |
2046 if( Wap_Call ) | |
2047 { | |
2048 l2pID = *cl - '0'; | |
2049 cl++; | |
2050 break; | |
2051 } | |
2052 else | |
2053 #endif /* defined(WAP) OR defined(FF_GPF_TCPIP) || defined (FF_SAT_E)*/ | |
2054 { | |
2055 /* parse one parameter */ | |
2056 switch ( count ) | |
2057 { | |
2058 case 1: /* called_address */ | |
2059 cl = p_save_char; | |
2060 break; | |
2061 case 2: /* L2P */ | |
2062 if ( *cl NEQ '*' ) | |
2063 { | |
2064 l2pID = (SHORT) strtol(cl, &end, 10); | |
2065 | |
2066 if(cl + 1 EQ end) | |
2067 { /* L2P obmitted */ | |
2068 l2pID = -1; | |
2069 } | |
2070 else if(-1 EQ l2pID) | |
2071 { | |
2072 cmdCmeError(CME_ERR_OpNotAllow); | |
2073 return (ATI_FAIL); | |
2074 } | |
2075 cl = end; | |
2076 } | |
2077 break; | |
2078 case 3: /* cid */ | |
2079 save_char = *p_save_char; | |
2080 *p_save_char = 0; | |
2081 | |
2082 cid_array[0] = (SHORT) strtol(cl, &end, 10); | |
2083 | |
2084 *p_save_char = save_char; | |
2085 | |
2086 cl = end; | |
2087 break; | |
2088 default: | |
2089 /* Bad user input*/ | |
2090 cmdCmeError(CME_ERR_OpNotAllow); | |
2091 return (ATI_FAIL); | |
2092 } | |
2093 } | |
2094 | |
2095 } /* while */ | |
2096 | |
2097 /* check end of line charakter */ | |
2098 if ( *cl NEQ '#') | |
2099 { /* Bad user input*/ | |
2100 cmdCmeError(CME_ERR_OpNotAllow); | |
2101 return (ATI_FAIL); | |
2102 } | |
2103 | |
2104 #if defined(FF_WAP) OR defined(FF_GPF_TCPIP) || defined (FF_SAT_E) | |
2105 if ( Wap_Call ) | |
2106 { | |
2107 BYTE options; | |
2108 SHORT j = 0; | |
2109 SRCC_LINK_NO link_no = SRCC_INVALID_LINK; | |
2110 /* process WAP over GPRS */ | |
2111 | |
2112 /* | |
2113 *------------------------------------------------------------------- | |
2114 * check entity status | |
2115 *------------------------------------------------------------------- | |
2116 */ | |
2117 if( smEntStat.curCmd NEQ AT_CMD_NONE ) | |
2118 return( ATI_BUSY ); | |
2119 | |
2120 cid_array[0] = l2pID; | |
2121 | |
2122 if(is_gpf_tcpip_call()) { | |
2123 GPF_TCPIP_STATEMENT(link_no = SRCC_TCPIP_SNDCP_LINK); | |
2124 } | |
2125 else { | |
2126 link_no = SRCC_IP_SNDCP_LINK; | |
2127 } | |
2128 /* check number of context */ | |
2129 if ( TRUE NEQ srcc_reserve_sources( link_no, 1 ) ) | |
2130 { | |
2131 TRACE_EVENT ("srcc_reserve_sources failed!"); | |
2132 cmdCmeError(CME_ERR_Unknown); | |
2133 return ( ATI_FAIL ); | |
2134 } | |
2135 | |
2136 if ( cmhSM_define_cid_list( srcId, cid_array ) EQ 0) /* process cid list */ | |
2137 { | |
2138 TRACE_EVENT ("*** cmhSM_define_cid_list failed! ***"); | |
2139 cmdCmeError(CME_ERR_Unknown); | |
2140 return( ATI_FAIL ); | |
2141 } | |
2142 | |
2143 /* get dti id */ | |
2144 srcc_new_count(link_no); | |
2145 | |
2146 wap_dti_id = dti_cntrl_new_dti(DTI_DTI_ID_NOTPRESENT); | |
2147 pdp_context[work_cids[cid_pointer] - 1].link_id_new = | |
2148 dti_conn_compose_link_id (0,0, wap_dti_id, DTI_TUPLE_NO_NOTPRESENT ); | |
2149 pdp_context[work_cids[cid_pointer] - 1].owner = srcId; | |
2150 | |
2151 TRACE_EVENT_P1 ("ati_gprs, atGD, link_id_new = %0X", pdp_context[work_cids[0] - 1].link_id_new); | |
2152 | |
2153 /* set IP options */ | |
2154 if(is_gpf_tcpip_call()) { | |
2155 options = TCPIP_ACT_OPTION_V4 | TCPIP_ACT_OPTION_TCPIP; | |
2156 } | |
2157 else { | |
2158 options = TCPIP_ACT_OPTION_V4 | TCPIP_ACT_OPTION_UDP; | |
2159 } | |
2160 | |
2161 /* send request to ACI WAP to activate WAP */ | |
2162 smShrdPrm.owner = srcId; | |
2163 smEntStat.entOwn = smShrdPrm.owner; | |
2164 smEntStat.curCmd = AT_CMD_CGDATA; | |
2165 | |
2166 if(src_params) | |
2167 { | |
2168 src_params->curAtCmd = AT_CMD_CGDATA; | |
2169 } | |
2170 | |
2171 psaTCPIP_Activate( srcId, wap_dti_id, | |
2172 wapId, options, TCPIP_CONNECTION_TYPE_GPRS_WAP, | |
2173 cmhSM_IP_activate_cb); | |
2174 return (ATI_EXCT); | |
2175 | |
2176 } | |
2177 #endif /* defined(WAP) OR defined(FF_GPF_TCPIP) || defined (FF_SAT_E) */ | |
2178 /* | |
2179 * patch for testing of network requested context activation | |
2180 * and answer by dial-up-network (ATD -> ATA) | |
2181 */ | |
2182 if ( cmhSM_sAT_A( srcId, &ret ) EQ TRUE ) | |
2183 { | |
2184 switch (ret) | |
2185 { | |
2186 case (AT_CMPL): /*operation completed*/ | |
2187 return (ATI_CMPL); | |
2188 case (AT_EXCT): | |
2189 if(src_params) | |
2190 { | |
2191 src_params->curAtCmd = AT_CMD_CGANS; | |
2192 } | |
2193 return (ATI_EXCT); | |
2194 default: | |
2195 cmdCmeError(CME_ERR_Unknown); /*Command failed*/ | |
2196 return (ATI_FAIL); | |
2197 } | |
2198 } | |
2199 else | |
2200 { | |
2201 /* process function */ | |
2202 switch(l2pID) | |
2203 { | |
2204 case -1: /* L2P obmitted */ | |
2205 case 1: /* PPP */ | |
2206 break; | |
2207 | |
2208 #if defined(FF_PKTIO) OR defined(FF_TCP_IP) || defined(FF_GPF_TCPIP) OR defined (FF_PSI) | |
2209 case 901: /* M-PKT */ | |
2210 strcpy(L2P, "M-PKT"); | |
2211 break; | |
2212 #endif /* FF_PKTIO || FF_TCP_IP || FF_GPF_TCPIP OR FF_PSI */ | |
2213 case 0: /* NULL - not supported at this moment -> use CGACT */ | |
2214 default: | |
2215 cmdCmeError(CME_ERR_Unknown); /*Command failed*/ | |
2216 return (ATI_FAIL); | |
2217 } | |
2218 | |
2219 ret = sAT_PlusCGDATA ( srcId, L2P, cid_array ); | |
2220 switch (ret) | |
2221 { | |
2222 case (AT_CMPL): /*operation completed*/ | |
2223 return (ATI_CMPL); | |
2224 case (AT_EXCT): | |
2225 if(src_params) | |
2226 { | |
2227 src_params->curAtCmd = AT_CMD_CGDATA; | |
2228 } | |
2229 return (ATI_EXCT); | |
2230 case (AT_BUSY): | |
2231 cmdCmeError(CME_ERR_Unknown); /*Command failed*/ | |
2232 return (ATI_FAIL); | |
2233 default: | |
2234 cmdCmeError(CME_ERR_NotPresent); /*Command failed*/ | |
2235 return (ATI_FAIL); | |
2236 } | |
2237 } | |
2238 } | |
2239 | |
2240 | |
2241 /* | |
2242 +--------------------------------------------------------------------+ | |
2243 | PROJECT : GPRS (8441) MODULE : GACI_CMD | | |
2244 | STATE : finished ROUTINE : setatPercentCGAATT | | |
2245 +--------------------------------------------------------------------+ | |
2246 | |
2247 PURPOSE : %CGAATT command ( GPRS automatic attach mode ) | |
2248 */ | |
2249 | |
2250 GLOBAL T_ATI_RSLT setatPercentCGAATT (char *cl, UBYTE srcId) | |
2251 { | |
2252 | |
2253 T_ACI_RETURN ret = AT_FAIL; | |
2254 T_CGAATT_ATTACH_MODE att_m = CGAATT_ATTACH_MODE_OMITTED; | |
2255 T_CGAATT_DETACH_MODE det_m = CGAATT_DETACH_MODE_OMITTED; | |
2256 | |
2257 TRACE_FUNCTION("setatPercentCGAATT ()"); | |
2258 | |
2259 cl=parse(cl,"dd",&att_m, &det_m); | |
2260 | |
2261 #ifdef FF_ATI_BAT | |
2262 | |
2263 { | |
2264 T_BAT_cmd_send cmd; | |
2265 T_BAT_cmd_set_percent_cgaatt cgaatt; | |
2266 | |
2267 cmd.ctrl_params = BAT_CMD_SET_PERCENT_CGAATT; | |
2268 cmd.params.ptr_set_percent_cgaatt=&cgaatt; | |
2269 | |
2270 /* | |
2271 * This relies on T_CGAATT_ATTACH_MODE and T_GGAATT_DETACH_MODE being | |
2272 * identical to T_BAT_percent_cgaatt_att_m and T_BAT_percent_cgaatt_det_m. | |
2273 */ | |
2274 cgaatt.att_m=(T_BAT_percent_cgaatt_att_m)att_m; | |
2275 cgaatt.det_m=(T_BAT_percent_cgaatt_det_m)det_m; | |
2276 | |
2277 bat_send(ati_bat_get_client(srcId), &cmd); | |
2278 return(ATI_EXCT); | |
2279 } | |
2280 | |
2281 #else | |
2282 | |
2283 ret = sAT_PercentCGAATT ( srcId, att_m, det_m ); | |
2284 switch (ret) | |
2285 { | |
2286 case (AT_CMPL): /*operation completed*/ | |
2287 return (ATI_CMPL); | |
2288 case (AT_EXCT): | |
2289 default: | |
2290 cmdCmeError(CME_ERR_Unknown); /*Command failed*/ | |
2291 return (ATI_FAIL); | |
2292 } | |
2293 | |
2294 #endif /*FF_ATI_BAT*/ | |
2295 } | |
2296 | |
2297 GLOBAL T_ATI_RSLT queatPercentCGAATT (char *cl, UBYTE srcId) | |
2298 { | |
2299 #ifndef FF_ATI_BAT | |
2300 T_ACI_RETURN ret; | |
2301 T_CGAATT_ATTACH_MODE att_m = CGAATT_ATTACH_MODE_OMITTED; | |
2302 T_CGAATT_DETACH_MODE det_m = CGAATT_DETACH_MODE_OMITTED; | |
2303 #endif | |
2304 | |
2305 TRACE_FUNCTION("atPercentCGAATT ()"); | |
2306 | |
2307 #ifdef FF_ATI_BAT | |
2308 { | |
2309 T_BAT_cmd_send cmd; | |
2310 T_BAT_no_parameter dummy; | |
2311 | |
2312 cmd.ctrl_params = BAT_CMD_QUE_PERCENT_CGAATT; | |
2313 dummy.bat_dummy = 0xFF; | |
2314 cmd.params.ptr_que_percent_cgaatt = &dummy; | |
2315 bat_send(ati_bat_get_client(srcId), &cmd); | |
2316 return(ATI_EXCT); | |
2317 } | |
2318 #else | |
2319 | |
2320 ret = qAT_PercentCGAATT(srcId, &att_m, &det_m); | |
2321 if (ret EQ AT_CMPL) | |
2322 { | |
2323 sprintf(g_sa,"%s: %d,%d", "%CGAATT", att_m, det_m); | |
2324 io_sendMessage(srcId, g_sa, ATI_NORMAL_OUTPUT); | |
2325 return (ATI_CMPL); | |
2326 } | |
2327 else | |
2328 { | |
2329 cmdCmeError(CME_ERR_Unknown); | |
2330 return (ATI_FAIL); | |
2331 } | |
2332 | |
2333 #endif /*FF_ATI_BAT*/ | |
2334 } | |
2335 | |
2336 /* | |
2337 +--------------------------------------------------------------------+ | |
2338 | PROJECT : GPRS (8441) MODULE : GACI_CMD | | |
2339 | STATE : finished ROUTINE : setatPercentSNCNT | | |
2340 +--------------------------------------------------------------------+ | |
2341 | |
2342 PURPOSE : %SNCNT command ( SNDCP Counter ) | |
2343 = 0: reset SNCNT counter. | |
2344 ?: ask for current count. | |
2345 */ | |
2346 | |
2347 GLOBAL T_ATI_RSLT setatPercentSNCNT (CHAR *cl, UBYTE srcId) | |
2348 { | |
2349 T_ACI_RETURN ret = AT_CMPL; | |
2350 | |
2351 TRACE_FUNCTION("setatPercentSNCNT ()"); | |
2352 | |
2353 if( *cl NEQ '0' ) | |
2354 { | |
2355 cmdCmeError(CME_ERR_OpNotAllow); | |
2356 return (ATI_FAIL); | |
2357 } | |
2358 | |
2359 cl++; | |
2360 | |
2361 #ifdef FF_ATI_BAT | |
2362 | |
2363 { | |
2364 T_BAT_cmd_send cmd; | |
2365 T_BAT_cmd_set_percent_sncnt sncnt; | |
2366 | |
2367 cmd.ctrl_params = BAT_CMD_SET_PERCENT_SNCNT; | |
2368 cmd.params.ptr_set_percent_sncnt=&sncnt; | |
2369 | |
2370 sncnt.rst=BAT_P_SNCNT_RESET_RESET; | |
2371 | |
2372 bat_send(ati_bat_get_client(srcId), &cmd); | |
2373 return(ATI_EXCT); | |
2374 } | |
2375 | |
2376 #else | |
2377 | |
2378 /* AT%SNCNT = 0 resets counter */ | |
2379 ret = sAT_PercentSNCNT( srcId, TRUE ); | |
2380 | |
2381 return (map_aci_2_ati_rslt(ret)); | |
2382 | |
2383 #endif /*FF_ATI_BAT*/ | |
2384 } | |
2385 | |
2386 GLOBAL T_ATI_RSLT queatPercentSNCNT (CHAR *cl, UBYTE srcId) | |
2387 { | |
2388 T_ACI_RETURN ret = AT_CMPL; | |
2389 | |
2390 TRACE_FUNCTION("queatPercentSNCNT ()"); | |
2391 | |
2392 #ifdef FF_ATI_BAT | |
2393 { | |
2394 T_BAT_cmd_send cmd; | |
2395 T_BAT_no_parameter dummy; | |
2396 | |
2397 cmd.ctrl_params = BAT_CMD_QUE_PERCENT_SNCNT; | |
2398 dummy.bat_dummy = 0xFF; | |
2399 cmd.params.ptr_que_percent_sncnt = &dummy; | |
2400 bat_send(ati_bat_get_client(srcId), &cmd); | |
2401 return(ATI_EXCT); | |
2402 } | |
2403 | |
2404 #else | |
2405 | |
2406 /* AT%SNCNT? returns current counter without resetting */ | |
2407 ret = sAT_PercentSNCNT( srcId, FALSE ); | |
2408 | |
2409 return (map_aci_2_ati_rslt(ret)); | |
2410 | |
2411 #endif /*FF_ATI_BAT*/ | |
2412 } | |
2413 | |
2414 /* | |
2415 +--------------------------------------------------------------------+ | |
2416 | PROJECT : GPRS (8441) MODULE : GACI_CMD | | |
2417 | STATE : finished ROUTINE : setatPercentCGMM | | |
2418 +--------------------------------------------------------------------+ | |
2419 | |
2420 PURPOSE : %CGMM command ( Configure GMM ) | |
2421 %CGMM = cipher_on, tlli_handling | |
2422 */ | |
2423 | |
2424 GLOBAL T_ATI_RSLT setatPercentCGMM(CHAR *cl, UBYTE srcId) | |
2425 { | |
2426 T_ACI_RETURN ret = AT_CMPL; | |
2427 USHORT cipher_on, tlli_handling; | |
2428 | |
2429 cl=parse(cl, "rr", &cipher_on, &tlli_handling); | |
2430 | |
2431 if(!cl) | |
2432 { | |
2433 cmdCmeError(CME_ERR_OpNotAllow); | |
2434 return (ATI_FAIL); | |
2435 } | |
2436 | |
2437 #ifdef FF_ATI_BAT | |
2438 { | |
2439 T_BAT_cmd_send cmd; | |
2440 T_BAT_cmd_set_percent_cgmm my_bat_set_percent_cgmm; | |
2441 | |
2442 TRACE_FUNCTION("setatPercentCGMM() calls bat_send() <=== as APPLICATION"); | |
2443 | |
2444 memset(&my_bat_set_percent_cgmm, 0, sizeof(my_bat_set_percent_cgmm)); | |
2445 cmd.ctrl_params = BAT_CMD_SET_PERCENT_CGMM; | |
2446 cmd.params.ptr_set_percent_cgmm = &my_bat_set_percent_cgmm; | |
2447 | |
2448 my_bat_set_percent_cgmm.cipher_on = cipher_on; | |
2449 my_bat_set_percent_cgmm.tlli_handling = tlli_handling; | |
2450 | |
2451 bat_send(ati_bat_get_client(srcId), &cmd); | |
2452 | |
2453 return ATI_EXCT; /* executing, because response is passed by callback function */ | |
2454 } | |
2455 #else /* OLD FUNCTION BODY */ | |
2456 | |
2457 TRACE_FUNCTION("setatPercentCGMM()"); | |
2458 | |
2459 ret = sAT_PercentCGMM( srcId, (UBYTE)cipher_on, (UBYTE)tlli_handling ); | |
2460 | |
2461 if (ret NEQ AT_CMPL) | |
2462 { | |
2463 cmdCmeError(CME_ERR_Unknown); | |
2464 return (ATI_FAIL); | |
2465 } | |
2466 return (ATI_CMPL); | |
2467 | |
2468 #endif /* no FF_ATI_BAT*/ | |
2469 } | |
2470 | |
2471 | |
2472 GLOBAL T_ATI_RSLT setatPercentCGPCO_HEX (USHORT cid, | |
2473 UBYTE *pco_hex_string, USHORT len) | |
2474 { | |
2475 USHORT pco_len; | |
2476 UBYTE *pco_array; | |
2477 int i; | |
2478 | |
2479 ACI_MALLOC (pco_array, ACI_PCO_MAX_LEN + 1); | |
2480 | |
2481 pco_len = utl_HexStrToBin (pco_hex_string, len, | |
2482 pco_array, ACI_PCO_MAX_LEN + 1); | |
2483 if (pco_len EQ 0) | |
2484 { | |
2485 cmdCmeError (CME_ERR_InvalidTxtChar); | |
2486 ACI_MFREE (pco_array); | |
2487 return (ATI_FAIL); | |
2488 } | |
2489 | |
2490 if (cid EQ 0) | |
2491 { | |
2492 for (i = 0; i < MAX_CID; i++) | |
2493 { | |
2494 pdp_context[i].user_pco.len = (UBYTE)pco_len; | |
2495 memcpy (pdp_context[i].user_pco.pco, pco_array, pco_len); | |
2496 } | |
2497 } | |
2498 else | |
2499 { | |
2500 pdp_context[cid - 1].user_pco.len = (UBYTE)pco_len; | |
2501 memcpy (pdp_context[cid - 1].user_pco.pco, pco_array, pco_len); | |
2502 } | |
2503 | |
2504 ACI_MFREE (pco_array); | |
2505 | |
2506 return (ATI_CMPL); | |
2507 } | |
2508 | |
2509 GLOBAL T_ATI_RSLT setatPercentCGPCO_ASCII (UBYTE srcId, USHORT cid, | |
2510 UBYTE *pco_ascii_string, USHORT len) | |
2511 { | |
2512 CHAR aut_prot[5]; | |
2513 CHAR user[MAX_USER_LEN+1]; /* + '\0' */ | |
2514 CHAR pwd[MAX_PWD_LEN+1]; /* + '\0' */ | |
2515 CHAR dns1[MAX_DNS_LEN]; | |
2516 CHAR dns2[MAX_DNS_LEN]; | |
2517 CHAR *cl; | |
2518 | |
2519 TRACE_FUNCTION("setatPercentCGPCO_ASCII():"); | |
2520 | |
2521 /* Initialize arrays */ | |
2522 user[0] = '\0'; | |
2523 pwd[0] = '\0'; | |
2524 dns1[0] = '\0'; | |
2525 dns2[0] = '\0'; | |
2526 | |
2527 cl = parse ((CHAR*)pco_ascii_string, "qqqqq", | |
2528 sizeof (aut_prot), aut_prot, | |
2529 sizeof (user), user, sizeof (pwd), pwd, sizeof(dns1), dns1, sizeof(dns2), dns2); | |
2530 | |
2531 if(cl EQ NULL) | |
2532 { | |
2533 cmdCmeError (CME_ERR_InvalidTxtChar); | |
2534 return (ATI_FAIL); | |
2535 } | |
2536 if (strcmp (aut_prot, "PAP")) | |
2537 { | |
2538 cmdCmeError (CME_ERR_OpNotSupp); | |
2539 return (ATI_FAIL); | |
2540 } | |
2541 | |
2542 if (sAT_PercentCGPCO (srcId, cid, | |
2543 ACI_PCO_AUTH_PROT_PAP, user, pwd, dns1, dns2) EQ AT_FAIL) | |
2544 { | |
2545 cmdCmeError (CME_ERR_Unknown); | |
2546 return (ATI_FAIL); | |
2547 } | |
2548 | |
2549 return (ATI_CMPL); | |
2550 } | |
2551 | |
2552 /* | |
2553 +--------------------------------------------------------------------+ | |
2554 | PROJECT : GPRS MODULE : ATI_GPRS | | |
2555 | STATE : finished ROUTINE : ipaddr_to_string | | |
2556 +--------------------------------------------------------------------+ | |
2557 | |
2558 PURPOSE : print the IP address (little endian!) to the supplied string. | |
2559 | |
2560 */ | |
2561 GLOBAL void ipaddr_to_string(ULONG ipaddr, char *ipaddr_string) | |
2562 { | |
2563 UBYTE *addrbyte_p ; /* Pointer to single address bytes. */ | |
2564 | |
2565 if (ipaddr_string) | |
2566 { | |
2567 addrbyte_p = (UBYTE *) &ipaddr ; | |
2568 if (ipaddr NEQ 0) | |
2569 { | |
2570 /* This is for little endian *only*! */ | |
2571 sprintf(ipaddr_string,"%u.%u.%u.%u", | |
2572 addrbyte_p[3], addrbyte_p[2], addrbyte_p[1], addrbyte_p[0]); | |
2573 } | |
2574 else | |
2575 { | |
2576 *ipaddr_string = '\0' ; | |
2577 } | |
2578 } | |
2579 } | |
2580 | |
2581 | |
2582 /* | |
2583 +--------------------------------------------------------------------+ | |
2584 | PROJECT : GPRS MODULE : GACI_CMD | | |
2585 | STATE : finished ROUTINE : queatPercentCGPCO | | |
2586 +--------------------------------------------------------------------+ | |
2587 | |
2588 PURPOSE : %CGPCO command | |
2589 * query network pco for cid | |
2590 */ | |
2591 | |
2592 GLOBAL T_ATI_RSLT queatPercentCGPCO (UBYTE srcId, USHORT cid) | |
2593 { | |
2594 char *me="%CGPCO: "; | |
2595 ULONG gateway,dns1,dns2; | |
2596 char dns1_str[sizeof("255.255.255.255")]; | |
2597 char dns2_str[sizeof("255.255.255.255")]; | |
2598 char gatew_str[sizeof("255.255.255.255")]; | |
2599 USHORT i; /* Counter for loop over context IDs. */ | |
2600 | |
2601 TRACE_FUNCTION("queatPercentCGPCO( )"); | |
2602 | |
2603 if(!cid) /* for all available cid's: recurse */ | |
2604 { | |
2605 for (i=1; i<MAX_CID; i++) | |
2606 { | |
2607 queatPercentCGPCO(srcId, i) ; | |
2608 } | |
2609 } | |
2610 else /* for a specific cid */ | |
2611 { | |
2612 gateway = dns1 = dns2 = 0 ; /* Just in case... */ | |
2613 qAT_PercentCGPCO(srcId,&gateway,&dns1,&dns2,cid); | |
2614 if(dns1 OR dns2 OR gateway) | |
2615 { | |
2616 ipaddr_to_string(dns1, dns1_str); | |
2617 ipaddr_to_string(dns2, dns2_str); | |
2618 ipaddr_to_string(gateway, gatew_str); | |
2619 sprintf(g_sa, "%s\"%s,%s,%s\",%d", | |
2620 me, dns1_str, dns2_str, gatew_str, cid) ; | |
2621 | |
2622 io_sendMessage (srcId, g_sa, ATI_NORMAL_OUTPUT); | |
2623 } | |
2624 } | |
2625 return (ATI_CMPL); | |
2626 } | |
2627 | |
2628 /* | |
2629 +--------------------------------------------------------------------+ | |
2630 | PROJECT : GPRS MODULE : GACI_CMD | | |
2631 | STATE : finished ROUTINE : setatPercentCGPCO | | |
2632 +--------------------------------------------------------------------+ | |
2633 | |
2634 PURPOSE : %CGPCO command | |
2635 * set the PCO for context activation | |
2636 */ | |
2637 | |
2638 GLOBAL T_ATI_RSLT setatPercentCGPCO(CHAR *cl, UBYTE srcId) | |
2639 { | |
2640 USHORT cid = 0; | |
2641 T_ACI_CGPCO_FORMAT format; | |
2642 T_ATI_RSLT ret = ATI_FAIL; | |
2643 CHAR *pco_string; | |
2644 T_ACI_CGPCO_MODE mode; | |
2645 | |
2646 TRACE_FUNCTION("setatPercentCGPCO()"); | |
2647 | |
2648 ACI_MALLOC (pco_string, ACI_PCO_MAX_LEN * 2 + 1); | |
2649 | |
2650 cl = parse(cl, "ddsr",&mode, &format, ACI_PCO_MAX_LEN * 2 + 1, pco_string, &cid); | |
2651 | |
2652 if(cl EQ NULL) | |
2653 { | |
2654 cmdCmeError (CME_ERR_OpNotAllow); | |
2655 } | |
2656 else if (cid > MAX_CID) | |
2657 { | |
2658 cmdCmeError (CME_ERR_OpNotSupp); | |
2659 } | |
2660 else | |
2661 { | |
2662 | |
2663 #ifdef FF_ATI_BAT | |
2664 | |
2665 T_BAT_cmd_send cmd; | |
2666 T_BAT_cmd_set_percent_cgpco cgpco; | |
2667 SHORT len; | |
2668 | |
2669 cmd.ctrl_params = BAT_CMD_SET_PERCENT_CGPCO; | |
2670 cmd.params.ptr_set_percent_cgpco=&cgpco; | |
2671 | |
2672 cgpco.cid=(T_BAT_pdp_cid)cid; | |
2673 cgpco.v_pco=FALSE; | |
2674 | |
2675 ret=ATI_EXCT; | |
2676 | |
2677 switch (mode) | |
2678 { | |
2679 case CGPCO_MODE_QUERY_PCO: | |
2680 cgpco.mode=BAT_P_CGPCO_MODE_QUERY_PCO; | |
2681 cgpco.format=(T_BAT_percent_cgpco_format)format; | |
2682 break; | |
2683 | |
2684 case CGPCO_MODE_SET_PCO: | |
2685 cgpco.mode=BAT_P_CGPCO_MODE_SET_PCO; | |
2686 cgpco.format=(T_BAT_percent_cgpco_format)format; | |
2687 | |
2688 len=strlen(pco_string); | |
2689 | |
2690 if (len>BAT_MAX_CGPCO_PCO_LEN) | |
2691 { | |
2692 ret=ATI_FAIL; | |
2693 } | |
2694 else | |
2695 { | |
2696 memcpy(cgpco.pco,pco_string,len); | |
2697 cgpco.c_pco=(U8)len; | |
2698 cgpco.v_pco=TRUE; | |
2699 } | |
2700 break; | |
2701 | |
2702 default: | |
2703 cmdCmeError(CME_ERR_OpNotSupp); | |
2704 ret=ATI_FAIL; | |
2705 break; | |
2706 } | |
2707 | |
2708 if (ret==ATI_EXCT) | |
2709 { | |
2710 bat_send(ati_bat_get_client(srcId), &cmd); | |
2711 } | |
2712 | |
2713 #else | |
2714 | |
2715 switch (mode) | |
2716 { | |
2717 case CGPCO_MODE_QUERY_PCO: | |
2718 ret = queatPercentCGPCO (srcId,cid); | |
2719 break; | |
2720 case CGPCO_MODE_SET_PCO: | |
2721 switch (format) | |
2722 { | |
2723 case CGPCO_FORMAT_HEX: | |
2724 ret = setatPercentCGPCO_HEX (cid, (UBYTE*)pco_string, (USHORT)strlen (pco_string)); | |
2725 break; | |
2726 case CGPCO_FORMAT_ASCII: | |
2727 ret = setatPercentCGPCO_ASCII (srcId, cid, (UBYTE*)pco_string, (USHORT)strlen (pco_string)); | |
2728 break; | |
2729 default: | |
2730 cmdCmeError (CME_ERR_OpNotSupp); | |
2731 break; | |
2732 } | |
2733 break; | |
2734 default: | |
2735 cmdCmeError (CME_ERR_OpNotSupp); | |
2736 break; | |
2737 } | |
2738 #endif | |
2739 | |
2740 } | |
2741 | |
2742 ACI_MFREE (pco_string); | |
2743 | |
2744 return (ret); | |
2745 } | |
2746 | |
2747 /* | |
2748 +--------------------------------------------------------------------+ | |
2749 | PROJECT : GPRS MODULE : GACI_CMD | | |
2750 | STATE : finished ROUTINE : setatPercentCGPPP | | |
2751 +--------------------------------------------------------------------+ | |
2752 | |
2753 PURPOSE : %CGPPP command | |
2754 * set PPP values in GPRS case | |
2755 | |
2756 PPP_AP_NO 0x0 no authentication | |
2757 PPP_AP_PAP 0x1 password authentication protocol | |
2758 PPP_AP_CHAP 0x2 challenge handshake authentication protocol | |
2759 PPP_AP_AUTO 0x3 automatic authentication | |
2760 | |
2761 */ | |
2762 | |
2763 GLOBAL T_ATI_RSLT setatPercentCGPPP (CHAR *cl, UBYTE srcId) | |
2764 { | |
2765 T_ACI_PPP_PROT protocol; | |
2766 T_ACI_RETURN ret = ATI_FAIL; | |
2767 | |
2768 cl = parse(cl, "d", &protocol); | |
2769 | |
2770 if (!cl) | |
2771 { | |
2772 cmdCmeError(CME_ERR_OpNotAllow); | |
2773 return ret; | |
2774 } | |
2775 | |
2776 #ifdef FF_ATI_BAT | |
2777 { | |
2778 T_BAT_cmd_send cmd; | |
2779 T_BAT_cmd_set_percent_cgppp my_bat_set_percent_cgppp; | |
2780 | |
2781 TRACE_FUNCTION("setatPercentCGPPP() calls bat_send() <=== as APPLICATION"); | |
2782 | |
2783 memset(&my_bat_set_percent_cgppp, 0, sizeof(my_bat_set_percent_cgppp)); | |
2784 cmd.ctrl_params = BAT_CMD_SET_PERCENT_CGPPP; | |
2785 cmd.params.ptr_set_percent_cgppp = &my_bat_set_percent_cgppp; | |
2786 | |
2787 my_bat_set_percent_cgppp.protocol = protocol; | |
2788 | |
2789 bat_send(ati_bat_get_client(srcId), &cmd); | |
2790 | |
2791 return ATI_EXCT; /* executing, because response is passed by callback function */ | |
2792 } | |
2793 #else /* OLD FUNCTION BODY */ | |
2794 | |
2795 TRACE_FUNCTION("setatPercentCGPPP( )"); | |
2796 | |
2797 ret = sAT_PercentCGPPP(srcId, protocol); | |
2798 if (ret EQ AT_FAIL) | |
2799 { | |
2800 cmdCmeError(CME_ERR_Unknown); | |
2801 return (ATI_FAIL); | |
2802 } | |
2803 return (map_aci_2_ati_rslt(ret)); | |
2804 | |
2805 #endif /* no FF_ATI_BAT*/ | |
2806 } | |
2807 | |
2808 /* | |
2809 +--------------------------------------------------------------------+ | |
2810 | PROJECT : GPRS MODULE : GACI_CMD | | |
2811 | STATE : finished ROUTINE : queatPercentCGPPP | | |
2812 +--------------------------------------------------------------------+ | |
2813 | |
2814 PURPOSE : %CGPPP command | |
2815 * query PPP values in GPRS case | |
2816 | |
2817 PPP_AP_NO 0x0 no authentication | |
2818 PPP_AP_PAP 0x1 password authentication protocol | |
2819 PPP_AP_CHAP 0x2 challenge handshake authentication protocol | |
2820 PPP_AP_AUTO 0x3 automatic authentication | |
2821 | |
2822 */ | |
2823 | |
2824 GLOBAL T_ATI_RSLT queatPercentCGPPP (CHAR *cl, UBYTE srcId) | |
2825 { | |
2826 #ifndef FF_ATI_BAT | |
2827 T_ACI_PPP_PROT protocol; | |
2828 T_ACI_RETURN ret; | |
2829 #endif | |
2830 | |
2831 TRACE_FUNCTION("queatPercentCGPPP( )"); | |
2832 | |
2833 #ifdef FF_ATI_BAT | |
2834 { | |
2835 T_BAT_cmd_send cmd; | |
2836 T_BAT_no_parameter dummy; | |
2837 | |
2838 cmd.ctrl_params = BAT_CMD_QUE_PERCENT_CGPPP; | |
2839 dummy.bat_dummy = 0xFF; | |
2840 cmd.params.ptr_que_percent_cgppp = &dummy; | |
2841 bat_send(ati_bat_get_client(srcId), &cmd); | |
2842 return(ATI_EXCT); | |
2843 } | |
2844 #else | |
2845 | |
2846 ret = qAT_PercentCGPPP(srcId, &protocol); | |
2847 if (ret EQ AT_FAIL) | |
2848 { | |
2849 cmdCmeError(CME_ERR_Unknown); | |
2850 return (ATI_FAIL); | |
2851 } | |
2852 | |
2853 sprintf (g_sa, "%s: %d", "%CGPPP", protocol); | |
2854 io_sendMessage (srcId, g_sa, ATI_NORMAL_OUTPUT); | |
2855 | |
2856 return (map_aci_2_ati_rslt(ret)); | |
2857 | |
2858 #endif /*FF_ATI_BAT*/ | |
2859 } | |
2860 /* | |
2861 +--------------------------------------------------------------------+ | |
2862 | PROJECT : GPRS (8441) MODULE : GACI_CMD | | |
2863 | STATE : finished ROUTINE : atPercentCGCLASS | | |
2864 +--------------------------------------------------------------------+ | |
2865 | |
2866 PURPOSE : %CGCLASS command (GPRS class change) | |
2867 */ | |
2868 | |
2869 GLOBAL T_ATI_RSLT setatPercentCGCLASS (CHAR *cl, UBYTE srcId) | |
2870 { | |
2871 #ifndef FF_ATI_BAT | |
2872 char *me="+CGCLASS: "; | |
2873 T_ACI_RETURN ret; | |
2874 #endif | |
2875 | |
2876 T_PERCENT_CGCLASS m_class = PERCENT_CGCLASS_OMITTED; | |
2877 char test_class[3]=""; | |
2878 | |
2879 TRACE_FUNCTION("setatPercentCGCLASS ()"); | |
2880 | |
2881 cl = parse (cl,"s", (LONG)3, &test_class ); | |
2882 | |
2883 switch (*test_class) | |
2884 { | |
2885 case 'A': | |
2886 break; | |
2887 case 'B': | |
2888 switch(*(test_class + 1)) | |
2889 { | |
2890 case 'G': | |
2891 m_class = PERCENT_CGCLASS_BG; | |
2892 break; | |
2893 case 'C': | |
2894 m_class = PERCENT_CGCLASS_BC; | |
2895 break; | |
2896 case 'X': | |
2897 m_class = PERCENT_CGCLASS_BX; | |
2898 break; | |
2899 case '\0': | |
2900 m_class = PERCENT_CGCLASS_B; | |
2901 break; | |
2902 default: | |
2903 break; | |
2904 } | |
2905 break; | |
2906 case 'C': | |
2907 switch(*(test_class + 1)) | |
2908 { | |
2909 case 'G': | |
2910 m_class = PERCENT_CGCLASS_CG; | |
2911 break; | |
2912 case 'C': | |
2913 m_class = PERCENT_CGCLASS_CC; | |
2914 break; | |
2915 default: | |
2916 break; | |
2917 } | |
2918 break; | |
2919 default: | |
2920 break; | |
2921 } | |
2922 | |
2923 if ( !cl OR m_class == PERCENT_CGCLASS_OMITTED ) | |
2924 { | |
2925 cmdCmeError(CME_ERR_OpNotAllow); | |
2926 return (ATI_FAIL); | |
2927 } | |
2928 | |
2929 #ifdef FF_ATI_BAT | |
2930 | |
2931 { | |
2932 T_BAT_cmd_send cmd; | |
2933 T_BAT_cmd_set_percent_cgclass cgclass; | |
2934 | |
2935 cmd.ctrl_params = BAT_CMD_SET_PERCENT_CGCLASS; | |
2936 cmd.params.ptr_set_percent_cgclass=&cgclass; | |
2937 | |
2938 /* | |
2939 * BAT and ACI versions of mobile class are different enough | |
2940 * to require this conversion. | |
2941 */ | |
2942 | |
2943 /* | |
2944 * This relies on T_BAT_p_mobile_class and T_PERCENT_CGCLASS | |
2945 * being identical. | |
2946 */ | |
2947 cgclass.p_mobile_class=(T_BAT_p_mobile_class)m_class; | |
2948 | |
2949 bat_send(ati_bat_get_client(srcId), &cmd); | |
2950 return(ATI_EXCT); | |
2951 } | |
2952 | |
2953 #else | |
2954 | |
2955 ret = sAT_PercentCGCLASS ( srcId, m_class ); | |
2956 if (ret EQ AT_FAIL) | |
2957 { | |
2958 cmdCmeError (CME_ERR_OpNotAllow); | |
2959 return (ATI_FAIL); | |
2960 } | |
2961 return (map_aci_2_ati_rslt(ret)); | |
2962 | |
2963 #endif | |
2964 } | |
2965 | |
2966 GLOBAL T_ATI_RSLT queatPercentCGCLASS (CHAR *cl, UBYTE srcId) | |
2967 { | |
2968 #ifndef FF_ATI_BAT | |
2969 char *classes[] = {"A","B","BG","BC","BX","CG","CC"}; | |
2970 T_ACI_RETURN ret; | |
2971 T_PERCENT_CGCLASS m_class, currentClass; | |
2972 char test_class[3]=""; | |
2973 #endif | |
2974 | |
2975 TRACE_FUNCTION("queatPercentCGCLASS ()"); | |
2976 | |
2977 #ifdef FF_ATI_BAT | |
2978 { | |
2979 T_BAT_cmd_send cmd; | |
2980 T_BAT_no_parameter dummy; | |
2981 | |
2982 cmd.ctrl_params = BAT_CMD_QUE_PERCENT_CGCLASS; | |
2983 dummy.bat_dummy = 0xFF; | |
2984 cmd.params.ptr_que_plus_cgclass = &dummy; | |
2985 bat_send(ati_bat_get_client(srcId), &cmd); | |
2986 return(ATI_EXCT); | |
2987 } | |
2988 #else | |
2989 | |
2990 ret = qAT_PercentCGCLASS(srcId, &m_class, ¤tClass); | |
2991 if (ret EQ AT_CMPL) | |
2992 { | |
2993 if(m_class NEQ currentClass) | |
2994 { | |
2995 sprintf(g_sa,"%s: \"%s\",\"%s\"", "%CGCLASS", classes[m_class], classes[currentClass]); | |
2996 } | |
2997 else | |
2998 { | |
2999 sprintf(g_sa,"%s: \"%s\"", "%CGCLASS", classes[m_class]); | |
3000 } | |
3001 io_sendMessage(srcId, g_sa, ATI_NORMAL_OUTPUT); | |
3002 } | |
3003 | |
3004 return (map_aci_2_ati_rslt(ret)); | |
3005 | |
3006 #endif /*FF_ATI_BAT*/ | |
3007 } | |
3008 #endif /* GPRS */ | |
3009 |