FreeCalypso > hg > fc-magnetite
comparison src/g23m-aci/aci/cmh_phbs.c @ 162:53929b40109c
src/g23m-aci: initial import from TCS3.2/LoCosto
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Tue, 11 Oct 2016 02:02:43 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
161:4557e2a9c18e | 162:53929b40109c |
---|---|
1 /* | |
2 +----------------------------------------------------------------------------- | |
3 | Project : GSM-PS (6147) | |
4 | Modul : CMH_PHBS | |
5 +----------------------------------------------------------------------------- | |
6 | Copyright 2002 Texas Instruments Berlin, AG | |
7 | All rights reserved. | |
8 | | |
9 | This file is confidential and a trade secret of Texas | |
10 | Instruments Berlin, AG | |
11 | The receipt of or possession of this file does not convey | |
12 | any rights to reproduce or disclose its contents or to | |
13 | manufacture, use, or sell anything it may describe, in | |
14 | whole, or in part, without the specific written consent of | |
15 | Texas Instruments Berlin, AG. | |
16 +----------------------------------------------------------------------------- | |
17 | Purpose : This module provides the set functions related to the | |
18 | protocol stack adapter for the phonebook management. | |
19 +----------------------------------------------------------------------------- | |
20 */ | |
21 | |
22 #ifndef CMH_PHBS_C | |
23 #define CMH_PHBS_C | |
24 #endif | |
25 | |
26 | |
27 | |
28 #include "aci_all.h" | |
29 /*==== INCLUDES ===================================================*/ | |
30 #include "aci_cmh.h" | |
31 #include "ksd.h" | |
32 | |
33 #ifdef FAX_AND_DATA | |
34 #include "aci_fd.h" | |
35 #endif /* of #ifdef FAX_AND_DATA */ | |
36 | |
37 #include "psa.h" | |
38 #include "psa_sim.h" | |
39 #include "psa_sms.h" | |
40 #include "ati_cmd.h" | |
41 #include "aci_cmd.h" | |
42 #include "phb.h" | |
43 #include "cmh.h" | |
44 #include "cmh_phb.h" | |
45 #include "cmh_sms.h" | |
46 #include "pcm.h" | |
47 #include "aci_mem.h" | |
48 | |
49 /*--------------------------------------------------------------------* | |
50 * The Below include files are included for the SIM functions called * | |
51 * in CPBS command handler * | |
52 *--------------------------------------------------------------------*/ | |
53 | |
54 #include "dti_conn_mng.h" | |
55 #include "cmh_sim.h" | |
56 | |
57 | |
58 | |
59 /*==== CONSTANTS ==================================================*/ | |
60 | |
61 #define PHB_CMH_CC_ID_NOT_USED 0xFF | |
62 #define PHB_CMH_EXT_NOT_USED 0xFF | |
63 | |
64 /*==== TYPES ======================================================*/ | |
65 | |
66 typedef enum | |
67 { | |
68 CMN_FULL_PRSNT, /* all parameter present */ | |
69 CMN_PRTLY_PRSNT, /* only some parameter present */ | |
70 CMN_NOT_PRSNT /* no parameter present */ | |
71 } | |
72 T_PHB_CMH_CMN_STAT; | |
73 | |
74 typedef enum | |
75 { | |
76 SNGL_VLD_PRSNT, /* parameter is present and in valid range */ | |
77 SNGL_INVLD_PRSNT, /* parameter is present and not in valid range */ | |
78 SNGL_NOT_PRSNT /* parameter is not present */ | |
79 } | |
80 T_PHB_CMH_SNGL_STAT; | |
81 | |
82 #ifdef TI_PS_FFS_PHB | |
83 typedef T_PHB_RETURN T_FCT_READ ( T_PHB_TYPE type, | |
84 SHORT index, | |
85 T_PHB_RECORD* entry ); | |
86 #else | |
87 typedef T_PHB_RETURN T_FCT_READ ( UBYTE type, | |
88 SHORT index, | |
89 T_PHB_RECORD* entry ); | |
90 #endif | |
91 | |
92 /*==== EXPORT =====================================================*/ | |
93 | |
94 /*==== VARIABLES ==================================================*/ | |
95 /*==== FUNCTIONS ==================================================*/ | |
96 | |
97 /* | |
98 +-------------------------------------------------------------------+ | |
99 | PROJECT : GSM-PS (6147) MODULE : CMH_PHBS | | |
100 | STATE : code ROUTINE : sAT_PlusCPBS | | |
101 +-------------------------------------------------------------------+ | |
102 | |
103 PURPOSE : This is the functional counterpart of the +CPBS | |
104 AT command which is responsible for setting the | |
105 phonebook memory storage. | |
106 | |
107 <mem>: phonebook memory storage | |
108 */ | |
109 GLOBAL T_ACI_RETURN sAT_PlusCPBS ( T_ACI_CMD_SRC srcId, | |
110 T_ACI_PB_STOR mem, | |
111 char* pin2) | |
112 { | |
113 T_PHB_CMD_PRM * pPHBCmdPrm; /* points to PHB command parameters */ | |
114 T_SIM_SET_PRM * pSIMSetPrm; /* To hold the SIM related values for CPBW | |
115 command */ | |
116 T_PHB_TYPE chkMem; /* checked and converted parameter <mem> */ | |
117 | |
118 TRACE_FUNCTION ("sAT_PlusCPBS ()"); | |
119 | |
120 /* | |
121 *----------------------------------------------------------------- | |
122 * check command source | |
123 *----------------------------------------------------------------- | |
124 */ | |
125 if(!cmh_IsVldCmdSrc (srcId)) | |
126 { | |
127 return( AT_FAIL ); | |
128 } | |
129 | |
130 pPHBCmdPrm = &cmhPrm[srcId].phbCmdPrm; | |
131 | |
132 /* | |
133 *----------------------------------------------------------------- | |
134 * process the <mem> parameter | |
135 *----------------------------------------------------------------- | |
136 */ | |
137 if ( mem NEQ PB_STOR_NotPresent ) | |
138 { | |
139 if ( cmhPHB_cvtPhbType ( mem, &chkMem ) EQ TRUE ) | |
140 { | |
141 if (pin2 EQ NULL OR | |
142 (strlen ( pin2 ) EQ 0) ) | |
143 { | |
144 pPHBCmdPrm -> cmhStor = mem; | |
145 pPHBCmdPrm -> phbStor = chkMem; | |
146 } | |
147 else | |
148 { | |
149 if ( simShrdPrm.PINStat EQ PS_PUK2 ) | |
150 { | |
151 ACI_ERR_DESC( ACI_ERR_CLASS_Cme, CME_ERR_SimPuk2Req ); | |
152 return( AT_FAIL ); | |
153 } | |
154 /* check preselected phonebook storage for FDN or BDN */ | |
155 if ( ( mem EQ PB_STOR_Fd OR mem EQ PB_STOR_Bd ) | |
156 AND | |
157 ( simShrdPrm.pn2Stat EQ PS_PIN2 OR | |
158 simShrdPrm.pn2Stat EQ NO_VLD_PS ) ) | |
159 { | |
160 if ( simShrdPrm.PINStat EQ PS_RDY OR | |
161 simShrdPrm.PINStat EQ PS_PIN2 ) | |
162 { | |
163 simShrdPrm.PINStat = PS_PIN2; | |
164 } | |
165 else | |
166 { | |
167 ACI_ERR_DESC( ACI_ERR_CLASS_Cme, CME_ERR_SimFail ); | |
168 return( AT_FAIL ); | |
169 } | |
170 | |
171 /*-------------------------------------------------------------------------* | |
172 * The below code is added on 12/08/2003 as in R99 one more new paramter * | |
173 * is added in CPBS command <password>, this password is used to * | |
174 * verification of SIM PIN-2 before selecting any SIM related storages, * | |
175 * if it is already not done. * | |
176 * But now as password is provided by CPBS command. It is used for the * | |
177 * verification if it not done. * | |
178 *-------------------------------------------------------------------------*/ | |
179 | |
180 | |
181 pSIMSetPrm = &simShrdPrm.setPrm[srcId]; | |
182 | |
183 cmhSIM_FillInPIN ( (char *)pin2, pSIMSetPrm -> curPIN, | |
184 PIN_LEN); | |
185 pSIMSetPrm -> PINType = PHASE_2_PIN_2; | |
186 simEntStat.curCmd = AT_CMD_CPBS; | |
187 simShrdPrm.owner = (T_OWN)srcId; | |
188 simEntStat.entOwn = srcId; | |
189 | |
190 /*---------------------------------------------------------------------* | |
191 * During verification is the Owner ID is worng, then return the * | |
192 * AT_FAIL response. * | |
193 *---------------------------------------------------------------------*/ | |
194 if ( psaSIM_VerifyPIN() < 0 ) | |
195 { | |
196 TRACE_EVENT( "FATAL RETURN psaSIM in +CPBS: Not a valid owner ID" ); | |
197 return AT_FAIL; | |
198 } | |
199 | |
200 /*----------------------------------------------------------------* | |
201 * Hold the storage types in the temprory fields unless SIM PIN-2 * | |
202 * confirmation comes. * | |
203 *----------------------------------------------------------------*/ | |
204 | |
205 pPHBCmdPrm ->temp_cmhStor = mem; | |
206 pPHBCmdPrm ->temp_phbStor = chkMem; | |
207 | |
208 return ( AT_EXCT ); | |
209 } | |
210 else | |
211 { | |
212 pPHBCmdPrm -> cmhStor = mem; | |
213 pPHBCmdPrm -> phbStor = chkMem; | |
214 } | |
215 } | |
216 } | |
217 else | |
218 { | |
219 ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter ); | |
220 return( AT_FAIL ); | |
221 } | |
222 } | |
223 | |
224 return ( AT_CMPL ); | |
225 } | |
226 | |
227 /* | |
228 +-------------------------------------------------------------------+ | |
229 | PROJECT : GSM-PS (6147) MODULE : CMH_PHBS | | |
230 | STATE : code ROUTINE : sAT_PlusCPBW | | |
231 +-------------------------------------------------------------------+ | |
232 | |
233 PURPOSE : This is the functional counterpart of the +CPBW | |
234 AT command which is responsible for writing a phonebook | |
235 entry to memory. | |
236 | |
237 <index>: location number of phonebook memory | |
238 <number>: phone number | |
239 <type>: type of phone number | |
240 <text>: text associated with phone number | |
241 */ | |
242 GLOBAL void cmhPHB_ksdDecodeToa(CHAR *number, CHAR **pNumber, T_PHB_RECORD *entry) | |
243 { | |
244 T_KSD_SEQGRP seqGrp = SEQGRP_UNKNOWN; | |
245 T_KSD_SEQPARAM seqPrm; | |
246 CHAR* restSeq; | |
247 T_ACI_TOA stdToa; | |
248 CHAR *numBuf = NULL; /* Phonebook number ASCII + '\0' */ | |
249 | |
250 TRACE_FUNCTION ("cmhksd_decode_toa()"); | |
251 ACI_MALLOC(numBuf, MAX_PHB_NUM_LEN); | |
252 | |
253 if(numBuf EQ NULL) | |
254 { | |
255 TRACE_EVENT("numbuff is NULL... returning from cmhPHB_ksdDecodeToa()"); | |
256 return; | |
257 } | |
258 memset( numBuf, 0, MAX_PHB_NUM_LEN); | |
259 if ( strlen (number) EQ 0 ) | |
260 { | |
261 TRACE_EVENT("number has length 0"); | |
262 return; | |
263 } | |
264 | |
265 stdToa.ton = TON_Unknown; | |
266 stdToa.npi = NPI_IsdnTelephony; | |
267 | |
268 strncpy ( numBuf, number, MAX_PHB_NUM_LEN - 1 ); | |
269 numBuf[MAX_PHB_NUM_LEN - 1] = '\0'; | |
270 | |
271 | |
272 if ( ksd_decode ( numBuf, | |
273 TRUE, | |
274 &seqGrp, | |
275 &restSeq, | |
276 &seqPrm ) EQ FALSE ) | |
277 { | |
278 TRACE_EVENT("ksd_decode returned FALSE"); | |
279 return; | |
280 } | |
281 | |
282 switch (seqGrp) | |
283 { | |
284 case (SEQGRP_USSD): | |
285 if ( cmhPHB_rplcIntnl ( number, | |
286 numBuf, | |
287 0xFF ) EQ TRUE ) | |
288 { | |
289 stdToa.ton = TON_International; | |
290 } | |
291 | |
292 *pNumber = numBuf;/*lint !e684 (Warning:Passing address of auto variable 'numBuf' into caller space)*/ | |
293 cmhPHB_toaMrg ( &stdToa, &entry->ton_npi ); | |
294 break; | |
295 | |
296 case (SEQGRP_DIAL): | |
297 if ( number[0] EQ '+' ) | |
298 { | |
299 *pNumber = &number[1]; | |
300 stdToa.ton = TON_International; | |
301 } | |
302 /* 00 is not an indication for an international number */ | |
303 cmhPHB_toaMrg ( &stdToa, &entry->ton_npi ); | |
304 break; | |
305 | |
306 case (SEQGRP_CF): | |
307 { | |
308 UBYTE cnt; | |
309 | |
310 if ( seqPrm.cf.num EQ NULL ) | |
311 { | |
312 break; | |
313 } | |
314 | |
315 if ( number [0] EQ '*' AND | |
316 number [1] EQ '*' ) | |
317 { | |
318 cnt = 3; | |
319 } | |
320 else if ( number[0] EQ '*' ) | |
321 { | |
322 cnt = 2; | |
323 } | |
324 else | |
325 { | |
326 cnt = 1; | |
327 } | |
328 | |
329 if ( cmhPHB_rplcIntnl ( number, | |
330 numBuf, | |
331 cnt ) EQ TRUE ) | |
332 { | |
333 stdToa.ton = TON_International; | |
334 } | |
335 | |
336 *pNumber = numBuf; | |
337 cmhPHB_toaMrg ( &stdToa, &entry->ton_npi ); | |
338 } | |
339 break; | |
340 | |
341 case (SEQGRP_SUP_CLIR): | |
342 case (SEQGRP_INV_CLIR): | |
343 if (strlen (restSeq) NEQ 0) | |
344 { | |
345 if ( restSeq[0] EQ '+' ) | |
346 { | |
347 strcpy ( &numBuf[4], &restSeq[1] ); | |
348 stdToa.ton = TON_International; | |
349 } | |
350 /* 00 is not an international number */ | |
351 else | |
352 { | |
353 strcpy ( &numBuf[4], &restSeq[0] ); | |
354 } | |
355 | |
356 *pNumber = numBuf; | |
357 cmhPHB_toaMrg ( &stdToa, &entry->ton_npi ); | |
358 } | |
359 break; | |
360 | |
361 default: | |
362 break; | |
363 } | |
364 } | |
365 | |
366 LOCAL T_ACI_RETURN cmhPHB_add_record(T_ACI_CMD_SRC srcId, | |
367 T_PHB_CMH_SNGL_STAT indexStat, | |
368 T_ACI_PB_TEXT *text, | |
369 CHAR *number, | |
370 T_ACI_TOA *type, | |
371 SHORT index, | |
372 T_ACI_VP_ABS *dateTime, | |
373 UBYTE phonebook_storage) | |
374 { | |
375 T_PHB_RECORD entry; | |
376 CHAR *pNumber = NULL; /* pointer to the number that will be saved */ | |
377 T_PHB_RETURN result; | |
378 | |
379 TRACE_FUNCTION ("cmhPHB_add_record()"); | |
380 | |
381 switch ( indexStat ) | |
382 { | |
383 case ( SNGL_NOT_PRSNT ): | |
384 case ( SNGL_VLD_PRSNT ): | |
385 { | |
386 /* fill in the structure elements */ | |
387 | |
388 /* process the <index> */ | |
389 #ifdef TI_PS_FFS_PHB | |
390 entry.phy_recno = ( indexStat EQ SNGL_NOT_PRSNT ? | |
391 0 : ( UBYTE ) index ); | |
392 #else | |
393 entry.index = ( indexStat EQ SNGL_NOT_PRSNT ? | |
394 0 : ( UBYTE ) index ); | |
395 #endif | |
396 | |
397 /* process the <tag> */ | |
398 if (text->len > PHB_MAX_TAG_LEN) | |
399 { | |
400 ACI_ERR_DESC( ACI_ERR_CLASS_Cme, CME_ERR_TxtToLong ); | |
401 return (AT_FAIL); | |
402 } | |
403 | |
404 cmhPHB_getMfwTagSim ( text, entry.tag, &entry.tag_len, | |
405 PHB_MAX_TAG_LEN ); | |
406 | |
407 /* calculate the TON/NPI field */ | |
408 entry.ton_npi = PHB_TONPI_NO_DIAL; | |
409 pNumber = number; | |
410 | |
411 if ( type EQ NULL ) | |
412 { | |
413 cmhPHB_ksdDecodeToa(number, &pNumber, &entry); | |
414 } | |
415 else | |
416 { | |
417 cmhPHB_toaMrg ( type, &entry.ton_npi ); | |
418 } | |
419 | |
420 /* process the <number> */ | |
421 cmhPHB_getAdrBcd ( entry.number, &entry.len, | |
422 PHB_PACKED_NUM_LEN, pNumber ); | |
423 /* if (pNumber NEQ NULL) | |
424 { | |
425 ACI_MFREE(pNumber); | |
426 pNumber = NULL; | |
427 } | |
428 */ | |
429 #if defined(TI_PS_FFS_PHB) OR defined(PHONEBOOK_EXTENSION) | |
430 /* Clear the subaddress (until fully supported here) */ | |
431 memset (entry.subaddr, 0xFF, sizeof (entry.subaddr)); | |
432 #endif | |
433 | |
434 /* process the <cc_id> */ | |
435 entry.cc_id = PHB_CMH_CC_ID_NOT_USED; | |
436 | |
437 /* process the <extension> */ | |
438 /* extension Mechansim not yet supported | |
439 entry.extension = PHB_CMH_EXT_NOT_USED; */ | |
440 | |
441 /* process the <date and time> */ | |
442 if ( dateTime EQ NULL OR | |
443 !cmhSMS_isVpabsVld ( dateTime ) ) | |
444 { | |
445 cmhPHB_invldPhbDateTime ( &entry ); | |
446 } | |
447 else | |
448 { | |
449 cmhPHB_cpyCmhDateTime ( dateTime, &entry ); | |
450 } | |
451 | |
452 /* add the record */ | |
453 result = pb_add_record ((T_PHB_TYPE)phonebook_storage, | |
454 #ifdef TI_PS_FFS_PHB | |
455 | |
456 (UBYTE)entry.phy_recno, | |
457 #else | |
458 entry.index, | |
459 #endif | |
460 &entry); | |
461 switch (result) | |
462 { | |
463 case PHB_EXCT: | |
464 return (AT_EXCT); | |
465 | |
466 case PHB_OK: | |
467 return (AT_CMPL); | |
468 | |
469 case PHB_FULL: | |
470 ACI_ERR_DESC( ACI_ERR_CLASS_Cme, CME_ERR_MemFull ); | |
471 return (AT_FAIL); | |
472 | |
473 case PHB_EXT_FULL: | |
474 ACI_ERR_DESC( ACI_ERR_CLASS_Cme, CME_ERR_SimNoExtAvail); | |
475 return (AT_FAIL); | |
476 | |
477 case PHB_TAG_EXCEEDED: | |
478 ACI_ERR_DESC( ACI_ERR_CLASS_Cme, CME_ERR_TxtToLong ); | |
479 return (AT_FAIL); | |
480 | |
481 #ifdef TI_PS_FFS_PHB | |
482 case PHB_LOCKED: | |
483 return (AT_BUSY); | |
484 #endif | |
485 | |
486 case PHB_FAIL: | |
487 default: | |
488 ACI_ERR_DESC( ACI_ERR_CLASS_Cme, CME_ERR_Unknown ); | |
489 return (AT_FAIL); | |
490 } | |
491 } | |
492 | |
493 case ( SNGL_INVLD_PRSNT ): | |
494 ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter ); | |
495 return( AT_FAIL ); | |
496 } | |
497 return(AT_FAIL); | |
498 } | |
499 | |
500 | |
501 GLOBAL T_ACI_RETURN sAT_PlusCPBW ( T_ACI_CMD_SRC srcId, | |
502 SHORT index, | |
503 CHAR* number, | |
504 T_ACI_TOA* type, | |
505 T_ACI_PB_TEXT* text, | |
506 T_ACI_VP_ABS* dateTime ) | |
507 { | |
508 T_PHB_CMD_PRM * pPHBCmdPrm; /* points to PHB command parameters */ | |
509 | |
510 T_PHB_CMH_SNGL_STAT indexStat; /* status of parameter <index> */ | |
511 T_PHB_CMH_CMN_STAT entryStat; /* status of parameter <number>, */ | |
512 /* <type> and <text> */ | |
513 T_PHB_RETURN result; | |
514 T_ACI_RETURN aci_return; | |
515 UBYTE pb_status; | |
516 | |
517 #ifndef TI_PS_FFS_PHB | |
518 UBYTE ext_rcd_num = 0xFF; | |
519 #endif | |
520 | |
521 TRACE_FUNCTION ("sAT_PlusCPBW ()"); | |
522 | |
523 #ifndef NO_ASCIIZ | |
524 if ( text NEQ NULL ) | |
525 { | |
526 UBYTE tmpBuf[MAX_ALPHA_LEN]; | |
527 USHORT len; | |
528 | |
529 if (text->data[0] NEQ 0x80 AND text->data[0] NEQ 0x81 | |
530 AND text->data[0] NEQ 0x82) | |
531 { | |
532 text->cs = CS_Sim; | |
533 cmh_cvtToDefGsm ( (CHAR*)text->data, (CHAR*)tmpBuf, &len ); | |
534 text->len = (UBYTE)len; | |
535 memcpy ( text->data, tmpBuf, text->len ); | |
536 } | |
537 } | |
538 #endif /* #ifndef NO_ASCIIZ */ | |
539 | |
540 /* check command source */ | |
541 if(!cmh_IsVldCmdSrc (srcId)) | |
542 { | |
543 return( AT_FAIL ); | |
544 } | |
545 | |
546 /* If the phonebook status is not PHB_READY then SIM BUSY error is indicated to the user.*/ | |
547 pb_status_req(&pb_status); /* get phone book status */ | |
548 | |
549 TRACE_EVENT_P1("Current phonebook status: %d", pb_status); | |
550 | |
551 if(pb_status EQ PHB_BUSY) | |
552 { | |
553 return AT_BUSY; | |
554 } | |
555 else if(pb_status EQ PHB_UNKNOWN) | |
556 { | |
557 ACI_ERR_DESC( ACI_ERR_CLASS_Cme, CME_ERR_Unknown ); | |
558 return AT_FAIL; | |
559 } | |
560 | |
561 pPHBCmdPrm = &cmhPrm[srcId].phbCmdPrm; | |
562 | |
563 /* check preselected phonebook storage */ | |
564 if ( pPHBCmdPrm -> cmhStor EQ PB_STOR_NotPresent ) | |
565 { | |
566 ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter ); | |
567 return( AT_FAIL ); | |
568 } | |
569 | |
570 /* check preselected phonebook storage for FDN or BDN */ | |
571 if ( ( simShrdPrm.pn2Stat EQ PS_PIN2 OR | |
572 simShrdPrm.pn2Stat EQ NO_VLD_PS ) | |
573 AND | |
574 ( pPHBCmdPrm -> cmhStor EQ PB_STOR_Fd OR | |
575 pPHBCmdPrm -> cmhStor EQ PB_STOR_Bd ) ) | |
576 { | |
577 if ( simShrdPrm.PINStat EQ PS_RDY ) | |
578 { | |
579 simShrdPrm.PINStat = PS_PIN2; | |
580 } | |
581 ACI_ERR_DESC( ACI_ERR_CLASS_Cme, CME_ERR_SimPin2Req ); | |
582 return( AT_FAIL ); | |
583 } | |
584 | |
585 /* process the status of parameter <index> */ | |
586 if ( index EQ ACI_NumParmNotPresent ) | |
587 { | |
588 indexStat = SNGL_NOT_PRSNT; | |
589 } | |
590 else if( index > PHB_CMH_IDX_MAX OR | |
591 index < PHB_CMH_IDX_MIN ) | |
592 { | |
593 indexStat = SNGL_INVLD_PRSNT; | |
594 } | |
595 else | |
596 { | |
597 indexStat = SNGL_VLD_PRSNT; | |
598 } | |
599 | |
600 /* process the status of parameter <number>, <type> and <text> */ | |
601 if ( number EQ NULL AND | |
602 type EQ NULL AND | |
603 text EQ NULL ) | |
604 { | |
605 entryStat = CMN_NOT_PRSNT; | |
606 } | |
607 else if ( number NEQ NULL AND | |
608 text NEQ NULL ) | |
609 { | |
610 entryStat = CMN_FULL_PRSNT; | |
611 } | |
612 else | |
613 { | |
614 entryStat = CMN_PRTLY_PRSNT; | |
615 } | |
616 | |
617 /* | |
618 *----------------------------------------------------------------- | |
619 * process the parameter: | |
620 * | |
621 * A -> number, type, text | |
622 * B -> index | |
623 * | |
624 * 0 -> all elements not present | |
625 * 1 -> all elements present | |
626 * | |
627 * A | B | result | |
628 * --+---+--------------------------- | |
629 * 0 | 0 | fail | |
630 * 0 | 1 | delete entry | |
631 * 1 | 0 | write to first empty entry | |
632 * 1 | 1 | write to specific entry | |
633 *----------------------------------------------------------------- | |
634 */ | |
635 switch ( entryStat ) | |
636 { | |
637 /* process variable <entryStat> with value <CMN_FULL_PRSNT> */ | |
638 case ( CMN_FULL_PRSNT): | |
639 case ( CMN_PRTLY_PRSNT ): | |
640 aci_return = cmhPHB_add_record(srcId, indexStat, text, number, type, index, dateTime, pPHBCmdPrm->phbStor); | |
641 if(aci_return EQ AT_EXCT) | |
642 { | |
643 pPHBCmdPrm->curCmd = AT_CMD_CPBW; | |
644 } | |
645 return(aci_return); | |
646 | |
647 /* process variable <entryStat> with value <CMN_NOT_PRSNT> */ | |
648 case ( CMN_NOT_PRSNT ): | |
649 | |
650 if ( indexStat NEQ SNGL_VLD_PRSNT ) | |
651 { | |
652 ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter ); | |
653 return( AT_FAIL ); | |
654 } | |
655 | |
656 #ifdef TI_PS_FFS_PHB | |
657 result = pb_del_record ((T_PHB_TYPE)pPHBCmdPrm->phbStor,index); | |
658 #else | |
659 result = pb_delete_record (pPHBCmdPrm->phbStor, | |
660 (UBYTE) index, | |
661 &ext_rcd_num, | |
662 TRUE); | |
663 #endif | |
664 | |
665 switch (result) | |
666 { | |
667 case PHB_EXCT: | |
668 pPHBCmdPrm->curCmd = AT_CMD_CPBW; | |
669 return (AT_EXCT); | |
670 | |
671 case PHB_OK: | |
672 return (AT_CMPL); | |
673 | |
674 #ifdef TI_PS_FFS_PHB | |
675 case PHB_LOCKED: | |
676 return (AT_BUSY); | |
677 #endif | |
678 | |
679 case PHB_FAIL: | |
680 ACI_ERR_DESC( ACI_ERR_CLASS_Cme, CME_ERR_InvIdx ); | |
681 return (AT_FAIL); | |
682 | |
683 default: | |
684 ACI_ERR_DESC( ACI_ERR_CLASS_Cme, CME_ERR_Unknown ); | |
685 return (AT_FAIL); | |
686 } | |
687 } | |
688 | |
689 return ( AT_CMPL ); | |
690 } | |
691 | |
692 /* | |
693 +-------------------------------------------------------------------+ | |
694 | PROJECT : GSM-PS (6147) MODULE : CMH_PHBS | | |
695 | STATE : code ROUTINE : sAT_PlusCPBR | | |
696 +-------------------------------------------------------------------+ | |
697 | |
698 PURPOSE : This is the functional counterpart of the +CPBR | |
699 AT command which is responsible for reading phonebook | |
700 entries from memory. | |
701 | |
702 <startIdx>: index of first location to be read | |
703 <stopIdx>: index of last location to be read | |
704 <lastIdx>: index of last location already read | |
705 <pbLst>: list of phonebook entries | |
706 */ | |
707 GLOBAL T_ACI_RETURN sAT_PlusCPBR ( T_ACI_CMD_SRC srcId, | |
708 SHORT startIdx, | |
709 SHORT stopIdx, | |
710 SHORT* lastIdx, | |
711 T_ACI_PB_ENTR* pbLst) | |
712 { | |
713 TRACE_FUNCTION ("sAT_PlusCPBR ()"); | |
714 | |
715 return cmhPHB_PlusCPBR ( srcId, | |
716 SR_TYP_Physical, | |
717 startIdx, | |
718 stopIdx, | |
719 lastIdx, | |
720 pbLst ); | |
721 } | |
722 | |
723 | |
724 | |
725 /* | |
726 PURPOSE : This is the functional counterpart of the %CPBR | |
727 AT command which is responsible for reading phonebook | |
728 entries from memory. | |
729 | |
730 ************************************************** | |
731 Added by Shen,Chao March.18th.2003 | |
732 ************************************************** | |
733 */ | |
734 GLOBAL T_ACI_RETURN sAT_PercentCPBR ( T_ACI_CMD_SRC srcId, | |
735 SHORT startIdx, | |
736 SHORT stopIdx, | |
737 T_ACI_SR_TYP searchMode, | |
738 SHORT* lastIdx, | |
739 T_ACI_PB_ENTR* pbLst ) | |
740 { | |
741 TRACE_FUNCTION ("sAT_PercentCPBR ()"); | |
742 | |
743 return cmhPHB_PlusCPBR ( srcId, | |
744 searchMode, | |
745 startIdx, | |
746 stopIdx, | |
747 lastIdx, | |
748 pbLst ); | |
749 } | |
750 | |
751 #ifdef TI_PS_FFS_PHB | |
752 /* | |
753 +-------------------------------------------------------------------+ | |
754 | PROJECT : GSM-PS (6147) MODULE : CMH_PHBS | | |
755 | STATE : code ROUTINE : cmhPHB_read_index_record | | |
756 +-------------------------------------------------------------------+ | |
757 | |
758 PURPOSE : This function reads the nth non-free record determined | |
759 by index. | |
760 This function could be implemented more efficiently | |
761 within the phonebook itself, on the other hand, | |
762 it is not used in the code for the big phonebooks like ADN, | |
763 so we should be able to live with this at least for a while. | |
764 | |
765 */ | |
766 LOCAL T_PHB_RETURN cmhPHB_read_index_record (T_PHB_TYPE type, | |
767 SHORT index, | |
768 T_PHB_RECORD *entry) | |
769 { | |
770 T_PHB_RETURN phb_result; | |
771 USHORT phy_recno; | |
772 | |
773 TRACE_FUNCTION ("cmhPHB_read_index_record()"); | |
774 | |
775 if (index < PHB_CMH_IDX_MIN) | |
776 return PHB_INVALID_IDX; | |
777 | |
778 phy_recno = PHB_CMH_IDX_MIN; | |
779 | |
780 do | |
781 { | |
782 do | |
783 { | |
784 phb_result = pb_read_record (type, phy_recno, entry); | |
785 phy_recno++; | |
786 } | |
787 while (phb_result EQ PHB_EMPTY_RECORD); | |
788 index--; | |
789 } | |
790 while (index NEQ 0); | |
791 return phb_result; | |
792 } | |
793 #endif | |
794 | |
795 /* | |
796 +-------------------------------------------------------------------+ | |
797 | PROJECT : GSM-PS (6147) MODULE : CMH_PHBS | | |
798 | STATE : code ROUTINE : cmhPHB_PlusCPBR | | |
799 +-------------------------------------------------------------------+ | |
800 | |
801 PURPOSE : This is the functional counterpart of the +CPBR | |
802 AT command which is responsible for reading phonebook | |
803 entries from memory. | |
804 | |
805 <type>: search type | |
806 <startIdx>: index of first location to be read | |
807 <stopIdx>: index of last location to be read | |
808 <lastIdx>: index of last location already read | |
809 <pbLst>: list of phonebook entries | |
810 */ | |
811 GLOBAL T_ACI_RETURN cmhPHB_PlusCPBR ( T_ACI_CMD_SRC srcId, | |
812 T_ACI_SR_TYP type, | |
813 SHORT startIdx, | |
814 SHORT stopIdx, | |
815 SHORT* lastIdx, | |
816 T_ACI_PB_ENTR* pbLst) | |
817 { | |
818 T_PHB_CMD_PRM * pPHBCmdPrm; /* points to PHB command parameters */ | |
819 SHORT toIdx; /* last used index */ | |
820 SHORT maxIdx; /* holds upper index bound */ | |
821 SHORT i; /* used for counting */ | |
822 SHORT readRec = 0; /* records already read */ | |
823 T_PHB_RECORD rec; /* read record */ | |
824 T_FCT_READ* readFct; /* selected read function */ | |
825 T_PHB_RETURN result; | |
826 #ifdef TI_PS_FFS_PHB | |
827 T_PHB_TYPE book; /* Phonebook */ | |
828 SHORT dummy_used_rcd; | |
829 UBYTE dummy_num_len; | |
830 UBYTE dummy_tag_len; | |
831 SHORT dummy_max_ext; | |
832 SHORT dummy_used_ext; | |
833 #endif | |
834 | |
835 /* | |
836 *----------------------------------------------------------------- | |
837 * check command source | |
838 *----------------------------------------------------------------- | |
839 */ | |
840 if(!cmh_IsVldCmdSrc (srcId)) | |
841 { | |
842 return( AT_FAIL ); | |
843 } | |
844 | |
845 pPHBCmdPrm = &cmhPrm[srcId].phbCmdPrm; | |
846 | |
847 /* | |
848 *----------------------------------------------------------------- | |
849 * check preselected phonebook storage | |
850 *----------------------------------------------------------------- | |
851 */ | |
852 #ifdef TI_PS_FFS_PHB | |
853 if (!cmhPHB_cvtPhbType (pPHBCmdPrm->cmhStor, &book)) | |
854 #else | |
855 if ( pPHBCmdPrm -> cmhStor EQ PB_STOR_NotPresent ) | |
856 #endif | |
857 { | |
858 ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter ); | |
859 return( AT_FAIL ); | |
860 } | |
861 | |
862 /* | |
863 *----------------------------------------------------------------- | |
864 * check input parameter <startIdx> | |
865 *----------------------------------------------------------------- | |
866 */ | |
867 #ifdef TI_PS_FFS_PHB | |
868 (void)pb_read_sizes (book, &maxIdx, | |
869 &dummy_used_rcd, &dummy_num_len, &dummy_tag_len, | |
870 &dummy_max_ext, &dummy_used_ext); | |
871 #else | |
872 if( pPHBCmdPrm->cmhStor EQ PB_STOR_Af ) /* ADN-FDN phb */ | |
873 maxIdx = MAX_AFB_RECORDS; | |
874 else | |
875 maxIdx = PHB_CMH_IDX_MAX; | |
876 #endif | |
877 | |
878 if( startIdx > maxIdx OR startIdx < PHB_CMH_IDX_MIN ) | |
879 { | |
880 ACI_ERR_DESC( ACI_ERR_CLASS_Cme, CME_ERR_InvIdx ); | |
881 return( AT_FAIL ); | |
882 } | |
883 | |
884 /* | |
885 *----------------------------------------------------------------- | |
886 * check input parameter <stopIdx> | |
887 *----------------------------------------------------------------- | |
888 */ | |
889 if ( stopIdx EQ ACI_NumParmNotPresent ) | |
890 | |
891 toIdx = startIdx; | |
892 | |
893 else | |
894 { | |
895 if( stopIdx > maxIdx OR stopIdx < PHB_CMH_IDX_MIN OR | |
896 stopIdx < startIdx ) | |
897 { | |
898 ACI_ERR_DESC( ACI_ERR_CLASS_Cme, CME_ERR_InvIdx ); | |
899 return( AT_FAIL ); | |
900 } | |
901 | |
902 else | |
903 | |
904 toIdx = stopIdx; | |
905 } | |
906 | |
907 /* | |
908 *----------------------------------------------------------------- | |
909 * calculating the read function | |
910 *----------------------------------------------------------------- | |
911 */ | |
912 switch ( type ) | |
913 { | |
914 case ( SR_TYP_Name ): readFct = pb_read_alpha_record; break; | |
915 case ( SR_TYP_Number ): readFct = pb_read_number_record; break; | |
916 #ifdef TI_PS_FFS_PHB | |
917 /*case ( SR_TYP_Index ): readFct = pb_read_index_record; break;*/ | |
918 case ( SR_TYP_Index ): readFct = cmhPHB_read_index_record; break; | |
919 case ( SR_TYP_Physical ): readFct = pb_read_record; break; | |
920 #else | |
921 case ( SR_TYP_Index ): readFct = pb_read_index_record; break; | |
922 case ( SR_TYP_Physical ): readFct = pb_read_phys_record; break; | |
923 #endif | |
924 | |
925 default: | |
926 ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter ); | |
927 return( AT_FAIL ); | |
928 } | |
929 | |
930 /* | |
931 *----------------------------------------------------------------- | |
932 * reading of records | |
933 *----------------------------------------------------------------- | |
934 */ | |
935 i = startIdx; | |
936 | |
937 while ( i <= toIdx AND readRec < MAX_PB_ENTR ) | |
938 { | |
939 result = readFct ((T_PHB_TYPE)pPHBCmdPrm->phbStor, i, &rec); | |
940 /* check for invalid index */ | |
941 if ((result EQ PHB_INVALID_IDX) AND (i EQ startIdx)) | |
942 { | |
943 ACI_ERR_DESC (ACI_ERR_CLASS_Cme, CME_ERR_InvIdx); | |
944 return( AT_FAIL ); | |
945 } | |
946 if (result EQ PHB_OK) | |
947 { | |
948 cmhPHB_cpyRecEntr (&pbLst[readRec], | |
949 #ifdef TI_PS_FFS_PHB | |
950 (T_PHB_TYPE)pPHBCmdPrm->phbStor, | |
951 #endif | |
952 &rec); | |
953 | |
954 readRec++; | |
955 } | |
956 if ( i EQ toIdx) /* this check is used in order to prevent the index = 0xFF */ | |
957 { | |
958 i++; | |
959 break; | |
960 } | |
961 else | |
962 i++; | |
963 } | |
964 | |
965 /* | |
966 *----------------------------------------------------------------- | |
967 * mark the first invalid entry | |
968 *----------------------------------------------------------------- | |
969 */ | |
970 if ( readRec < MAX_PB_ENTR ) | |
971 | |
972 cmhPHB_invldEntr ( &pbLst[readRec] ); | |
973 | |
974 /* | |
975 *----------------------------------------------------------------- | |
976 * process the parameter <lastIdx> | |
977 *----------------------------------------------------------------- | |
978 */ | |
979 /* *lastIdx = i - 1; */ | |
980 *lastIdx =(SHORT)(i - 1); /* set -1 to 255 */ | |
981 | |
982 return ( AT_CMPL ); | |
983 } | |
984 | |
985 /* | |
986 +-------------------------------------------------------------------+ | |
987 | PROJECT : GSM-PS (6147) MODULE : CMH_PHBS | | |
988 | STATE : code ROUTINE : sAT_PlusCPBF | | |
989 +-------------------------------------------------------------------+ | |
990 | |
991 PURPOSE : This is the functional counterpart of the +CPBF | |
992 AT command which is responsible for finding phonebook | |
993 entries in memory. | |
994 | |
995 <findText>: search string | |
996 <mode>: search mode | |
997 <found>: number of entries found | |
998 <pbLst>: list of found phonebook entries | |
999 */ | |
1000 #ifdef NO_ASCIIZ | |
1001 GLOBAL T_ACI_RETURN sAT_PlusCPBF ( T_ACI_CMD_SRC srcId, | |
1002 T_ACI_PB_TEXT *findtext, | |
1003 T_ACI_CPBF_MOD mode, | |
1004 SHORT *found, | |
1005 T_ACI_PB_ENTR *pbLst ) | |
1006 #else /* ifdef NO_ASCIIZ */ | |
1007 GLOBAL T_ACI_RETURN sAT_PlusCPBF ( T_ACI_CMD_SRC srcId, | |
1008 CHAR *findtext_str, | |
1009 T_ACI_CPBF_MOD mode, | |
1010 SHORT *found, | |
1011 T_ACI_PB_ENTR *pbLst ) | |
1012 #endif /* ifdef NO_ASCIIZ */ | |
1013 { | |
1014 SHORT firstIdx; /* dummy variable, not used */ | |
1015 T_ACI_PB_TEXT *find_text; | |
1016 #ifndef NO_ASCIIZ | |
1017 T_ACI_PB_TEXT findtext; | |
1018 #endif /* #ifndef NO_ASCIIZ */ | |
1019 | |
1020 TRACE_FUNCTION ("sAT_PlusCPBF ()"); | |
1021 | |
1022 #ifdef NO_ASCIIZ | |
1023 find_text = findtext; | |
1024 #else /* ifdef NO_ASCIIZ */ | |
1025 find_text = &findtext; | |
1026 | |
1027 if ( findtext_str NEQ NULL ) | |
1028 { | |
1029 USHORT len = (USHORT)strlen( findtext_str ); | |
1030 | |
1031 cmh_cvtToDefGsm ( findtext_str, (CHAR*)find_text->data, &len ); | |
1032 find_text->cs = CS_Sim; | |
1033 find_text->len = (UBYTE)len; | |
1034 } | |
1035 else | |
1036 { | |
1037 find_text->cs = CS_NotPresent; | |
1038 find_text->len = 0; | |
1039 } | |
1040 #endif /* ifdef NO_ASCIIZ */ | |
1041 | |
1042 return (cmhPHB_PlusCPBF ( srcId, | |
1043 find_text, | |
1044 SR_TYP_Name, | |
1045 mode, | |
1046 &firstIdx, | |
1047 found, | |
1048 pbLst )); | |
1049 } | |
1050 | |
1051 | |
1052 | |
1053 #ifdef NO_ASCIIZ | |
1054 GLOBAL T_ACI_RETURN sAT_PercentCPBF ( T_ACI_CMD_SRC srcId, | |
1055 T_ACI_PB_TEXT* findtext, | |
1056 T_ACI_CPBF_MOD mode, | |
1057 T_ACI_SR_TYP searchMode, | |
1058 U8 direction, | |
1059 SHORT* found, | |
1060 T_ACI_PB_ENTR* pbLst ) | |
1061 | |
1062 #else /* ifdef NO_ASCIIZ */ | |
1063 | |
1064 GLOBAL T_ACI_RETURN sAT_PercentCPBF ( T_ACI_CMD_SRC srcId, | |
1065 T_ACI_PB_TEXT* findtext, | |
1066 T_ACI_CPBF_MOD mode, | |
1067 T_ACI_SR_TYP searchMode, | |
1068 U8 direction, | |
1069 SHORT* found, | |
1070 T_ACI_PB_ENTR* pbLst ) | |
1071 #endif /* ifdef NO_ASCIIZ */ | |
1072 { | |
1073 SHORT firstIdx; /* dummy variable, not used */ | |
1074 T_ACI_PB_TEXT *find_text; | |
1075 #ifndef NO_ASCIIZ | |
1076 T_ACI_PB_TEXT findtext; | |
1077 #endif /* #ifndef NO_ASCIIZ */ | |
1078 | |
1079 TRACE_FUNCTION ("sAT_PercentCPBF ()"); | |
1080 | |
1081 #ifdef NO_ASCIIZ | |
1082 find_text = findtext; | |
1083 #else /* ifdef NO_ASCIIZ */ | |
1084 find_text = &findtext; | |
1085 | |
1086 if ( findtext_str NEQ NULL ) | |
1087 { | |
1088 USHORT len = (USHORT)strlen( findtext_str ); | |
1089 | |
1090 cmh_cvtToDefGsm ( findtext_str, (CHAR*)find_text->data, &len ); | |
1091 find_text->cs = CS_Sim; | |
1092 find_text->len = (UBYTE)len; | |
1093 } | |
1094 else | |
1095 { | |
1096 find_text->cs = CS_NotPresent; | |
1097 find_text->len = 0; | |
1098 } | |
1099 #endif /* ifdef NO_ASCIIZ */ | |
1100 | |
1101 return (cmhPHB_PlusCPBF ( srcId, | |
1102 find_text, | |
1103 searchMode, | |
1104 mode, | |
1105 &firstIdx, | |
1106 found, | |
1107 pbLst )); | |
1108 } | |
1109 | |
1110 | |
1111 /* | |
1112 +-------------------------------------------------------------------+ | |
1113 | PROJECT : GSM-PS (6147) MODULE : CMH_PHBS | | |
1114 | STATE : code ROUTINE : cmhPHB_PlusCPBF | | |
1115 +-------------------------------------------------------------------+ | |
1116 | |
1117 PURPOSE : This is the functional counterpart of the +CPBF | |
1118 AT command which is responsible for finding phonebook | |
1119 entries in memory. | |
1120 | |
1121 <findText>: search string | |
1122 <type>: search type | |
1123 <mode>: search mode | |
1124 <firstIdx>: first found index | |
1125 <found>: number of entries found | |
1126 <pbLst>: list of found phonebook entries | |
1127 | |
1128 HM 7-Sep-2005: Warning, MFW is using this function directly! | |
1129 | |
1130 */ | |
1131 GLOBAL T_ACI_RETURN cmhPHB_PlusCPBF ( T_ACI_CMD_SRC srcId, | |
1132 T_ACI_PB_TEXT *findtext, | |
1133 T_ACI_SR_TYP type, | |
1134 T_ACI_CPBF_MOD mode, | |
1135 SHORT* firstIdx, | |
1136 SHORT* found, | |
1137 T_ACI_PB_ENTR* pbLst ) | |
1138 { | |
1139 T_PHB_CMD_PRM * pPHBCmdPrm; /* points to PHB command parameters */ | |
1140 #ifdef TI_PS_FFS_PHB | |
1141 T_PHB_MATCH match_criteria; | |
1142 #else | |
1143 UBYTE cvtMode; /* converted parameter <mode> */ | |
1144 #endif | |
1145 USHORT i; /* used for counting */ | |
1146 T_PHB_RECORD fndRec; /* found records */ | |
1147 T_PHB_RETURN res; | |
1148 | |
1149 /* | |
1150 *----------------------------------------------------------------- | |
1151 * check command source | |
1152 *----------------------------------------------------------------- | |
1153 */ | |
1154 if(!cmh_IsVldCmdSrc (srcId)) | |
1155 { | |
1156 return( AT_FAIL ); | |
1157 } | |
1158 | |
1159 pPHBCmdPrm = &cmhPrm[srcId].phbCmdPrm; | |
1160 | |
1161 /* | |
1162 *----------------------------------------------------------------- | |
1163 * check preselected phonebook storage | |
1164 *----------------------------------------------------------------- | |
1165 */ | |
1166 if ( pPHBCmdPrm -> cmhStor EQ PB_STOR_NotPresent ) | |
1167 { | |
1168 ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter ); | |
1169 return( AT_FAIL ); | |
1170 } | |
1171 | |
1172 /* | |
1173 *----------------------------------------------------------------- | |
1174 * check input parameter <findtext> | |
1175 *----------------------------------------------------------------- | |
1176 */ | |
1177 if ( ( findtext EQ NULL ) OR ( findtext->len EQ 0 ) ) | |
1178 { | |
1179 ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter ); | |
1180 return( AT_FAIL ); | |
1181 } | |
1182 | |
1183 /* | |
1184 *----------------------------------------------------------------- | |
1185 * check input parameter <mode> | |
1186 *----------------------------------------------------------------- | |
1187 */ | |
1188 switch ( mode ) | |
1189 { | |
1190 #ifdef TI_PS_FFS_PHB | |
1191 case CPBF_MOD_NewSearch: | |
1192 case CPBF_MOD_NextSearch: | |
1193 break; | |
1194 #else | |
1195 case ( CPBF_MOD_NewSearch ): cvtMode = PHB_NEW_SEARCH; break; | |
1196 case ( CPBF_MOD_NextSearch ): cvtMode = PHB_NEXT_SEARCH; break; | |
1197 #endif | |
1198 | |
1199 default: | |
1200 ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter ); | |
1201 return( AT_FAIL ); | |
1202 } | |
1203 | |
1204 /* | |
1205 *----------------------------------------------------------------- | |
1206 * searching for first records and reset information about found | |
1207 * and written records | |
1208 *----------------------------------------------------------------- | |
1209 */ | |
1210 #ifdef TI_PS_FFS_PHB | |
1211 if ( mode EQ CPBF_MOD_NewSearch ) | |
1212 { | |
1213 pPHBCmdPrm->order_num = 0; | |
1214 *firstIdx = 0; | |
1215 *found = 0; | |
1216 switch ( type ) | |
1217 { | |
1218 case ( SR_TYP_Name ): | |
1219 if (srcId EQ CMD_SRC_LCL) | |
1220 match_criteria = PHB_MATCH_GE; | |
1221 else | |
1222 match_criteria = PHB_MATCH_PARTIAL; | |
1223 | |
1224 res = pb_search_name_ex ((T_PHB_TYPE)pPHBCmdPrm -> phbStor, | |
1225 match_criteria, | |
1226 findtext, | |
1227 firstIdx, | |
1228 found, | |
1229 &fndRec); | |
1230 break; | |
1231 | |
1232 case ( SR_TYP_Number ): | |
1233 res = pb_search_number_ex ((T_PHB_TYPE)pPHBCmdPrm -> phbStor, | |
1234 findtext->data, | |
1235 firstIdx, | |
1236 found, | |
1237 &fndRec); | |
1238 break; | |
1239 | |
1240 default: | |
1241 ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter ); | |
1242 return( AT_FAIL ); | |
1243 } | |
1244 | |
1245 switch (res) | |
1246 { | |
1247 case PHB_OK: | |
1248 break; | |
1249 | |
1250 case PHB_LOCKED: | |
1251 return AT_BUSY; | |
1252 | |
1253 default: | |
1254 ACI_ERR_DESC( ACI_ERR_CLASS_Cme, CME_ERR_NotFound ); | |
1255 return( AT_FAIL ); | |
1256 } | |
1257 | |
1258 pPHBCmdPrm -> fndRec = *found; | |
1259 pPHBCmdPrm -> wrtRec = 0; | |
1260 i = 0; | |
1261 | |
1262 if ( pPHBCmdPrm -> fndRec > 0 ) | |
1263 { | |
1264 cmhPHB_cpyRecEntr (&pbLst[i], | |
1265 (T_PHB_TYPE)pPHBCmdPrm->phbStor, | |
1266 &fndRec); | |
1267 | |
1268 pPHBCmdPrm -> wrtRec++; | |
1269 | |
1270 i++; | |
1271 } | |
1272 pPHBCmdPrm->order_num = *firstIdx + pPHBCmdPrm->wrtRec; | |
1273 } | |
1274 else | |
1275 { | |
1276 /* CPBF_MOD_NextSearch */ | |
1277 i = 0; | |
1278 } | |
1279 #else | |
1280 if ( mode EQ CPBF_MOD_NewSearch ) | |
1281 { | |
1282 *firstIdx = 0; | |
1283 *found = 0; | |
1284 switch ( type ) | |
1285 { | |
1286 case ( SR_TYP_Name ): | |
1287 res = pb_search_name ( srcId, | |
1288 pPHBCmdPrm -> phbStor, | |
1289 findtext, | |
1290 cvtMode, | |
1291 firstIdx, | |
1292 found, | |
1293 &fndRec ); | |
1294 break; | |
1295 case ( SR_TYP_Number ): | |
1296 res = pb_search_number ( pPHBCmdPrm -> phbStor, | |
1297 findtext->data, | |
1298 cvtMode, | |
1299 firstIdx, | |
1300 found, | |
1301 &fndRec ); | |
1302 break; | |
1303 default: | |
1304 ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter ); | |
1305 return( AT_FAIL ); | |
1306 } | |
1307 | |
1308 if ( res EQ PHB_FAIL ) | |
1309 { | |
1310 ACI_ERR_DESC( ACI_ERR_CLASS_Cme, CME_ERR_NotFound ); | |
1311 return( AT_FAIL ); | |
1312 } | |
1313 | |
1314 pPHBCmdPrm -> fndRec = *found; | |
1315 pPHBCmdPrm -> wrtRec = 0; | |
1316 i = 0; | |
1317 | |
1318 if ( pPHBCmdPrm -> fndRec > 0 ) | |
1319 { | |
1320 cmhPHB_cpyRecEntr ( &pbLst[i], &fndRec ); | |
1321 | |
1322 pPHBCmdPrm -> wrtRec++; | |
1323 | |
1324 i++; | |
1325 } | |
1326 } | |
1327 else | |
1328 | |
1329 i = 0; | |
1330 #endif | |
1331 | |
1332 /* | |
1333 *----------------------------------------------------------------- | |
1334 * copying and searching of records | |
1335 *----------------------------------------------------------------- | |
1336 */ | |
1337 while ( i < MAX_PB_ENTR AND | |
1338 pPHBCmdPrm -> wrtRec < pPHBCmdPrm -> fndRec) | |
1339 { | |
1340 switch ( type ) | |
1341 { | |
1342 #ifdef TI_PS_FFS_PHB | |
1343 case ( SR_TYP_Name ): | |
1344 res = pb_read_alpha_record ((T_PHB_TYPE)pPHBCmdPrm->phbStor, | |
1345 (SHORT)pPHBCmdPrm->order_num, | |
1346 &fndRec); | |
1347 break; | |
1348 | |
1349 case ( SR_TYP_Number ): | |
1350 res = pb_read_number_record ((T_PHB_TYPE)pPHBCmdPrm->phbStor, | |
1351 (SHORT)pPHBCmdPrm->order_num, | |
1352 &fndRec); | |
1353 break; | |
1354 #else | |
1355 case ( SR_TYP_Name ): | |
1356 res = pb_search_name ( srcId, | |
1357 pPHBCmdPrm -> phbStor, | |
1358 findtext, | |
1359 CPBF_MOD_NextSearch, | |
1360 firstIdx, | |
1361 found, | |
1362 &fndRec ); | |
1363 break; | |
1364 case ( SR_TYP_Number ): | |
1365 res = pb_search_number ( pPHBCmdPrm -> phbStor, | |
1366 findtext->data, | |
1367 CPBF_MOD_NextSearch, | |
1368 firstIdx, | |
1369 found, | |
1370 &fndRec ); | |
1371 break; | |
1372 #endif | |
1373 | |
1374 default: | |
1375 ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter ); | |
1376 return( AT_FAIL ); | |
1377 } | |
1378 if (res NEQ PHB_OK) | |
1379 { | |
1380 pPHBCmdPrm->order_num = 0; | |
1381 ACI_ERR_DESC( ACI_ERR_CLASS_Cme, CME_ERR_NotFound ); | |
1382 return( AT_FAIL ); | |
1383 } | |
1384 | |
1385 cmhPHB_cpyRecEntr (&pbLst[i], | |
1386 #ifdef TI_PS_FFS_PHB | |
1387 (T_PHB_TYPE)pPHBCmdPrm->phbStor, | |
1388 #endif | |
1389 &fndRec); | |
1390 | |
1391 pPHBCmdPrm -> wrtRec++; | |
1392 pPHBCmdPrm -> order_num++; | |
1393 | |
1394 i++; | |
1395 } | |
1396 | |
1397 if (pPHBCmdPrm->wrtRec >= pPHBCmdPrm->fndRec) // #HM# | |
1398 pPHBCmdPrm->order_num = 0; // #HM# | |
1399 | |
1400 /* | |
1401 *----------------------------------------------------------------- | |
1402 * mark the first invalid entry | |
1403 *----------------------------------------------------------------- | |
1404 */ | |
1405 if ( i < MAX_PB_ENTR ) | |
1406 | |
1407 cmhPHB_invldEntr ( &pbLst[i] ); | |
1408 | |
1409 return ( AT_CMPL ); | |
1410 } | |
1411 | |
1412 /* | |
1413 +-------------------------------------------------------------------+ | |
1414 | PROJECT : GSM-PS (6147) MODULE : CMH_PHBS | | |
1415 | STATE : code ROUTINE : sAT_PercentPBCF | | |
1416 +-------------------------------------------------------------------+ | |
1417 | |
1418 PURPOSE : This is the functional counterpart of the %PBCF | |
1419 AT command which is responsible for phone configuration. | |
1420 | |
1421 <ldn>: last dialed number configuration. | |
1422 <lrn>: last received number configuration. | |
1423 */ | |
1424 GLOBAL T_ACI_RETURN sAT_PercentPBCF( T_ACI_CMD_SRC srcId, | |
1425 T_ACI_PBCF_LDN ldn, | |
1426 T_ACI_PBCF_LRN lrn, | |
1427 T_ACI_PBCF_LMN lmn ) | |
1428 { | |
1429 | |
1430 TRACE_FUNCTION ("sAT_PercentPBCF ()"); | |
1431 | |
1432 /* | |
1433 *----------------------------------------------------------------- | |
1434 * process the <ldn> parameter | |
1435 *----------------------------------------------------------------- | |
1436 */ | |
1437 switch( ldn ) | |
1438 { | |
1439 case( PBCF_LDN_NotPresent ): | |
1440 | |
1441 ldn = (T_ACI_PBCF_LDN)PBCFldn; | |
1442 break; | |
1443 | |
1444 case( PBCF_LDN_Enable ): | |
1445 case( PBCF_LDN_Disable ): | |
1446 | |
1447 break; | |
1448 | |
1449 default: | |
1450 ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter ); | |
1451 return( AT_FAIL ); | |
1452 } | |
1453 | |
1454 /* | |
1455 *----------------------------------------------------------------- | |
1456 * process the <lrn> parameter | |
1457 *----------------------------------------------------------------- | |
1458 */ | |
1459 switch( lrn ) | |
1460 { | |
1461 case( PBCF_LRN_NotPresent ): | |
1462 | |
1463 lrn = PBCFlrn; | |
1464 break; | |
1465 | |
1466 case( PBCF_LRN_Enable ): | |
1467 case( PBCF_LRN_Disable ): | |
1468 | |
1469 break; | |
1470 | |
1471 default: | |
1472 ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter ); | |
1473 return( AT_FAIL ); | |
1474 } | |
1475 | |
1476 /* | |
1477 *----------------------------------------------------------------- | |
1478 * process the <lmn> parameter | |
1479 *----------------------------------------------------------------- | |
1480 */ | |
1481 switch( lmn ) | |
1482 { | |
1483 case( PBCF_LMN_NotPresent ): | |
1484 | |
1485 lmn = PBCFlmn; | |
1486 break; | |
1487 | |
1488 case( PBCF_LMN_Enable ): | |
1489 case( PBCF_LMN_Disable ): | |
1490 | |
1491 break; | |
1492 | |
1493 default: | |
1494 ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter ); | |
1495 return( AT_FAIL ); | |
1496 } | |
1497 | |
1498 /* | |
1499 *-------------------------------------------------------------------- | |
1500 * assign the parameters | |
1501 *-------------------------------------------------------------------- | |
1502 */ | |
1503 PBCFldn = ldn; | |
1504 PBCFlrn = lrn; | |
1505 PBCFlmn = lmn; | |
1506 | |
1507 return ( AT_CMPL ); | |
1508 } | |
1509 | |
1510 /* | |
1511 +---------------------------------------------------------------------+ | |
1512 | PROJECT : GSM-PS (6147) MODULE : CMH_CCS | | |
1513 | STATE : code ROUTINE : sAT_PlusCSVM | | |
1514 +---------------------------------------------------------------------+ | |
1515 | |
1516 PURPOSE : This is the functional counterpart of the +CSVM AT command | |
1517 which is responsible for Setting a Voice Mail Number. | |
1518 | |
1519 <mode>: Enable or Disable the voice mail number | |
1520 <pnumber>: Number of the voice mail server | |
1521 <num_len>: Number length | |
1522 <type>: type of number | |
1523 */ | |
1524 | |
1525 GLOBAL T_ACI_RETURN sAT_PlusCSVM ( T_ACI_CMD_SRC srcId, | |
1526 T_ACI_CSVM_MOD mode, | |
1527 CHAR *pnumber, | |
1528 UBYTE num_len, | |
1529 T_ACI_TOA* toa) | |
1530 { | |
1531 CHAR* ef = EF_VMN_ID; | |
1532 UBYTE toa_val= 0; | |
1533 | |
1534 T_PHB_CMD_PRM * pPHBCmdPrm; /* points to PHB command parameter */ | |
1535 EF_VMN vmn; | |
1536 | |
1537 TRACE_FUNCTION ("sAT_PlusCSVM ()"); | |
1538 /* | |
1539 *----------------------------------------------------------------- | |
1540 * check command source | |
1541 *----------------------------------------------------------------- | |
1542 */ | |
1543 if(!cmh_IsVldCmdSrc (srcId)) | |
1544 { | |
1545 return( AT_FAIL ); | |
1546 } | |
1547 | |
1548 pPHBCmdPrm = &cmhPrm[srcId].phbCmdPrm; | |
1549 /* | |
1550 *------------------------------------------------------------------- | |
1551 * process the mode parameter | |
1552 *------------------------------------------------------------------- | |
1553 */ | |
1554 switch( mode ) | |
1555 { | |
1556 case( CSVM_MOD_NotPresent ): | |
1557 break; | |
1558 | |
1559 case( CSVM_MOD_Disable ): | |
1560 case( CSVM_MOD_Enable ): | |
1561 | |
1562 pPHBCmdPrm -> CSVMmode = mode; | |
1563 break; | |
1564 | |
1565 default: | |
1566 ACI_ERR_DESC( ACI_ERR_CLASS_Cme, CME_ERR_Unknown ); | |
1567 return( AT_FAIL ); | |
1568 } | |
1569 | |
1570 /* | |
1571 *------------------------------------------------------------------- | |
1572 * process the toa parameter | |
1573 *------------------------------------------------------------------- | |
1574 */ | |
1575 if( ! toa ) | |
1576 return( AT_CMPL ); | |
1577 | |
1578 switch( toa -> ton ) | |
1579 { | |
1580 case( TON_Unknown ): | |
1581 case( TON_International ): | |
1582 case( TON_National ): | |
1583 case( TON_NetSpecific ): | |
1584 case( TON_DedAccess ): | |
1585 | |
1586 break; | |
1587 | |
1588 default: | |
1589 ACI_ERR_DESC( ACI_ERR_CLASS_Cme, CME_ERR_Unknown ); | |
1590 return( AT_FAIL ); | |
1591 } | |
1592 | |
1593 switch( toa -> npi ) | |
1594 { | |
1595 case( NPI_Unknown ): | |
1596 case( NPI_IsdnTelephony ): | |
1597 case( NPI_Data ): | |
1598 case( NPI_Telex ): | |
1599 case( NPI_National ): | |
1600 case( NPI_Private ): | |
1601 | |
1602 break; | |
1603 | |
1604 default: | |
1605 ACI_ERR_DESC( ACI_ERR_CLASS_Cme, CME_ERR_Unknown ); | |
1606 return( AT_FAIL ); | |
1607 } | |
1608 | |
1609 /* | |
1610 *------------------------------------------------------------------- | |
1611 * process the phone number | |
1612 *------------------------------------------------------------------- | |
1613 */ | |
1614 /*init*/ | |
1615 memset( vmn.vmNum, 0xFF, sizeof(vmn.vmNum) ); | |
1616 | |
1617 memcpy ( vmn.vmNum, pnumber, num_len ); | |
1618 toa_val = toa_merge (*toa); | |
1619 | |
1620 vmn.numTp = toa_val; | |
1621 | |
1622 if (pcm_WriteFile((UBYTE*)ef, SIZE_EF_VMN, (UBYTE*)&vmn) EQ PCM_OK) | |
1623 { | |
1624 return( AT_CMPL ); | |
1625 } | |
1626 else | |
1627 { | |
1628 ACI_ERR_DESC( ACI_ERR_CLASS_Cme, CME_ERR_MemFail ); | |
1629 return( AT_FAIL ); | |
1630 } | |
1631 | |
1632 } | |
1633 | |
1634 #ifdef TI_PS_FFS_PHB | |
1635 void cmh_PHB_update_ext_record(UBYTE rec_num, BOOL flag ) | |
1636 { | |
1637 pb_sim_update_ext_bitmap(rec_num, flag); | |
1638 } | |
1639 #endif | |
1640 | |
1641 /*==== EOF ========================================================*/ |