comparison gsm-fw/g23m-aci/aci/aci_bat_bas.c @ 775:eedbf248bac0

gsm-fw/g23m-aci subtree: initial import from LoCosto source
author Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
date Sun, 12 Oct 2014 01:45:14 +0000
parents
children
comparison
equal deleted inserted replaced
774:40a721fd9854 775:eedbf248bac0
1 /*
2 +-----------------------------------------------------------------------------
3 | Project : GSM-F&D (8411)
4 | Modul : ACI_BAT
5 +-----------------------------------------------------------------------------
6 | Copyright 2002 Texas Instruments Berlin, AG
7 | All rights reserved.
8 |
9 | This file is confidential and a trade secret of Texas
10 | Instruments Berlin, AG
11 | The receipt of or possession of this file does not convey
12 | any rights to reproduce or disclose its contents or to
13 | manufacture, use, or sell anything it may describe, in
14 | whole, or in part, without the specific written consent of
15 | Texas Instruments Berlin, AG.
16 +-----------------------------------------------------------------------------
17 | Purpose : This BAT wrapper modul is ...
18 |
19 +-----------------------------------------------------------------------------
20 */
21
22 #include "aci_all.h" /* includes prim.h, which includes p_bat.h */
23 #include "aci_cmh.h" /* prototypes of sAT_,qAT_,tAT_ */
24 #include "aci_bat_cmh.h" /* prototypes of sBAT_,qBAT_,tBAT_ */
25 #include "aci_bat.h"
26 #include "pwr.h" /* see sBAT_PlusCBC() */
27 #include "audio.h" /* see sBAT_PlusCLVL(), qBAT_PlusCLVL() */
28 #include "pcm.h" /* see aciBatPrcsPlusCG() */
29
30 LOCAL T_ACI_BAT_RSLT aciBatPrcsPlusCG (UBYTE *rc, USHORT *le, size_t ml, CHAR *ef);
31
32 /*
33 +--------------------------------------------------------------------+
34 | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
35 | STATE : code ROUTINE : BAT_Z |
36 +--------------------------------------------------------------------+
37
38 PURPOSE :
39 */
40 GLOBAL T_ACI_BAT_RSLT BAT_Z (T_ACI_DTI_PRC_PSI *src_infos_psi,
41 T_BAT_cmd_send *cmd)
42 {
43 T_ACI_BAT_RSLT ret;
44
45 TRACE_FUNCTION ("BAT_Z()");
46
47 ret=(T_ACI_BAT_RSLT)sAT_Z((T_ACI_CMD_SRC)src_infos_psi->srcId,0);
48
49 return(ret);
50 }
51
52
53 /*
54 +--------------------------------------------------------------------+
55 | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
56 | STATE : code ROUTINE : sBAT_PlusCPAS |
57 +--------------------------------------------------------------------+
58
59 PURPOSE :
60 */
61 GLOBAL T_ACI_BAT_RSLT sBAT_PlusCPAS (T_ACI_DTI_PRC_PSI *src_infos_psi,
62 T_BAT_cmd_send *cmd)
63 {
64 T_ACI_BAT_RSLT ret;
65 T_ACI_CPAS_PAS pas;
66
67 TRACE_FUNCTION ("sBAT_PlusCPAS()");
68
69 /*
70 * The ACI has implemented the 'set' operation of +CPAS as a qAT function.
71 */
72 ret=(T_ACI_BAT_RSLT)qAT_PlusCPAS((T_ACI_CMD_SRC)src_infos_psi->srcId,&pas);
73
74 if (ret EQ ACI_BAT_CMPL)
75 {
76 T_BAT_cmd_response resp;
77 T_BAT_res_set_plus_cpas cpas_data;
78
79 resp.ctrl_response=BAT_RES_SET_PLUS_CPAS;
80 resp.response.ptr_set_plus_cpas=&cpas_data;
81
82 /*
83 * This relies on T_BAT_plus_cpas_pas being identical to
84 * T_ACI_CPAS_PAS. They aren't quite the same, the BAT version
85 * doesn't have a 'not present' value, but as the parameter in
86 * question is mandatory this shouldn't be a problem.
87 */
88 cpas_data.pas=(T_BAT_plus_cpas_pas)pas;
89
90 aci_bat_send(src_infos_psi,&resp);
91 }
92
93 return(ret);
94 }
95
96 /*
97 +--------------------------------------------------------------------+
98 | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
99 | STATE : code ROUTINE : BAT_ANDC |
100 +--------------------------------------------------------------------+
101
102 PURPOSE :
103 */
104 GLOBAL T_ACI_BAT_RSLT BAT_ANDC (T_ACI_DTI_PRC_PSI *src_infos_psi,
105 T_BAT_cmd_send *cmd)
106 {
107 T_ACI_BAT_RSLT ret;
108 T_ACI_DCD_MOD dcd;
109
110 TRACE_FUNCTION ("BAT_ANDC()");
111
112 /*
113 * This relies on T_BAT_andc_value being identical to
114 * T_ACI_DCD_MOD.
115 */
116 dcd=(T_ACI_DCD_MOD)cmd->params.ptr_andc->value;
117
118 /*
119 * Call the corresponding ACI function. T_ACI_BAT_RSLT is
120 * assumed to be equivalent to T_ACI_RESULT.
121 */
122 ret=(T_ACI_BAT_RSLT)sAT_AndC((T_ACI_CMD_SRC)src_infos_psi->srcId,dcd);
123
124 return(ret);
125 }
126
127 /*
128 +--------------------------------------------------------------------+
129 | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
130 | STATE : code ROUTINE : BAT_ANDF |
131 +--------------------------------------------------------------------+
132
133 PURPOSE :
134 */
135 GLOBAL T_ACI_BAT_RSLT BAT_ANDF (T_ACI_DTI_PRC_PSI *src_infos_psi,
136 T_BAT_cmd_send *cmd)
137 {
138 T_ACI_BAT_RSLT ret;
139
140 TRACE_FUNCTION ("BAT_ANDF()");
141
142 /*
143 * Call the corresponding ACI function. T_ACI_BAT_RSLT is
144 * assumed to be equivalent to T_ACI_RESULT.
145 */
146 ret=(T_ACI_BAT_RSLT)sAT_AndF((T_ACI_CMD_SRC)src_infos_psi->srcId,0);
147
148 return(ret);
149 }
150
151 /*
152 +--------------------------------------------------------------------+
153 | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
154 | STATE : code ROUTINE : sBAT_PlusCSQ |
155 +--------------------------------------------------------------------+
156
157 PURPOSE :
158 */
159 GLOBAL T_ACI_BAT_RSLT sBAT_PlusCSQ (T_ACI_DTI_PRC_PSI *src_infos_psi,
160 T_BAT_cmd_send *cmd)
161 {
162 T_ACI_BAT_RSLT ret;
163 UBYTE rssi;
164 UBYTE ber;
165 UBYTE actlevel;
166 #ifdef FF_PS_RSSI
167 UBYTE min_access_level;
168 #endif
169
170 TRACE_FUNCTION ("sBAT_PlusCSQ()");
171
172 /*
173 * The ACI has implemented the 'set' operation of +CSQ as a qAT function.
174 * There isn't a separate qAT_PlusCSQ() function, so we must use the
175 * 'percent' version and ignore the extra 'actlevel' and min_access_level
176 * value returned.
177 */
178 #ifdef FF_PS_RSSI
179 ret=(T_ACI_BAT_RSLT)qAT_PercentCSQ((T_ACI_CMD_SRC)src_infos_psi->srcId,
180 &rssi,
181 &ber,
182 &actlevel,
183 &min_access_level);
184 #else
185 ret=(T_ACI_BAT_RSLT)qAT_PercentCSQ(src_infos_psi->srcId,&rssi,&ber,&actlevel);
186 #endif
187
188 if (ret EQ ACI_BAT_CMPL)
189 {
190 T_BAT_cmd_response resp;
191 T_BAT_res_set_plus_csq csq_data;
192
193 resp.ctrl_response=BAT_RES_SET_PLUS_CSQ;
194 resp.response.ptr_set_plus_csq=&csq_data;
195
196 csq_data.rssi=(U8)rssi;
197 csq_data.ber=(U8)ber;
198
199 aci_bat_send(src_infos_psi,&resp);
200 }
201
202 return(ret);
203 }
204
205 /*
206 +--------------------------------------------------------------------+
207 | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
208 | STATE : code ROUTINE : sBAT_PercentCSQ |
209 +--------------------------------------------------------------------+
210
211 PURPOSE :
212 */
213 GLOBAL T_ACI_BAT_RSLT sBAT_PercentCSQ (T_ACI_DTI_PRC_PSI *src_infos_psi,
214 T_BAT_cmd_send *cmd)
215 {
216 T_ACI_BAT_RSLT ret = ACI_BAT_FAIL;
217
218 TRACE_FUNCTION ("sBAT_PercentCSQ()");
219
220 ret = (T_ACI_BAT_RSLT)sAT_PercentCSQ ((T_ACI_CMD_SRC)src_infos_psi->srcId,
221 (T_ACI_CSQ_MODE)cmd->params.ptr_set_percent_csq->csq_mode);
222
223 if (ret EQ ACI_BAT_CMPL)
224 {
225 T_BAT_cmd_response resp;
226 T_BAT_res_set_percent_csq csq_data;
227
228 resp.ctrl_response = BAT_RES_SET_PERCENT_CSQ;
229 resp.response.ptr_set_percent_csq = &csq_data;
230
231 csq_data.csq_mode = cmd->params.ptr_set_percent_csq->csq_mode;
232
233 aci_bat_send(src_infos_psi,&resp);
234 }
235
236 return(ret);
237 }
238
239 /*
240 +--------------------------------------------------------------------+
241 | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
242 | STATE : code ROUTINE : qBAT_PercentCSQ |
243 +--------------------------------------------------------------------+
244
245 PURPOSE :
246 */
247 GLOBAL T_ACI_BAT_RSLT qBAT_PercentCSQ (T_ACI_DTI_PRC_PSI *src_infos_psi,
248 T_BAT_cmd_send *cmd)
249 {
250 T_ACI_BAT_RSLT ret;
251 UBYTE rssi;
252 UBYTE ber;
253 UBYTE actlevel;
254 #ifdef FF_PS_RSSI
255 UBYTE min_access_level;
256 #endif
257
258 TRACE_FUNCTION ("qBAT_PercentCSQ()");
259
260 /*
261 * Call the corresponding ACI function. T_ACI_BAT_RSLT is
262 * assumed to be equivalent to T_ACI_RESULT.
263 */
264 #ifdef FF_PS_RSSI
265 ret=(T_ACI_BAT_RSLT)qAT_PercentCSQ((T_ACI_CMD_SRC)src_infos_psi->srcId,
266 &rssi,
267 &ber,
268 &actlevel,
269 &min_access_level);
270 #else
271 ret=(T_ACI_BAT_RSLT)qAT_PercentCSQ(src_infos_psi->srcId,&rssi,&ber,&actlevel);
272 #endif
273
274 if (ret EQ ACI_BAT_CMPL)
275 {
276 T_BAT_cmd_response resp;
277 T_BAT_res_que_percent_csq csq_data;
278
279 resp.ctrl_response=BAT_RES_QUE_PERCENT_CSQ;
280 resp.response.ptr_que_percent_csq=&csq_data;
281
282 csq_data.rssi=(U8)rssi;
283 csq_data.ber=(U8)ber;
284 csq_data.actlevel=(U8)actlevel;
285
286 #ifdef FF_PS_RSSI
287 csq_data.min_access_level = (U8)min_access_level;
288 #endif
289
290 aci_bat_send(src_infos_psi,&resp);
291 }
292
293 return(ret);
294 }
295
296 /*
297 +--------------------------------------------------------------------+
298 | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
299 | STATE : code ROUTINE : sBAT_PlusCBC |
300 +--------------------------------------------------------------------+
301
302 PURPOSE :
303 */
304 GLOBAL T_ACI_BAT_RSLT sBAT_PlusCBC (T_ACI_DTI_PRC_PSI *src_infos_psi,
305 T_BAT_cmd_send *cmd)
306 {
307 pwr_Status_Type powerStat;
308 T_BAT_cmd_response resp;
309 T_BAT_res_set_plus_cbc cbc_data;
310
311 TRACE_FUNCTION("sBAT_PlusCBC()");
312
313 /*
314 * There is no equivalent ACI function, so we must handle this
315 * within BAT. This code is adapted from the ATI function
316 * atPlusCBC().
317 */
318
319 if (pwr_GetStatus(&powerStat) NEQ DRV_OK)
320 {
321 ACI_ERR_DESC(ACI_ERR_CLASS_Cme,CME_ERR_Unknown);
322 return(ACI_BAT_FAIL);
323 }
324
325 resp.ctrl_response=BAT_RES_SET_PLUS_CBC;
326 resp.response.ptr_set_plus_cbc=&cbc_data;
327
328 switch(powerStat.Status)
329 {
330 case PWR_EXTPOWER_ON:
331 cbc_data.bsc=BAT_CBC_BSC_NOBATTERY;
332 break;
333
334 case PWR_CHARGER_ON:
335 cbc_data.bsc=BAT_CBC_BSC_BATTERY;
336 break;
337
338 default:
339 cbc_data.bsc=BAT_CBC_BSC_BATTERYPOWERED;
340 break;
341 }
342
343 cbc_data.bcl=(T_BAT_plus_cbc_bcl)powerStat.ChargeLevel;
344
345 aci_bat_send(src_infos_psi,&resp);
346
347 return(ACI_BAT_CMPL);
348 }
349
350 /*
351 +--------------------------------------------------------------------+
352 | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
353 | STATE : code ROUTINE : sBAT_PlusCLVL |
354 +--------------------------------------------------------------------+
355
356 PURPOSE :
357 */
358 GLOBAL T_ACI_BAT_RSLT sBAT_PlusCLVL (T_ACI_DTI_PRC_PSI *src_infos_psi,
359 T_BAT_cmd_send *cmd)
360 {
361 TRACE_FUNCTION ("sBAT_PlusCLVL()");
362
363 /*
364 * There is no equivalent ACI function, so we must handle this
365 * within BAT.
366 */
367
368 if (audio_SetAmplf(AUDIO_SPEAKER,(UBYTE)cmd->params.ptr_set_plus_clvl->level) NEQ DRV_OK)
369 {
370 ACI_ERR_DESC(ACI_ERR_CLASS_Cme,CME_ERR_Unknown);
371 return(ACI_BAT_FAIL);
372 }
373
374 return(ACI_BAT_CMPL);
375 }
376
377 /*
378 +--------------------------------------------------------------------+
379 | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
380 | STATE : code ROUTINE : qBAT_PlusCLVL |
381 +--------------------------------------------------------------------+
382
383 PURPOSE :
384 */
385 GLOBAL T_ACI_BAT_RSLT qBAT_PlusCLVL (T_ACI_DTI_PRC_PSI *src_infos_psi,
386 T_BAT_cmd_send *cmd)
387 {
388 UBYTE vol;
389 T_BAT_cmd_response resp;
390 T_BAT_res_que_plus_clvl clvl_data;
391
392 TRACE_FUNCTION ("qBAT_PlusCLVL()");
393
394 /*
395 * There is no equivalent ACI function, so we must handle this
396 * within BAT.
397 */
398
399 if (audio_GetAmplf(AUDIO_MICROPHONE,&vol) NEQ DRV_OK)
400 {
401 ACI_ERR_DESC(ACI_ERR_CLASS_Cme,CME_ERR_Unknown);
402 return(ACI_BAT_FAIL);
403 }
404
405 resp.ctrl_response=BAT_RES_QUE_PLUS_CLVL;
406 resp.response.ptr_que_plus_clvl=&clvl_data;
407
408 clvl_data.level=(U8)vol;
409
410 aci_bat_send(src_infos_psi,&resp);
411
412 return(ACI_BAT_CMPL);
413 }
414
415 /*
416 +--------------------------------------------------------------------+
417 | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
418 | STATE : code ROUTINE : sBAT_PlusCMUT |
419 +--------------------------------------------------------------------+
420
421 PURPOSE :
422 */
423 GLOBAL T_ACI_BAT_RSLT sBAT_PlusCMUT (T_ACI_DTI_PRC_PSI *src_infos_psi,
424 T_BAT_cmd_send *cmd)
425 {
426 UBYTE mute;
427
428 TRACE_FUNCTION ("sBAT_PlusCMUT()");
429
430 /*
431 * There is no equivalent ACI function, so we must handle this
432 * within BAT.
433 */
434 mute=(cmd->params.ptr_set_plus_cmut->n EQ BAT_CMUT_N_ON) ? AUDIO_MUTING_ON:AUDIO_MUTING_OFF;
435
436 if(audio_SetMute(AUDIO_MICROPHONE,mute) NEQ DRV_OK)
437 {
438 ACI_ERR_DESC(ACI_ERR_CLASS_Cme,CME_ERR_Unknown);
439 return(ACI_BAT_FAIL);
440 }
441
442 return(ACI_BAT_CMPL);
443 }
444
445 /*
446 +--------------------------------------------------------------------+
447 | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
448 | STATE : code ROUTINE : qBAT_PlusCMUT |
449 +--------------------------------------------------------------------+
450
451 PURPOSE :
452 */
453 GLOBAL T_ACI_BAT_RSLT qBAT_PlusCMUT (T_ACI_DTI_PRC_PSI *src_infos_psi,
454 T_BAT_cmd_send *cmd)
455 {
456 UBYTE mute;
457 T_BAT_cmd_response resp;
458 T_BAT_res_que_plus_cmut cmut_data;
459
460 TRACE_FUNCTION ("qBAT_PlusCMUT()");
461
462 /*
463 * There is no equivalent ACI function, so we must handle this
464 * within BAT.
465 */
466
467 if (audio_GetMute(AUDIO_MICROPHONE,&mute) NEQ DRV_OK)
468 {
469 ACI_ERR_DESC(ACI_ERR_CLASS_Cme,CME_ERR_Unknown);
470 return(ACI_BAT_FAIL);
471 }
472
473 resp.ctrl_response=BAT_RES_QUE_PLUS_CMUT;
474 resp.response.ptr_que_plus_cmut=&cmut_data;
475
476 cmut_data.n=(U8)(mute EQ AUDIO_MUTING_ON) ? BAT_CMUT_N_ON:BAT_CMUT_N_OFF;
477
478 aci_bat_send(src_infos_psi,&resp);
479
480 return(ACI_BAT_CMPL);
481 }
482
483 /*
484 +--------------------------------------------------------------------+
485 | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
486 | STATE : code ROUTINE : sBAT_PlusCSCS |
487 +--------------------------------------------------------------------+
488
489 PURPOSE :
490 */
491 GLOBAL T_ACI_BAT_RSLT sBAT_PlusCSCS (T_ACI_DTI_PRC_PSI *src_infos_psi,
492 T_BAT_cmd_send *cmd)
493 {
494 T_BAT_plus_cscs_cs cs;
495
496 TRACE_FUNCTION ("sBAT_PlusCSCS()");
497
498 /*
499 * There is no equivalent ACI function, so we must handle this
500 * within BAT.
501 */
502
503 cs=cmd->params.ptr_set_plus_cscs->cs;
504
505 /*
506 * As we are handling this within BAT and not forwarding it to
507 * the ACI we should check the input parameter.
508 */
509 if ((cs<BAT_CSCS_CS_IRA) || (cs>BAT_CSCS_CS_UCS2))
510 {
511 ACI_ERR_DESC(ACI_ERR_CLASS_Cme,CME_ERR_Unknown);
512 return(ACI_BAT_FAIL);
513 }
514
515 aci_bat_cs_set(src_infos_psi,cs);
516
517 return(ACI_BAT_CMPL);
518 }
519
520 /*
521 +--------------------------------------------------------------------+
522 | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
523 | STATE : code ROUTINE : qBAT_PlusCSCS |
524 +--------------------------------------------------------------------+
525
526 PURPOSE :
527 */
528 GLOBAL T_ACI_BAT_RSLT qBAT_PlusCSCS (T_ACI_DTI_PRC_PSI *src_infos_psi,
529 T_BAT_cmd_send *cmd)
530 {
531 T_BAT_cmd_response resp;
532 T_BAT_res_que_plus_cscs cscs_data;
533
534 TRACE_FUNCTION ("qBAT_PlusCSCS()");
535
536 /*
537 * There is no equivalent ACI function, so we must handle this
538 * within BAT.
539 */
540
541 resp.ctrl_response=BAT_RES_QUE_PLUS_CSCS;
542 resp.response.ptr_que_plus_cscs=&cscs_data;
543
544 cscs_data.cs=aci_bat_cs_get(src_infos_psi);
545
546 aci_bat_send(src_infos_psi,&resp);
547
548 return(ACI_BAT_CMPL);
549 }
550
551 /*
552 +--------------------------------------------------------------------+
553 | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
554 | STATE : code ROUTINE : sBAT_PercentCCBS |
555 +--------------------------------------------------------------------+
556
557 PURPOSE :
558 */
559 GLOBAL T_ACI_BAT_RSLT sBAT_PercentCCBS (T_ACI_DTI_PRC_PSI *src_infos_psi,
560 T_BAT_cmd_send *cmd)
561 {
562 T_ACI_BAT_RSLT ret;
563 SHORT idx;
564
565 TRACE_FUNCTION ("sBAT_PercentCCBS()");
566
567 idx=(SHORT)cmd->params.ptr_set_percent_ccbs->idx;
568
569 /*
570 * Call the corresponding ACI function. T_ACI_BAT_RSLT is
571 * assumed to be equivalent to T_ACI_RESULT.
572 */
573 ret=(T_ACI_BAT_RSLT)sAT_PercentCCBS((T_ACI_CMD_SRC)src_infos_psi->srcId,idx);
574
575 return(ret);
576 }
577
578 /*
579 +--------------------------------------------------------------------+
580 | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
581 | STATE : code ROUTINE : qBAT_PercentCCBS |
582 +--------------------------------------------------------------------+
583
584 PURPOSE :
585 */
586 GLOBAL T_ACI_BAT_RSLT qBAT_PercentCCBS (T_ACI_DTI_PRC_PSI *src_infos_psi,
587 T_BAT_cmd_send *cmd)
588 {
589 T_ACI_BAT_RSLT ret = ACI_BAT_FAIL;
590
591 TRACE_FUNCTION ("qBAT_PercentCCBS()");
592
593 ret=(T_ACI_BAT_RSLT)qAT_PercentCCBS((T_ACI_CMD_SRC)src_infos_psi->srcId);
594
595 /*
596 * qAT_PercentCCBS() never returns AT_CMPL, so we do not send
597 * the response here.
598 */
599
600 return(ret);
601 }
602
603 /*
604 +--------------------------------------------------------------------+
605 | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
606 | STATE : code ROUTINE : sBAT_PlusCMUX |
607 +--------------------------------------------------------------------+
608
609 PURPOSE :
610 */
611 GLOBAL T_ACI_BAT_RSLT sBAT_PlusCMUX (T_ACI_DTI_PRC_PSI *src_infos_psi,
612 T_BAT_cmd_send *cmd)
613 {
614 T_ACI_BAT_RSLT ret;
615 T_BAT_cmd_set_plus_cmux *cmux;
616
617 TRACE_FUNCTION ("sBAT_PlusCMUX()");
618
619 /*
620 * Get a pointer to the CMUX data for convenience.
621 */
622 cmux=cmd->params.ptr_set_plus_cmux;
623
624 /*
625 * Call the corresponding ACI function. T_ACI_BAT_RSLT is
626 * assumed to be equivalent to T_ACI_RESULT. Note that we lose
627 * 'k' as it is not in the ACI.
628 */
629 ret=(T_ACI_BAT_RSLT)sAT_PlusCMUX(
630 (T_ACI_CMD_SRC)src_infos_psi->srcId,
631 (UBYTE)cmux->mode,
632 (UBYTE)cmux->subset,
633 (UBYTE)cmux->port_speed,
634 (USHORT)cmux->n1,
635 (UBYTE)cmux->t1,
636 (UBYTE)cmux->n2,
637 (UBYTE)cmux->t2,
638 (UBYTE)cmux->t3);
639
640 return(ret);
641 }
642
643 /*
644 +--------------------------------------------------------------------+
645 | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
646 | STATE : code ROUTINE : qBAT_PlusCMUX |
647 +--------------------------------------------------------------------+
648
649 PURPOSE :
650 */
651 GLOBAL T_ACI_BAT_RSLT qBAT_PlusCMUX (T_ACI_DTI_PRC_PSI *src_infos_psi,
652 T_BAT_cmd_send *cmd)
653 {
654 TRACE_FUNCTION ("qBAT_PlusCMUX()");
655
656 /*
657 * There is no ACI equivalent.
658 */
659 return(ACI_BAT_CMPL);
660 }
661
662 /*
663 +--------------------------------------------------------------------+
664 | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
665 | STATE : code ROUTINE : sBAT_PlusIPR |
666 +--------------------------------------------------------------------+
667
668 PURPOSE :
669 */
670 GLOBAL T_ACI_BAT_RSLT sBAT_PlusIPR (T_ACI_DTI_PRC_PSI *src_infos_psi,
671 T_BAT_cmd_send *cmd)
672 {
673 T_ACI_BAT_RSLT ret;
674 T_ACI_BD_RATE rate;
675
676 TRACE_FUNCTION ("sBAT_PlusIPR()");
677
678 /*
679 * This relies on T_ACI_BD_RATE and T_BAT_plus_ipr_rate being
680 * identical. In fact the BAT has an extra value, but this should
681 * not cause problems as there is a parameter check in
682 * sAT_PlusIPR().
683 */
684 rate=(T_ACI_BD_RATE)cmd->params.ptr_set_plus_ipr->rate;
685
686 /*
687 * Call the corresponding ACI function. T_ACI_BAT_RSLT is
688 * assumed to be equivalent to T_ACI_RESULT.
689 */
690 ret=(T_ACI_BAT_RSLT)sAT_PlusIPR((T_ACI_CMD_SRC)src_infos_psi->srcId,rate);
691
692 return(ret);
693 }
694
695 /*
696 +--------------------------------------------------------------------+
697 | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
698 | STATE : code ROUTINE : qBAT_PlusIPR |
699 +--------------------------------------------------------------------+
700
701 PURPOSE :
702 */
703 GLOBAL T_ACI_BAT_RSLT qBAT_PlusIPR (T_ACI_DTI_PRC_PSI *src_infos_psi,
704 T_BAT_cmd_send *cmd)
705 {
706 T_ACI_BAT_RSLT ret = ACI_BAT_FAIL;
707 T_ACI_BD_RATE rate;
708
709 TRACE_FUNCTION ("qBAT_PlusIPR()");
710
711 /*
712 * Call the corresponding ACI function. T_ACI_BAT_RSLT is
713 * assumed to be equivalent to T_ACI_RESULT.
714 */
715 ret=(T_ACI_BAT_RSLT)qAT_PlusIPR((T_ACI_CMD_SRC)src_infos_psi->srcId,&rate);
716
717 if (ret EQ ACI_BAT_CMPL)
718 {
719 T_BAT_cmd_response resp;
720 T_BAT_res_que_plus_ipr ipr_data;
721
722 resp.ctrl_response=BAT_RES_QUE_PLUS_IPR;
723 resp.response.ptr_que_plus_ipr=&ipr_data;
724
725 /*
726 * This relies on T_ACI_BD_RATE and T_BAT_plus_ipr_rate being
727 * identical. In fact the BAT has an extra value, but that is
728 * irrelevant in this direction.
729 */
730 ipr_data.rate=(T_BAT_plus_ipr_rate)rate;
731
732 aci_bat_send(src_infos_psi,&resp);
733 }
734
735 return(ret);
736 }
737
738 /*
739 +--------------------------------------------------------------------+
740 | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
741 | STATE : code ROUTINE : sBAT_PlusICF |
742 +--------------------------------------------------------------------+
743
744 PURPOSE :
745 */
746 GLOBAL T_ACI_BAT_RSLT sBAT_PlusICF (T_ACI_DTI_PRC_PSI *src_infos_psi,
747 T_BAT_cmd_send *cmd)
748 {
749 T_ACI_BAT_RSLT ret;
750 T_ACI_BS_FRM format;
751 T_ACI_BS_PAR parity;
752
753 TRACE_FUNCTION ("sBAT_PlusICF()");
754
755 /*
756 * This relies on T_ACI_BS_FRM being identical to T_BAT_framing_format
757 * and T_ACI_BS_PAR being identical to T_BAT_framing_parity.
758 */
759 format=(T_ACI_BS_FRM)cmd->params.ptr_set_plus_icf->framing_format;
760 parity=(T_ACI_BS_PAR)cmd->params.ptr_set_plus_icf->framing_parity;
761
762 /*
763 * Call the corresponding ACI function. T_ACI_BAT_RSLT is
764 * assumed to be equivalent to T_ACI_RESULT.
765 */
766 ret=(T_ACI_BAT_RSLT)sAT_PlusICF((T_ACI_CMD_SRC)src_infos_psi->srcId,format,parity);
767
768 return(ret);
769 }
770
771 /*
772 +--------------------------------------------------------------------+
773 | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
774 | STATE : code ROUTINE : qBAT_PlusICF |
775 +--------------------------------------------------------------------+
776
777 PURPOSE :
778 */
779 GLOBAL T_ACI_BAT_RSLT qBAT_PlusICF (T_ACI_DTI_PRC_PSI *src_infos_psi,
780 T_BAT_cmd_send *cmd)
781 {
782 T_ACI_BAT_RSLT ret;
783 T_ACI_BS_FRM format;
784 T_ACI_BS_PAR parity;
785
786 TRACE_FUNCTION ("qBAT_PlusICF()");
787
788 /*
789 * Call the corresponding ACI function. T_ACI_BAT_RSLT is
790 * assumed to be equivalent to T_ACI_RESULT.
791 */
792 ret=(T_ACI_BAT_RSLT)qAT_PlusICF((T_ACI_CMD_SRC)src_infos_psi->srcId,&format,&parity);
793
794 if (ret EQ ACI_BAT_CMPL)
795 {
796 T_BAT_cmd_response resp;
797 T_BAT_res_que_plus_icf icf_data;
798
799 resp.ctrl_response=BAT_RES_QUE_PLUS_ICF;
800 resp.response.ptr_que_plus_icf=&icf_data;
801
802 /*
803 * This relies on T_ACI_BS_FRM being identical to T_BAT_framing_format
804 * and T_ACI_BS_PAR being identical to T_BAT_framing_parity.
805 */
806 icf_data.framing_format=(T_BAT_framing_format)format;
807 icf_data.framing_parity=(T_BAT_framing_parity)parity;
808
809 aci_bat_send(src_infos_psi,&resp);
810 }
811
812 return(ret);
813 }
814
815 /*
816 +--------------------------------------------------------------------+
817 | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
818 | STATE : code ROUTINE : sBAT_PlusIFC |
819 +--------------------------------------------------------------------+
820
821 PURPOSE :
822 */
823 GLOBAL T_ACI_BAT_RSLT sBAT_PlusIFC (T_ACI_DTI_PRC_PSI *src_infos_psi,
824 T_BAT_cmd_send *cmd)
825 {
826 T_ACI_BAT_RSLT ret;
827 T_ACI_RX_FLOW_CTRL DCE_by_DTE;
828 T_ACI_RX_FLOW_CTRL DTE_by_DCE;
829
830 TRACE_FUNCTION ("sBAT_PlusIFC()");
831
832 /*
833 * This relies on T_ACI_RX_FLOW_CONTROL being identical to both
834 * T_BAT_plus_ifc_by_te and T_BAT_plus_ifc_by_ta. Note that
835 * sAT_PlusIFC() really does use T_ACI_RX_FLOW_CTRL for both
836 * parameters even though a T_ACI_TX_FLOW_CTRL exists (they are
837 * equivalent anyway).
838 */
839 DCE_by_DTE=(T_ACI_RX_FLOW_CTRL)cmd->params.ptr_set_plus_ifc->by_te;
840 DTE_by_DCE=(T_ACI_RX_FLOW_CTRL)cmd->params.ptr_set_plus_ifc->by_ta;
841
842 /*
843 * Call the corresponding ACI function. T_ACI_BAT_RSLT is
844 * assumed to be equivalent to T_ACI_RESULT.
845 */
846 ret=(T_ACI_BAT_RSLT)sAT_PlusIFC((T_ACI_CMD_SRC)src_infos_psi->srcId,DCE_by_DTE,DTE_by_DCE);
847
848 return(ret);
849 }
850
851 /*
852 +--------------------------------------------------------------------+
853 | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
854 | STATE : code ROUTINE : qBAT_PlusIFC |
855 +--------------------------------------------------------------------+
856
857 PURPOSE :
858 */
859 GLOBAL T_ACI_BAT_RSLT qBAT_PlusIFC (T_ACI_DTI_PRC_PSI *src_infos_psi,
860 T_BAT_cmd_send *cmd)
861 {
862 T_ACI_BAT_RSLT ret;
863 T_ACI_RX_FLOW_CTRL DCE_by_DTE;
864 T_ACI_RX_FLOW_CTRL DTE_by_DCE;
865
866 TRACE_FUNCTION ("qBAT_PlusIFC()");
867
868 /*
869 * Call the corresponding ACI function. T_ACI_BAT_RSLT is
870 * assumed to be equivalent to T_ACI_RESULT.
871 */
872 ret=(T_ACI_BAT_RSLT)qAT_PlusIFC((T_ACI_CMD_SRC)src_infos_psi->srcId,&DCE_by_DTE,&DTE_by_DCE);
873
874 if (ret EQ ACI_BAT_CMPL)
875 {
876 T_BAT_cmd_response resp;
877 T_BAT_res_que_plus_ifc ifc_data;
878
879 resp.ctrl_response=BAT_RES_QUE_PLUS_IFC;
880 resp.response.ptr_que_plus_ifc=&ifc_data;
881
882 /*
883 * This relies on T_ACI_RX_FLOW_CONTROL being identical to both
884 * T_BAT_plus_ifc_by_te and T_BAT_plus_ifc_by_ta. Note that
885 * qAT_PlusIFC() really does use T_ACI_RX_FLOW_CTRL for both
886 * parameters even though a T_ACI_TX_FLOW_CTRL exists (they are
887 * equivalent anyway).
888 */
889 ifc_data.by_te=(T_BAT_plus_ifc_by_te)DCE_by_DTE;
890 ifc_data.by_ta=(T_BAT_plus_ifc_by_ta)DTE_by_DCE;
891
892 aci_bat_send(src_infos_psi,&resp);
893 }
894
895 return(ret);
896 }
897
898 /*
899 +--------------------------------------------------------------------+
900 | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
901 | STATE : code ROUTINE : sBAT_PlusCCLK |
902 +--------------------------------------------------------------------+
903
904 PURPOSE :
905 */
906 GLOBAL T_ACI_BAT_RSLT sBAT_PlusCCLK (T_ACI_DTI_PRC_PSI *src_infos_psi,
907 T_BAT_cmd_send *cmd)
908 {
909 T_ACI_BAT_RSLT ret;
910 T_ACI_RTC_DATE date;
911 T_ACI_RTC_TIME time;
912 int time_zone;
913
914 TRACE_FUNCTION ("sBAT_PlusCCLK()");
915
916 date.year=(USHORT)(cmd->params.ptr_set_plus_cclk->year+2000);
917 date.month=(UBYTE)cmd->params.ptr_set_plus_cclk->month;
918 date.day=(UBYTE)cmd->params.ptr_set_plus_cclk->day;
919 time.hour=(UBYTE)cmd->params.ptr_set_plus_cclk->hour;
920 time.minute=(UBYTE)cmd->params.ptr_set_plus_cclk->minutes;
921 time.second=(UBYTE)cmd->params.ptr_set_plus_cclk->seconds;
922
923 /*
924 * Time format and PM flag are not in the BAT message. Use the same
925 * values that the ATI does in this situation.
926 */
927 time.format=TIME_FORMAT_24HOUR;
928 time.PM_flag=0;
929
930 time_zone=(int)cmd->params.ptr_set_plus_cclk->time_zone;
931
932 /*
933 * Call the corresponding ACI function. T_ACI_BAT_RSLT is
934 * assumed to be equivalent to T_ACI_RESULT.
935 */
936 ret=(T_ACI_BAT_RSLT)sAT_PlusCCLK((T_ACI_CMD_SRC)src_infos_psi->srcId,&date,&time,time_zone);
937
938 return(ret);
939 }
940
941 /*
942 +--------------------------------------------------------------------+
943 | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
944 | STATE : code ROUTINE : qBAT_PlusCCLK |
945 +--------------------------------------------------------------------+
946
947 PURPOSE :
948 */
949 GLOBAL T_ACI_BAT_RSLT qBAT_PlusCCLK (T_ACI_DTI_PRC_PSI *src_infos_psi,
950 T_BAT_cmd_send *cmd)
951 {
952 T_ACI_BAT_RSLT ret;
953 T_ACI_RTC_DATE date;
954 T_ACI_RTC_TIME time;
955 int time_zone;
956
957 TRACE_FUNCTION ("qBAT_PlusCCLK()");
958
959 /*
960 * Call the corresponding ACI function. T_ACI_BAT_RSLT is
961 * assumed to be equivalent to T_ACI_RESULT.
962 */
963 ret=(T_ACI_BAT_RSLT)qAT_PlusCCLK((T_ACI_CMD_SRC)src_infos_psi->srcId,&date,&time,&time_zone);
964
965 if (ret EQ ACI_BAT_CMPL)
966 {
967 T_BAT_cmd_response resp;
968 T_BAT_res_que_plus_cclk cclk_data;
969
970 resp.ctrl_response=BAT_RES_QUE_PLUS_CCLK;
971 resp.response.ptr_que_plus_cclk=&cclk_data;
972
973 cclk_data.year=(U8)(date.year-2000);
974 cclk_data.month=(U8)date.month;
975 cclk_data.day=(U8)date.day;
976
977 cclk_data.hour=(U8)time.hour;
978
979 /*
980 * BAT only handles a 24 hour clock. So if the information arrives
981 * in 12 hour format we must convert it.
982 */
983 if (time.format EQ TIME_FORMAT_12HOUR)
984 {
985 if ((time.PM_flag) AND (time.hour<12))
986 cclk_data.hour+=12;
987 else if ((time.PM_flag EQ 0) AND (time.hour EQ 12))
988 cclk_data.hour=0;
989 }
990
991 cclk_data.minutes=(U8)time.minute;
992 cclk_data.seconds=(U8)time.second;
993
994 cclk_data.time_zone=(S8)time_zone;
995
996 aci_bat_send(src_infos_psi,&resp);
997 }
998
999 return(ret);
1000 }
1001
1002 /*
1003 +--------------------------------------------------------------------+
1004 | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
1005 | STATE : code ROUTINE : sBAT_PlusCGMI |
1006 +--------------------------------------------------------------------+
1007
1008 PURPOSE :
1009 */
1010 GLOBAL T_ACI_BAT_RSLT sBAT_PlusCGMI(T_ACI_DTI_PRC_PSI *src_infos_psi,
1011 T_BAT_cmd_send *cmd)
1012 {
1013 T_ACI_BAT_RSLT ret = ACI_BAT_FAIL;
1014 T_BAT_cmd_response resp;
1015 T_BAT_res_set_plus_cgmi set_cgmi_buffer;
1016
1017 TRACE_FUNCTION ("sBAT_PlusCGMI()");
1018
1019 resp.ctrl_response = BAT_RES_SET_PLUS_CGMI ;
1020 resp.response.ptr_set_plus_cgmi = &set_cgmi_buffer;
1021
1022 ret = aciBatPrcsPlusCG(resp.response.ptr_set_plus_cgmi->manufacturer, &resp.response.ptr_set_plus_cgmi->c_manufacturer,
1023 sizeof(resp.response.ptr_set_plus_cgmi->manufacturer), EF_CGMI_ID);
1024 if (ret EQ ACI_BAT_CMPL)
1025 {
1026 aci_bat_send(src_infos_psi,&resp);
1027 }
1028 return ret;
1029 }
1030
1031 /*
1032 +--------------------------------------------------------------------+
1033 | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
1034 | STATE : code ROUTINE : sBAT_PlusCGMM |
1035 +--------------------------------------------------------------------+
1036
1037 PURPOSE :
1038 */
1039 GLOBAL T_ACI_BAT_RSLT sBAT_PlusCGMM(T_ACI_DTI_PRC_PSI *src_infos_psi,
1040 T_BAT_cmd_send *cmd)
1041 {
1042 T_ACI_BAT_RSLT ret = ACI_BAT_FAIL;
1043 T_BAT_cmd_response resp;
1044 T_BAT_res_set_plus_cgmm set_cgmm_buffer;
1045
1046 TRACE_FUNCTION ("sBAT_PlusCGMM()");
1047
1048 resp.ctrl_response = BAT_RES_SET_PLUS_CGMM ;
1049 resp.response.ptr_set_plus_cgmm = &set_cgmm_buffer;
1050
1051 ret = aciBatPrcsPlusCG(resp.response.ptr_set_plus_cgmm->model, &resp.response.ptr_set_plus_cgmm->c_model,
1052 sizeof(resp.response.ptr_set_plus_cgmm->model), EF_CGMM_ID);
1053 if (ret EQ ACI_BAT_CMPL)
1054 {
1055 aci_bat_send(src_infos_psi,&resp);
1056 }
1057 return ret;
1058 }
1059
1060 /*
1061 +--------------------------------------------------------------------+
1062 | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
1063 | STATE : code ROUTINE : sBAT_PlusCGMR |
1064 +--------------------------------------------------------------------+
1065
1066 PURPOSE :
1067 */
1068 GLOBAL T_ACI_BAT_RSLT sBAT_PlusCGMR(T_ACI_DTI_PRC_PSI *src_infos_psi,
1069 T_BAT_cmd_send *cmd)
1070 {
1071 T_ACI_BAT_RSLT ret = ACI_BAT_FAIL;
1072 T_BAT_cmd_response resp;
1073 T_BAT_res_set_plus_cgmr set_cgmr_buffer;
1074
1075 TRACE_FUNCTION ("sBAT_PlusCGMR()");
1076
1077 resp.ctrl_response = BAT_RES_SET_PLUS_CGMR ;
1078 resp.response.ptr_set_plus_cgmr = &set_cgmr_buffer;
1079
1080 ret = aciBatPrcsPlusCG(resp.response.ptr_set_plus_cgmr->revision, &resp.response.ptr_set_plus_cgmr->c_revision,
1081 sizeof(resp.response.ptr_set_plus_cgmr->revision), EF_CGMR_ID);
1082 if (ret EQ ACI_BAT_CMPL)
1083 {
1084 aci_bat_send(src_infos_psi,&resp);
1085 }
1086 return ret;
1087 }
1088
1089 GLOBAL T_ACI_BAT_RSLT sBAT_PlusCGSN(T_ACI_DTI_PRC_PSI *src_infos_psi,
1090 T_BAT_cmd_send *cmd)
1091 {
1092 T_ACI_BAT_RSLT ret = ACI_BAT_FAIL;
1093 T_BAT_cmd_response resp;
1094 T_BAT_res_set_plus_cgsn set_cgsn_buffer;
1095
1096 TRACE_FUNCTION ("sBAT_PlusCGSN()");
1097
1098 resp.ctrl_response = BAT_RES_SET_PLUS_CGSN ;
1099 resp.response.ptr_set_plus_cgsn = &set_cgsn_buffer;
1100
1101 ret = aciBatPrcsPlusCG(resp.response.ptr_set_plus_cgsn->sn, &resp.response.ptr_set_plus_cgsn->c_sn,
1102 sizeof(resp.response.ptr_set_plus_cgsn->sn), EF_CGSN_ID);
1103 if (ret EQ ACI_BAT_CMPL)
1104 {
1105 aci_bat_send(src_infos_psi,&resp);
1106 }
1107 return ret;
1108 }
1109
1110 /*
1111 +--------------------------------------------------------------------+
1112 | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
1113 | STATE : code ROUTINE : aciBatPrcsPlusCG |
1114 +--------------------------------------------------------------------+
1115
1116 PURPOSE :
1117 */
1118 LOCAL T_ACI_BAT_RSLT aciBatPrcsPlusCG (UBYTE *rc, USHORT *le, size_t ml, CHAR *ef)
1119 {
1120 pcm_FileInfo_Type fileInfo;
1121 USHORT i;
1122
1123 TRACE_FUNCTION("aciBatPrcsPlusCG()");
1124
1125 if (pcm_GetFileInfo ((UBYTE* )ef, &fileInfo) NEQ DRV_OK)
1126 {
1127 cmdCmeError (CME_ERR_MemFail);
1128 return ACI_BAT_FAIL;
1129 }
1130
1131 if (fileInfo.FileSize <= ml)
1132 {
1133 if (pcm_ReadFile ((UBYTE*)ef, fileInfo.FileSize,
1134 (UBYTE*)rc, &fileInfo.Version) NEQ DRV_OK)
1135 {
1136 cmdCmeError (CME_ERR_MemFail);
1137 return ACI_BAT_FAIL;
1138 }
1139
1140 i = 0;
1141 while (rc[i] NEQ 0xFF)
1142 {
1143 i++;
1144 }
1145 *le = i;
1146
1147 return ACI_BAT_CMPL;
1148 }
1149 else
1150 {
1151 TRACE_FUNCTION("aciBatPrcsPlusCG(): file size is larger than the defined response length!");
1152 cmdCmeError (CME_ERR_MemFail);
1153 return ACI_BAT_FAIL;
1154 }
1155 }
1156
1157