FreeCalypso > hg > fc-magnetite
diff src/aci2/mfw/mfw_phb.c @ 3:93999a60b835
src/aci2, src/condat2: import of g23m/condat source pieces from TCS211
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Mon, 26 Sep 2016 00:29:36 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/aci2/mfw/mfw_phb.c Mon Sep 26 00:29:36 2016 +0000 @@ -0,0 +1,2304 @@ +/* ++--------------------------------------------------------------------+ +| PROJECT: MMI-Framework (8417) $Workfile:: mfw_phb.c $| +| $Author:: Vo $Revision:: 1 $| +| CREATED: 7.1.99 $Modtime:: 12.01.00 11:19 $| +| STATE : code | ++--------------------------------------------------------------------+ + + MODULE : MFW_PHB + + PURPOSE : This modul contains phonebook management functions. + + HISTORY: + + Oct 27, 2005 REF: OMAPS 48881 b-nekkare + Description: PhoneBook: The modify option under phonebook doesn't + work as expected. + Solution: In case of SIM storage,deleted the previous 2nd comparision + with TON as then it would be TRUE if the previous saved + number had a preceding'+'. So currently only checking for + '+' to figure out the TON. + + + Apr 14, 2005 REF: CRR 29991 xpradipg + Description: Optimisation 5: Remove the static allocation and use dynamic + allocation/ deallocation for pb_list and black_list + Solution: The static definition is removed and replaced with the dynamic + allocation + + + March 1 ,2004 REF: CRR 27832 x0012852 + Bug:SIM PIN2 related Actions are displying wrong Error Response. + Fix:MFW calls sAT_PlusCPBS() with third parameter as NULL. +*/ +#define ENTITY_MFW + +#include <string.h> +#include <stdio.h> +#include <stdlib.h> + +#if defined (NEW_FRAME) + +#include "typedefs.h" +#include "vsi.h" +#include "pei.h" +#include "custom.h" +#include "gsm.h" + +#else + +#include "STDDEFS.H" +#include "custom.h" +#include "gsm.h" +#include "vsi.h" + +#endif + + +#include "mfw_mfw.h" +#include "mfw_phb.h" +#include "mfw_phbi.h" +#include "mfw_cm.h" +#include "mfw_cmi.h" + +#include "mfw_nm.h" +#include "mfw_sim.h" +#include "mfw_sima.h" +#include "mfw_nmi.h" +#include "mfw_simi.h" +#include "mfw_sms.h" +#include "mfw_smsi.h" +#include "mfw_win.h" + +#include "ksd.h" +#include "psa.h" + +#if defined (FAX_AND_DATA) +#include "aci_fd.h" +#endif + +#include "message.h" +#include "prim.h" +#include "aci_cmh.h" + +#include "cmh.h" +#include "phb.h" +#include "cmh_phb.h" + +#include "mfw_ss.h" +#include "mfw_ssi.h" +#include "mfw_win.h" + +#include "gdi.h" + +#ifndef PCM_2_FFS +#include "pcm.h" +#include "mfw_ffs.h" +#endif + + +/* SPR#1112 - SH - Required for internal phonebook */ +#ifdef INT_PHONEBOOK +#include "ATBPbGI.h" +#endif + +/*************** MACRO definition ***********************************/ +// Apr 14, 2005 REF: CRR 29991 xpradipg +// MACRO to allocate and deallocate memory for pb_list +#ifdef FF_MMI_OPTIM +#define PB_LIST_ALLOC(ptr,size) \ + ptr = (T_ACI_PB_ENTR*)mfwAlloc(size);\ + if (NULL == ptr)\ + return MFW_PHB_FAIL; +#define PB_LIST_DEALLOC(ptr,size)\ + if(ptr)\ + mfwFree((U8*)ptr, size); +#define PB_LIST_SIZE (sizeof(T_ACI_PB_ENTR)*PHB_MAX_ENTRY_NUM) + +#else +#define PB_LIST_ALLOC(ptr, size) +#define PB_LIST_DEALLOC(ptr, size) +#endif +/********* current define *******************************************/ +// Apr 14, 2005 REF: CRR 29991 xpradipg +// remove the static allocation +#ifndef FF_MMI_OPTIM +static T_ACI_PB_ENTR pb_list[PHB_MAX_ENTRY_NUM]; +#endif +#ifdef TI_PS_FFS_PHB +static T_ACI_PB_STAT pb_stat; +#endif +static T_MFW_UPN_LIST upn_list; +static UBYTE cnt; /* count of user personal numbers */ + +EXTERN MfwHdr * current_mfw_elem; + + +//Added by Muthu Raja For PCM Replacement +#ifdef PCM_2_FFS +#define PSPDF_UPN_ID "/PCM/UPN" /* User Personal Numbers */ +#endif + + +/* ++--------------------------------------------------------------------+ +| PROJECT: MMI-Framework (8417) MODULE: MFW_PHB | +| STATE : code ROUTINE: phb_create | ++--------------------------------------------------------------------+ + + + PURPOSE : create event for phonebook management +*/ + +T_MFW_HND phb_create(T_MFW_HND hWin, T_MFW_EVENT event, T_MFW_CB cbfunc) +{ + T_MFW_HDR *hdr; + T_MFW_PHB *phb_para; + MfwHdr *insert_status =0; + + TRACE_FUNCTION ("phb_create()"); + + hdr = (T_MFW_HDR *) mfwAlloc(sizeof (T_MFW_HDR)); + phb_para = (T_MFW_PHB *) mfwAlloc(sizeof (T_MFW_PHB)); + + if (!hdr OR !phb_para) + { + TRACE_ERROR("ERROR: phb_create() Mem Alloc Failed."); + + if(hdr) + mfwFree((U8*)hdr,sizeof(MfwHdr)); + if(phb_para) + mfwFree((U8*)phb_para,sizeof(T_MFW_PHB)); + + return FALSE; + } + + /* + * initialisation of the handler + */ + phb_para->emask = event; + phb_para->handler = cbfunc; + + hdr->data = phb_para; /* store parameter in node */ + hdr->type = MFW_TYP_PHB; /* store type of event handler */ + + /* + * installation of the handler + */ + insert_status = mfwInsert((T_MFW_HDR *)hWin, hdr); + if(!insert_status) + { + TRACE_ERROR("ERROR: phb_create() Failed to Install Handler. "); + mfwFree((U8*)hdr,sizeof(MfwHdr)); + mfwFree((U8*)phb_para ,sizeof(T_MFW_PHB)); + return 0; + } + return insert_status; +} + + +/* ++---------------------------------------------------------------------+ +| PROJECT: MMI-Framework (8417) MODULE: MFW_PHB | +| STATE : code ROUTINE: phb_delete | ++---------------------------------------------------------------------+ + + + PURPOSE : delete a event for phonebook management + +*/ + +T_MFW_RES phb_delete(T_MFW_HND h) +{ + TRACE_FUNCTION ("phb_delete()"); + + if (!h OR !((T_MFW_HDR *)h)->data) + return MFW_RES_ILL_HND; + + if (!mfwRemove((T_MFW_HDR *)h)) + return MFW_RES_ILL_HND; + + mfwFree((U8 *)(((T_MFW_HDR *) h)->data),sizeof(T_MFW_PHB)); + mfwFree((U8 *)h,sizeof(T_MFW_HDR)); + + return MFW_RES_OK; +} + + +/* ++---------------------------------------------------------------------+ +| PROJECT: MMI-Framework (8417) MODULE: MFW_PHB | +| STATE : code ROUTINE: phb_signal | ++---------------------------------------------------------------------+ + + PURPOSE : send a event signal. + +*/ + +void phb_signal(T_MFW_EVENT event, void * para) +{/*MC, SPR 1389, we have to enable the display whenever + we send an event up to the MMI*/ +UBYTE temp = dspl_Enable(0); + + TRACE_FUNCTION ("phb_signal()"); +if (mfwSignallingMethod EQ 0) + { + /* + * focus is on a window + */ + if (mfwFocus) + /* + * send event to phonebook management + * handler if available + */ + if (phb_sign_exec (mfwFocus, event, para)) + { dspl_Enable(temp);/*MC, SPR 1389*/ + return; + } + + /* + * acutal focussed window is not available + * or has no phonebook management handler, + * then search all nodes from the root. + */ + if (mfwRoot) + phb_sign_exec (mfwRoot, event, para); + } + else + { + MfwHdr * h = 0; + + /* + * Focus set, then start here + */ + if (mfwFocus) + h = mfwFocus; + /* + * Focus not set, then start root + */ + if (!h) + h = mfwRoot; + + /* + * No elements available, return + */ + + while (h) + + + { + /* + * Signal consumed, then return + */ + if (phb_sign_exec (h, event, para)) + { dspl_Enable(temp);/*MC, SPR 1389*/ + return; + } + + /* + * All windows tried inclusive root + */ + if (h == mfwRoot) + { dspl_Enable(temp);/*MC, SPR 1389*/ + return; + } + + /* + * get parent window + */ + h = mfwParent(mfwParent(h)); + if(h) + h = ((MfwWin * )(h->data))->elems; + } + phb_sign_exec (mfwRoot, event, para); + } + dspl_Enable(temp);/*MC, SPR 1389*/ + +} + +/* ++---------------------------------------------------------------------+ +| PROJECT: MMI-Framework (8417) MODULE: MFW_PHB | +| STATE : code ROUTINE: phb_sign_exec | ++---------------------------------------------------------------------+ + + + PURPOSE : Send a signal if PHB management handler. + +*/ + +BOOL phb_sign_exec (T_MFW_HDR * cur_elem, T_MFW_EVENT event, T_MFW_PHB_PARA * para) +{ + TRACE_FUNCTION ("phb_sign_exec()"); + + while (cur_elem) + { + /* + * event handler is available + */ + if (cur_elem->type EQ MFW_TYP_PHB) + { + T_MFW_PHB * phb_data; + /* + * handler is PHB management handler + */ + phb_data = (T_MFW_PHB *)cur_elem->data; + if (phb_data->emask & event) + { + /* + * event is expected by the call back function + */ + phb_data->event = event; + switch (event) + { + case E_PHB_STATUS: + memcpy (&phb_data->para.phb_status, para, sizeof (T_MFW_PHB_STATUS)); + break; + case E_PHB_UPN_LIST: + memcpy (&phb_data->para.upn_list, para, sizeof (T_MFW_UPN_LIST)); + break; + /* SPR#1112 - SH - Add these events */ + case E_PHB_READY: + break; + case E_PHB_BUSY: + break; + } + + /* + * if call back defined, call it + */ + if (phb_data->handler) + { + // PATCH LE 06.06.00 + // store current mfw elem + current_mfw_elem = cur_elem; + // END PATCH LE 06.06.00 + + if ((*(phb_data->handler)) (phb_data->event, (void *)&phb_data->para)) + return TRUE; + } + } + } + cur_elem = cur_elem->next; + } + return FALSE; +} + + +/* ++-------------------------------------------------------------------+ +| PROJECT : GSM-PS (6147) MODULE : MFW_PHB | +| STATE : code ROUTINE : phb_codePhbType | ++-------------------------------------------------------------------+ + + PURPOSE : This function is used to convert the type of phonebook + used by MFW to the type of phonebook used by ACI. +*/ +LOCAL T_ACI_PB_STOR phb_codePhbType ( T_PHB_TYPE inMem ) +{ + switch ( inMem ) + { + case ( PHB_FDN ): return PB_STOR_Fd; + case ( PHB_LDN ): return PB_STOR_Ld; + case ( PHB_ECC ): return PB_STOR_Ed; + case ( PHB_ADN ): return PB_STOR_Ad; + case ( PHB_BDN ): return PB_STOR_Bd; + case ( PHB_LRN ): return PB_STOR_Lr; + case ( PHB_SDN ): return PB_STOR_Sd; + case ( PHB_LMN ): return PB_STOR_Lm; + case ( PHB_ADN_FDN ): return PB_STOR_Af; + case ( PHB_UPN ): return PB_STOR_Ud; + default: return PB_STOR_NotPresent; + } +} + + +/* ++-------------------------------------------------------------------+ +| PROJECT : GSM-PS (6147) MODULE : MFW_PHB | +| STATE : code ROUTINE : phb_decodePhbType | ++-------------------------------------------------------------------+ + + PURPOSE : This function is used to convert the type of phonebook + used by MFW to the type of phonebook used by ACI. +*/ +LOCAL T_PHB_TYPE phb_decodePhbType ( T_ACI_PB_STOR inMem ) +{ + switch ( inMem ) + { + case ( PB_STOR_Fd ): return PHB_FDN; + case ( PB_STOR_Ld ): return PHB_LDN; + case ( PB_STOR_Ed ): return PHB_ECC; + case ( PB_STOR_Ad ): return PHB_ADN; + case ( PB_STOR_Bd ): return PHB_BDN; + case ( PB_STOR_Lr ): return PHB_LRN; + case ( PB_STOR_Sd ): return PHB_SDN; + case ( PB_STOR_Lm ): return PHB_LMN; + case ( PB_STOR_Af ): return PHB_ADN_FDN; + case ( PB_STOR_Ud ): return PHB_UPN; + default: return PHB_NONE; + } +} + + +/* ++--------------------------------------------------------------------+ +| PROJECT: MMI-Framework (8417) MODULE: MFW_PHB | +| STATE : code ROUTINE: phb_cvtTon | ++--------------------------------------------------------------------+ + + + PURPOSE : This function is used to convert the type of number + used by ACI to the type of number used by MFW. + +*/ + +T_MFW_PHB_TON phb_cvtTon(T_ACI_TOA_TON ton) +{ + switch (ton) + { + case TON_NotPresent: + case TON_Unknown: return MFW_TON_UNKNOWN; + case TON_International: return MFW_TON_INTERNATIONAL; + case TON_National: return MFW_TON_NATIONAL; + case TON_NetSpecific: return MFW_TON_NET_SPECIFIC; + case TON_DedAccess: return MFW_TON_DED_ACCESS; + case TON_Alphanumeric: return MFW_TON_ALPHA_NUMERIC; + case TON_Abbreviated: return MFW_TON_ABBREVIATED; + case TON_Extended: return MFW_TON_EXTENDED; + default: return (T_MFW_PHB_TON)ton; + } +} + + +/* ++--------------------------------------------------------------------+ +| PROJECT: MMI-Framework (8417) MODULE: MFW_PHB | +| STATE : code ROUTINE: phb_ncvtTon | ++--------------------------------------------------------------------+ + + + PURPOSE : This function is used to convert the type of number + used by MFW to the type of number used by ACI. + +*/ + +T_ACI_TOA_TON phb_ncvtTon(T_MFW_PHB_TON ton) +{ + switch (ton) + { + case MFW_TON_INTERNATIONAL: return TON_International; + case MFW_TON_NATIONAL: return TON_National; + case MFW_TON_NET_SPECIFIC: return TON_NetSpecific; + case MFW_TON_DED_ACCESS: return TON_DedAccess; + case MFW_TON_ALPHA_NUMERIC: return TON_Alphanumeric; + case MFW_TON_ABBREVIATED: return TON_Abbreviated; + case MFW_TON_EXTENDED: return TON_Extended; + default: return TON_Unknown; + } +} + +/* ++--------------------------------------------------------------------+ +| PROJECT: MMI-Framework (8417) MODULE: MFW_PHB | +| STATE : code ROUTINE: phb_cvtNpi | ++--------------------------------------------------------------------+ + + + PURPOSE : This function is used to convert the numbering plan + identifier used by ACI to the numbering plan identifier + used by MFW. + +*/ + +T_MFW_PHB_TON phb_cvtNpi(T_ACI_TOA_NPI npi) +{ + switch (npi) + { + case NPI_NotPresent: + case NPI_Unknown: return (T_MFW_PHB_TON)MFW_NPI_UNKNOWN; + case NPI_IsdnTelephony: return (T_MFW_PHB_TON)MFW_NPI_ISDN; + case NPI_Data: return (T_MFW_PHB_TON)MFW_NPI_DATA; + case NPI_Telex: return (T_MFW_PHB_TON)MFW_NPI_TELEX; + case NPI_Private: return (T_MFW_PHB_TON)MFW_NPI_PRIVATE; + case NPI_National: return (T_MFW_PHB_TON)MFW_NPI_NATIONAL; +#ifdef FF_2TO1_PS + case NPI_Ermes: return (T_MFW_PHB_TON)MFW_NPI_M_ERMES; + case NPI_Cts: return (T_MFW_PHB_TON)MFW_NPI_M_CTS; +#else + case NPI_ERMES: return (T_MFW_PHB_TON)MFW_NPI_M_ERMES; + case NPI_CTS: return (T_MFW_PHB_TON)MFW_NPI_M_CTS; +#endif + default: return (T_MFW_PHB_TON)npi; + } +} + + +/* ++--------------------------------------------------------------------+ +| PROJECT: MMI-Framework (8417) MODULE: MFW_PHB | +| STATE : code ROUTINE: phb_ncvtNpi | ++--------------------------------------------------------------------+ + + + PURPOSE : This function is used to convert the numbering plan + identifier used by MFW to the numbering plan identifier + used by ACI. + +*/ + +T_ACI_TOA_NPI phb_ncvtNpi(T_MFW_PHB_TON npi) +{ + switch (npi) + { + case MFW_NPI_ISDN: return NPI_IsdnTelephony; + case MFW_NPI_DATA: return NPI_Data; + case MFW_NPI_TELEX: return NPI_Telex; + case MFW_NPI_PRIVATE: return NPI_Private; + case MFW_NPI_NATIONAL: return NPI_National; +#ifdef FF_2TO1_PS + case MFW_NPI_M_ERMES: return NPI_Ermes; + case MFW_NPI_M_CTS: return NPI_Cts; +#else + case MFW_NPI_M_ERMES: return NPI_ERMES; + case MFW_NPI_M_CTS: return NPI_CTS; +#endif + default: return NPI_Unknown; + } +} + +/* ++--------------------------------------------------------------------+ +| PROJECT: MMI-Framework (8417) MODULE: MFW_PHB | +| STATE : code ROUTINE: phb_cvtService | ++--------------------------------------------------------------------+ + + + PURPOSE : This function is used to convert the service related to + the phone number used by ACI to the service related to + the phone numberused by MFW. + +*/ + +T_MFW_PHB_SERVICE phb_cvtService(T_ACI_CNUM_SERV service) +{ + switch (service) + { + case CNUM_SERV_Asynch: return SERVICE_ASYNCH; + case CNUM_SERV_Synch: return SERVICE_SYNCH; + case CNUM_SERV_PadAsynch: return SERVICE_PAD_ASYNCH; + case CNUM_SERV_PacketSynch: return SERVICE_PACKET_SYNCH; + case CNUM_SERV_Voice: return SERVICE_VOICE; + case CNUM_SERV_Fax: return SERVICE_FAX; + default: return SERVICE_UNKNOWN; + } +} + + +/* ++--------------------------------------------------------------------+ +| PROJECT: MMI-Framework (8417) MODULE: MFW_PHB | +| STATE : code ROUTINE: phb_init | ++--------------------------------------------------------------------+ + + + PURPOSE : + +*/ + +void phb_init() +{ + TRACE_FUNCTION ("phb_init()"); + + return; +} + +/* ++--------------------------------------------------------------------+ +| PROJECT : MMI-Framework (8417) MODULE : MFW_PHB | +| STATE : code ROUTINE : phb_read_entries | ++--------------------------------------------------------------------+ + + PURPOSE : Read phonebook entries + +*/ +T_MFW phb_read_entries(UBYTE book, + UBYTE index, + UBYTE mode, + UBYTE num_entries, + T_MFW_PHB_LIST *entries) +{ + SHORT start_ind; + SHORT stop_ind; + SHORT last_ind; + UBYTE rcd_num; + UBYTE sr_type; + SHORT i; + UBYTE x; +// Apr 14, 2005 REF: CRR 29991 xpradipg +// Define the local pointer since it occupies close to 650 bytes +#ifdef FF_MMI_OPTIM + T_ACI_PB_ENTR *pb_list; +#endif + TRACE_FUNCTION ("phb_read_entries()"); + TRACE_EVENT_P4("book%d index%d mode%d num%d", book, index, mode, num_entries); + + /* SPR#1112 - SH - Internal phonebook */ +#ifdef INT_PHONEBOOK + if (book EQ PHB_IPB) + { + return GI_pb_ReadRecList(mode, index, num_entries, entries); + } +#endif + + /* check type of phonebook */ + if (book NEQ PHB_ECC + AND book NEQ PHB_ADN + AND book NEQ PHB_FDN + AND book NEQ PHB_BDN + AND book NEQ PHB_SDN + AND book NEQ PHB_LRN + AND book NEQ PHB_LDN + AND book NEQ PHB_LMN + AND book NEQ PHB_ADN_FDN + AND book NEQ PHB_UPN) + return MFW_PHB_FAIL; + + if ((book EQ PHB_LRN + OR book EQ PHB_LDN + OR book EQ PHB_LMN) + AND (mode EQ MFW_PHB_NUMBER + OR mode EQ MFW_PHB_ALPHA)) + return MFW_PHB_FAIL; + + if (book EQ PHB_ECC + AND (mode EQ MFW_PHB_NUMBER + OR mode EQ MFW_PHB_ALPHA)) + return MFW_PHB_FAIL; + + if ((book EQ PHB_ADN_FDN) + AND (mode EQ MFW_PHB_INDEX)) + return MFW_PHB_FAIL; + + /* check index */ + if (index <= 0) + return MFW_PHB_FAIL; + + switch (mode) + { + case MFW_PHB_INDEX: + sr_type = SR_TYP_Index; + break; + + case MFW_PHB_NUMBER: + sr_type = SR_TYP_Number; + break; + + case MFW_PHB_ALPHA: + sr_type = SR_TYP_Name; + break; + + case MFW_PHB_PHYSICAL: + sr_type = SR_TYP_Physical; + break; + + default: + return MFW_PHB_FAIL; + } + + /* select phonebook */ + if (sAT_PlusCPBS(CMD_SRC_LCL, phb_codePhbType ( book ), NULL) NEQ AT_CMPL) + return MFW_PHB_FAIL; + +// March 1 ,2004 REF: CRR 27832 x0012852 +// Bug:SIM PIN2 related Actions are displying wrong Error Response. +// Fix:MFW calls sAT_PlusCPBS() with third parameter as NULL. + + /* Read entries */ + entries->book = book; + rcd_num = 0; + start_ind = index; + stop_ind = index + (num_entries - 1); +// Apr 14, 2005 REF: CRR 29991 xpradipg +// dynamic allocation + PB_LIST_ALLOC(pb_list,PB_LIST_SIZE); + while (num_entries > 0) + { + for (i=0; i<PHB_MAX_ENTRY_NUM; i++) + pb_list[i].index = -1; + + if (cmhPHB_PlusCPBR(CMD_SRC_LCL, + sr_type, + start_ind, + stop_ind, + &last_ind, + pb_list) EQ AT_CMPL) + { + x = 0; + for (i=start_ind; i<=last_ind; i++) + { + if (pb_list[x].index <= 0) + break; + + memset(&entries->entry[rcd_num].date, 0, sizeof(entries->entry[rcd_num].date)); + memset(&entries->entry[rcd_num].time, 0, sizeof(entries->entry[rcd_num].time)); + if (book EQ PHB_LRN + OR book EQ PHB_LDN + OR book EQ PHB_LMN) + { + memcpy(entries->entry[rcd_num].date.year, pb_list[x].dateTime.year, PHB_MAX_DIGITS); + memcpy(entries->entry[rcd_num].date.month, pb_list[x].dateTime.month, PHB_MAX_DIGITS); + memcpy(entries->entry[rcd_num].date.day, pb_list[x].dateTime.day, PHB_MAX_DIGITS); + memcpy(entries->entry[rcd_num].time.hour, pb_list[x].dateTime.hour, PHB_MAX_DIGITS); + memcpy(entries->entry[rcd_num].time.minute, pb_list[x].dateTime.minute, PHB_MAX_DIGITS); + memcpy(entries->entry[rcd_num].time.second, pb_list[x].dateTime.second, PHB_MAX_DIGITS); + memcpy(&entries->entry[rcd_num].line, &pb_list[x].line, sizeof(UBYTE)); + } + entries->entry[rcd_num].book = phb_decodePhbType (pb_list[x].book); + entries->entry[rcd_num].index = (UBYTE)pb_list[x].index; + + +// PATCH MAK 29/09/00. Put in because long number were overwriting the index therefore they were unable to be deleted + strncpy((char *)entries->entry[rcd_num].number, (char *)pb_list[x].number, (PHB_MAX_LEN-1)); +// END PATCH MAK 29/09/00 + + +#ifdef NO_ASCIIZ + memcpy(entries->entry[rcd_num].name.data, pb_list[x].text.data, pb_list[x].text.len); + entries->entry[rcd_num].name.len = pb_list[x].text.len; +#else + if (entries->entry[rcd_num].name[0] == 0x80 || entries->entry[rcd_num].name[0] == 0x00) + { /*MC, SPR 1257 PHB_MAX_LEN is 41 when phonebook extension on, ACI only stores 21 char*/ + memcpy(entries->entry[rcd_num].name, pb_list[x].text.data, /*PHB_MAX_LEN*/MAX_ALPHA_LEN); + } + else + phb_Alpha2Gsm(&pb_list[x].text, entries->entry[rcd_num].name); +#endif + entries->entry[rcd_num].ton = phb_cvtTon(pb_list[x].type.ton); + entries->entry[rcd_num].npi = phb_cvtNpi(pb_list[x].type.npi); + rcd_num++; + x++; + } + + if (num_entries <= PHB_MAX_ENTRY_NUM OR pb_list[x].index EQ -1) + num_entries = 0; + else + num_entries -= PHB_MAX_ENTRY_NUM; + + start_ind = last_ind + 1; + } + + else + { + // Apr 14, 2005 REF: CRR 29991 xpradipg + // deallocate memory before returning + PB_LIST_DEALLOC(pb_list,PB_LIST_SIZE); + return MFW_PHB_FAIL; + } + } + + if (rcd_num) + { + entries->result = MFW_ENTRY_EXIST; + entries->num_entries = rcd_num; + } + else + { + entries->result = MFW_NO_ENTRY; + } +// Apr 14, 2005 REF: CRR 29991 xpradipg +// deallocate memory + PB_LIST_DEALLOC(pb_list,PB_LIST_SIZE); + return MFW_PHB_OK; +} + + + +/* SPR#1727 - DS - Merged updated version from 1.6 branch. */ + +/* Test that the last 6 digits match. +If there are less than 6 numbers - its probably not a phone number. +GW- For emergency calls check a full exact match for the full (but short) length +*/ +int numbersMatch(char * num1, char* num2) +{ + int j; + int len1,len2; + int nDigits = 6; + len1 = strlen(num1); + len2 = strlen(num2); + + //If the strings are the same size, test up to 6 characters. + if (len1 == len2) + nDigits = len1; + + //Test at least 2 digits and at most 6. + if ((nDigits >6 ) || (nDigits<2)) + nDigits = 6; + + //Is either string too short ? + if ((len1 < nDigits) || (len2 < nDigits)) + return (0); + + //Check last 'nDigit' characters + for (j=0;j<nDigits;j++) + { + if (num1[len1-j] != num2[len2-j]) + return (0); + } + return (1); +} + +/* ++--------------------------------------------------------------------+ +| PROJECT : MMI-Framework (8417) MODULE : MFW_PHB | +| STATE : code ROUTINE : phb_find_entries | ++--------------------------------------------------------------------+ + + PURPOSE : Find phonebook entries + +*/ + +#ifdef NO_ASCIIZ +T_MFW phb_find_entries(UBYTE book, + SHORT *index, + UBYTE mode, + SHORT num_entries, + T_MFW_PHB_TEXT *search_pattern, + T_MFW_PHB_LIST *entries) +{ +// ADDED BY RAVI - ACI CHANGES - 5-10-2005 +#if (defined(FF_2TO1_PS) && BOARD != 61) + UBYTE found; +#else + SHORT found; +#endif +// END ADDITION - RAVI - 5-10-2005 + UBYTE i; + SHORT rcd_num; + UBYTE search_mode; + UBYTE sr_type; + UBYTE sum; + T_ACI_PB_TEXT findText; + /*SPR2102, removed dbg variable*/ +// Apr 14, 2005 REF: CRR 29991 xpradipg +// local pointer definition +#ifdef FF_MMI_OPTIM + T_ACI_PB_ENTR *pb_list; +#endif + TRACE_FUNCTION ("phb_find_entries()"); + + /* SPR#1112 - SH - Internal phonebook */ +#ifdef INT_PHONEBOOK + if (book EQ PHB_IPB) + { + return GI_pb_Find(mode, (UBYTE *)index, num_entries, search_pattern, entries); + } +#endif + + if (book NEQ ECC + AND book NEQ PHB_ADN + AND book NEQ PHB_FDN + AND book NEQ PHB_BDN + AND book NEQ PHB_SDN + AND book NEQ PHB_ADN_FDN + AND book NEQ PHB_UPN) + return MFW_PHB_FAIL; + + if ((book EQ PHB_ADN_FDN) + AND (mode EQ MFW_PHB_INDEX)) + return MFW_PHB_FAIL; + + switch (mode) + { + case MFW_PHB_INDEX: + sr_type = SR_TYP_Index; + break; + + case MFW_PHB_NUMBER: + sr_type = SR_TYP_Number; + break; + + case MFW_PHB_ALPHA: + if (!search_pattern->len) + return PHB_FAIL; + sr_type = SR_TYP_Name; + break; + + case MFW_PHB_PHYSICAL: + sr_type = SR_TYP_Physical; + break; + + default: + return MFW_PHB_FAIL; + } + + /* select phonebook */ + if (sAT_PlusCPBS(CMD_SRC_LCL, phb_codePhbType ( book ), NULL) NEQ AT_CMPL) + return MFW_PHB_FAIL; + +// March 1 ,2004 REF: CRR 27832 x0012852 +// Bug:SIM PIN2 related Actions are displying wrong Error Response. +// Fix:MFW calls sAT_PlusCPBS() with third parameter as NULL. + + + TRACE_FUNCTION ("phb_find_entries()-got phonebook"); + + entries->book = book; + rcd_num = 0; + sum = num_entries; + search_mode = CPBF_MOD_NewSearch; +// Apr 14, 2005 REF: CRR 29991 xpradipg +// allocate memory + PB_LIST_ALLOC(pb_list, PB_LIST_SIZE); + while (num_entries > 0) + { + for (i=0; i<PHB_MAX_ENTRY_NUM; i++) + pb_list[i].index = -1; + + if (mode EQ MFW_PHB_ALPHA) + { + findText.len = MINIMUM(search_pattern->len, MAX_ALPHA_LEN); + memcpy(findText.data, search_pattern->data, findText.len); + } + else + { + findText.len = MINIMUM(search_pattern->len, MAX_PHB_NUM_LEN-1); //GW -SPR#762 + strncpy((char *)findText.data, (char *)search_pattern->data, findText.len); + findText.data[findText.len] = '\0'; + } + findText.cs = CS_Sim; + if (cmhPHB_PlusCPBF(CMD_SRC_LCL, + &findText, + sr_type, + search_mode, +/*ADDED BY RAVI - ACI CHANGES - 5-10-2005*/ +#if (defined(FF_2TO1_PS) && BOARD != 61) + (UBYTE *)index, +#else + index, +#endif +/*END ADDITION - RAVI - 5-10-2005*/ + &found, + pb_list) EQ AT_CMPL) + { + /*SPR 2102, removed traces which were causing a crash for long phone numbers*/ + for (i=0; i<PHB_MAX_ENTRY_NUM; i++) + { + if ((pb_list[i].index != -1) && (rcd_num < sum)) + { + TRACE_FUNCTION ("phb_find_entries()-found entry"); +/*SPR 2102, removed traces which were causing a crash for long phone numbers*/ + + if (numbersMatch((char*)pb_list[i].number,(char*)search_pattern->data)) + { + TRACE_FUNCTION ("phb_find_entries()-numbers match"); + entries->entry[rcd_num].book = phb_decodePhbType (pb_list[i].book); + entries->entry[rcd_num].index = (UBYTE)pb_list[i].index; + strcpy((char *)entries->entry[rcd_num].number, (char *)pb_list[i].number); + memcpy(entries->entry[rcd_num].name.data, pb_list[i].text.data, pb_list[i].text.len); + entries->entry[rcd_num].name.len = pb_list[i].text.len; + entries->entry[i].ton = phb_cvtTon(pb_list[rcd_num].type.ton); + entries->entry[i].npi = phb_cvtNpi(pb_list[rcd_num].type.npi); + rcd_num++; + } + } + else + break; + } + + if (num_entries <= PHB_MAX_ENTRY_NUM) + num_entries = 0; + else + num_entries = num_entries - PHB_MAX_ENTRY_NUM; + + if (search_mode EQ CPBF_MOD_NewSearch) + { +#ifdef FF_2TO1_PS + entries->num_entries = (U16)found; +#else + entries->num_entries = found; +#endif + search_mode = CPBF_MOD_NextSearch; + } + } + else + break; + } + + if (rcd_num) + { + entries->result = MFW_ENTRY_EXIST; + } + else + { + entries->result = MFW_NO_ENTRY; + + } + + /*SPR#1727 - DS - Use rcd_num variable from the for loop (that added entries to the entry structure) to set the number of entries. + * "found" variable should not be used because it may be corrupted by the ACI and set to a false value if there + * are no matching entries in the phoneook. + */ + entries->num_entries = rcd_num; +// Apr 14, 2005 REF: CRR 29991 xpradipg +// deallocate memory + PB_LIST_DEALLOC(pb_list,PB_LIST_SIZE); + return MFW_PHB_OK; +} + +#else +T_MFW phb_find_entries(UBYTE book, + SHORT *index, + UBYTE mode, + SHORT num_entries, + CHAR *search_pattern, + T_MFW_PHB_LIST *entries) +{ +// ADDED BY RAVI - ACI CHANGES - 5-10-2005 +#if (defined(FF_2TO1_PS) && BOARD != 61) + UBYTE found; +#else + SHORT found; +#endif +// END ADDITION - RAVI-5-10-2005 + UBYTE i; + UBYTE rcd_num; + UBYTE search_mode; + UBYTE sr_type; + UBYTE sum; + T_ACI_PB_TEXT findText; + + TRACE_FUNCTION ("phb_find_entries()"); + + if (book NEQ ECC + AND book NEQ PHB_ADN + AND book NEQ PHB_FDN + AND book NEQ PHB_BDN + AND book NEQ PHB_SDN + AND book NEQ PHB_ADN_FDN + AND book NEQ PHB_UPN) + return MFW_PHB_FAIL; + + if ((book EQ PHB_ADN_FDN) + AND (mode EQ MFW_PHB_INDEX)) + return MFW_PHB_FAIL; + + switch (mode) + { + case MFW_PHB_INDEX: + sr_type = SR_TYP_Index; + break; + + case MFW_PHB_NUMBER: + sr_type = SR_TYP_Number; + break; + + case MFW_PHB_ALPHA: + sr_type = SR_TYP_Name; + break; + + case MFW_PHB_PHYSICAL: + sr_type = SR_TYP_Physical; + break; + + default: + return MFW_PHB_FAIL; + } + + /* select phonebook */ + if (sAT_PlusCPBS(CMD_SRC_LCL, phb_codePhbType ( book ), NULL) NEQ AT_CMPL) + return MFW_PHB_FAIL; + +// March 1 ,2004 REF: CRR 27832 x0012852 +// Bug:SIM PIN2 related Actions are displying wrong Error Response. +// Fix:MFW calls sAT_PlusCPBS() with third parameter as NULL. + + entries->book = book; + rcd_num = 0; + sum = num_entries; + search_mode = CPBF_MOD_NewSearch; + + while (num_entries > 0) + { + for (i=0; i<PHB_MAX_ENTRY_NUM; i++) + pb_list[i].index = -1; + + findText.len = MINIMUM(strlen(search_pattern), PHB_MAX_LEN-1); //GW -SPR#762 - was MAX_ALPHA_LEN-1); + strncpy((char *)findText.data, search_pattern, findText.len); + findText.data[findText.len] = '\0'; + findText.cs = CS_Sim; + + if (cmhPHB_PlusCPBF(CMD_SRC_LCL, + &findText, + sr_type, + search_mode, +/*ADDED BY RAVI - ACI CHANGES - 5-10-2005 */ +#if (defined(FF_2TO1_PS) && BOARD != 61) + (UBYTE *)index, +#else + index, +#endif +/*END ADDITION - RAVI - 5-10-2005 */ + &found, + pb_list) EQ AT_CMPL) + { + for (i=0; i<PHB_MAX_ENTRY_NUM; i++) + { + if (pb_list[i].index NEQ -1 AND rcd_num < sum) + { + entries->entry[rcd_num].book = phb_decodePhbType (pb_list[i].book); + entries->entry[rcd_num].index = (UBYTE)pb_list[i].index; + strcpy((char *)entries->entry[rcd_num].number, (char *)pb_list[i].number); + phb_Alpha2Gsm(&pb_list[i].text, entries->entry[rcd_num].name); + entries->entry[i].ton = phb_cvtTon(pb_list[rcd_num].type.ton); + entries->entry[i].npi = phb_cvtNpi(pb_list[rcd_num].type.npi); + rcd_num++; + } + else + break; + } + + if (num_entries <= PHB_MAX_ENTRY_NUM) + num_entries = 0; + else + num_entries = num_entries - PHB_MAX_ENTRY_NUM; + + if (search_mode EQ CPBF_MOD_NewSearch) + { +#ifdef FF_2TO1_PS + entries->num_entries = (U16)found; +#else + entries->num_entries = found; +#endif + search_mode = CPBF_MOD_NextSearch; + } + } + else + break; + } + + if (rcd_num) + entries->result = MFW_ENTRY_EXIST; + else + entries->result = MFW_NO_ENTRY; + + /*SPR#1727 - DS - Use rcd_num variable from the for loop (that added entries to the entry structure) to set the number of entries. + * "found" variable should not be used because it may be corrupted by the ACI and set to a false value if there + * are no matching entries in the phoneook. + */ + entries->num_entries = rcd_num; + + return MFW_PHB_OK; +} +#endif + +/* ++--------------------------------------------------------------------+ +| PROJECT : MMI-Framework (8417) MODULE : MFW_PHB | +| STATE : code ROUTINE : phb_store_entry | ++--------------------------------------------------------------------+ + + PURPOSE : Store phonebook entry + +*/ + +T_MFW phb_store_entry(UBYTE book, + T_MFW_PHB_ENTRY *entry, + T_MFW_PHB_STATUS *status) +{ +// ADDED BY RAVI - ACI CHANGES - 5-10-2005 +#if (defined(FF_2TO1_PS) && BOARD != 61) + UBYTE used; + UBYTE total; + UBYTE avail; +#else + SHORT used; + SHORT total; + SHORT avail; +#endif +// END ADDITION - RAVI - 5-10-2005 +#ifdef TI_PS_FFS_PHB + UBYTE nlength; +#endif + UBYTE tlength; +#ifndef TI_PS_FFS_PHB + UBYTE service; +#endif + T_ACI_VP_ABS dt; + T_ACI_PB_TEXT text; + T_ACI_TOA toa; + +//jgg + TRACE_EVENT("jgg-phb_store_entry"); +//jgg + + /* SPR#1112 - SH - Internal phonebook */ +#ifdef INT_PHONEBOOK + if (book EQ PHB_IPB) + { + T_MFW ret; + ret = GI_pb_WriteRec(entry); + GI_pb_Info(status); + return ret; + } +#endif + + /* check type of phonebook */ + if (book NEQ PHB_ECC + AND book NEQ PHB_ADN + AND book NEQ PHB_FDN + AND book NEQ PHB_BDN + AND book NEQ PHB_SDN + AND book NEQ PHB_LRN + AND book NEQ PHB_LDN + AND book NEQ PHB_LMN + AND book NEQ PHB_UPN) + return MFW_PHB_FAIL; + + /* select phonebook */ + if (sAT_PlusCPBS(CMD_SRC_LCL, phb_codePhbType ( book ), NULL) NEQ AT_CMPL) + return MFW_PHB_FAIL; + +// March 1 ,2004 REF: CRR 27832 x0012852 +// Bug:SIM PIN2 related Actions are displying wrong Error Response. +// Fix:MFW calls sAT_PlusCPBS() with third parameter as NULL. + + memset(&dt, 0, sizeof(T_ACI_VP_ABS)); + if (book EQ PHB_LDN + OR book EQ PHB_LRN + OR book EQ PHB_LMN) + { + memcpy(dt.year, entry->date.year, PHB_MAX_DIGITS); + memcpy(dt.month, entry->date.month, PHB_MAX_DIGITS); + memcpy(dt.day, entry->date.day, PHB_MAX_DIGITS); + memcpy(dt.hour, entry->time.hour, PHB_MAX_DIGITS); + memcpy(dt.minute, entry->time.minute, PHB_MAX_DIGITS); + memcpy(dt.second, entry->time.second, PHB_MAX_DIGITS); + } + + // Oct 27, 2005 REF: OMAPS 48881 b-nekkare + if (entry->number[0] EQ '+' ) + toa.ton=TON_International; + else + toa.ton=TON_Unknown; + + toa.npi=NPI_IsdnTelephony; + +#ifdef NO_ASCIIZ + text.len = entry->name.len; + memcpy(text.data, entry->name.data, text.len); + text.cs = CS_Sim; +#else + phb_Gsm2Alpha(entry->name, &text); +#endif + if (sAT_PlusCPBW(CMD_SRC_LCL, + (SHORT)(entry->index EQ 0 ? ACI_NumParmNotPresent : entry->index), + (char *)entry->number, + &toa, + &text, + &dt) EQ AT_CMPL) + { +#if !defined(TI_PS_FFS_PHB) + pb_read_status(book, &service, &total, &used, &tlength, &avail); +#else + (void)pb_read_sizes (book, &total, &used, &nlength, &tlength); + avail = total - used; +#endif + + status->book = book; + status->tag_len = tlength; +#ifdef FF_2TO1_PS + status->max_entries = (U16)total; + status->used_entries = (U16)used; + status->avail_entries = (U16)avail; +#else + status->max_entries = total; + status->used_entries = used; + status->avail_entries = avail; +#endif + } + else + return MFW_PHB_FAIL; + +#ifndef TI_PS_FFS_PHB // Flushing not necessary with FFS based SIM PHB + if (book EQ PHB_LDN + OR book EQ PHB_LRN + OR book EQ PHB_LMN) + { + + pb_write_eeprom(); + } +#endif + + return MFW_PHB_OK; +} + +/* ++--------------------------------------------------------------------+ +| PROJECT : MMI-Framework (8417) MODULE : MFW_PHB | +| STATE : code ROUTINE : phb_delete_entry | ++--------------------------------------------------------------------+ + + PURPOSE : Delete phonebook entry + +*/ + +T_MFW phb_delete_entry(UBYTE book, UBYTE index, T_MFW_PHB_STATUS *status) +{ +// ADDED BY RAVI - ACI CHANGES - 5-10-2005 +#if (defined(FF_2TO1_PS) && BOARD != 61) + UBYTE used; + UBYTE total; + UBYTE avail; +#else + SHORT used; + SHORT total; + SHORT avail; +#endif +// END ADDITION BY RAVI - 5-10-2005 +#ifdef TI_PS_FFS_PHB + UBYTE nlength; +#endif + UBYTE tlength; +#ifndef TI_PS_FFS_PHB + UBYTE service; +#endif + T_ACI_VP_ABS dt; + + TRACE_FUNCTION("phb_delete_entry()"); + + /* SPR#1112 - SH - Internal phonebook */ +#ifdef INT_PHONEBOOK + if (book EQ PHB_IPB) + { + T_MFW ret; + + ret = GI_pb_DeleteRec(index); + GI_pb_Info(status); + + return ret; + } +#endif + + /* check type of phonebook */ + if (book NEQ PHB_ECC + AND book NEQ PHB_LDN + AND book NEQ PHB_LRN + AND book NEQ PHB_LMN + AND book NEQ PHB_ADN + AND book NEQ PHB_FDN + AND book NEQ PHB_BDN + AND book NEQ PHB_SDN + AND book NEQ PHB_UPN) + return MFW_PHB_FAIL; + + /* select phonebook */ + if (sAT_PlusCPBS(CMD_SRC_LCL, phb_codePhbType ( book ), NULL) NEQ AT_CMPL) + return MFW_PHB_FAIL; + +// March 1 ,2004 REF: CRR 27832 x0012852 +// Bug:SIM PIN2 related Actions are displying wrong Error Response. +// Fix:MFW calls sAT_PlusCPBS() with third parameter as NULL. + + + memset(&dt, 0, sizeof(T_ACI_VP_ABS)); + + if (sAT_PlusCPBW(CMD_SRC_LCL, index, NULL, NULL, NULL, &dt) EQ AT_CMPL) + { +#if !defined(TI_PS_FFS_PHB) + pb_read_status(book, &service, &total, &used, &tlength, &avail); +#else + (void)pb_read_sizes (book, &total, &used, &nlength, &tlength); + avail = total - used; +#endif + + status->book = book; + status->tag_len = tlength; +#ifdef FF_2TO1_PS + status->max_entries = (U16)total; + status->used_entries = (U16)used; + status->avail_entries = (U16)avail; +#else + status->max_entries = total; + status->used_entries = used; + status->avail_entries = avail; +#endif + return MFW_PHB_OK; + } + + else + return MFW_PHB_FAIL; +} + + + +/* ++--------------------------------------------------------------------+ +| PROJECT : MMI-Framework (8417) MODULE : MFW_PHB | +| STATE : code ROUTINE : phb_set_mode | ++--------------------------------------------------------------------+ + + PURPOSE : Set the unrestricted/restricted mode for FDN or BDN + +*/ + +T_MFW phb_set_mode(UBYTE book, UBYTE *passwd) +{ + if (book EQ PHB_FDN) + { + if (ss_set_clck(CLCK_FAC_Fd, CLCK_MOD_Lock, + (char *)passwd, CLASS_VceDatFaxSms, MFW_PHB) != MFW_SS_OK) + { + return MFW_PHB_FAIL; + } + } + if (book EQ PHB_ADN) + { + if (ss_set_clck(CLCK_FAC_Fd, CLCK_MOD_Unlock, + (char *)passwd, CLASS_VceDatFaxSms, MFW_PHB) != MFW_SS_OK) + { + return MFW_PHB_FAIL; + } + } + return MFW_PHB_OK; +} + + +/* ++--------------------------------------------------------------------+ +| PROJECT : MMI-Framework (8417) MODULE : MFW_PHB | +| STATE : code ROUTINE : phb_ok_clck | ++--------------------------------------------------------------------+ + + PURPOSE : successful switch for FDN + +*/ + +void phb_ok_clck() +{ + T_MFW_PHB_STATUS status; + + memset(&status, 0, sizeof(T_MFW_PHB_STATUS)); + status.book = FDN; + phb_get_status(&status); + phb_signal(E_PHB_STATUS, &status); +} + + +/* ++--------------------------------------------------------------------+ +| PROJECT : MMI-Framework (8417) MODULE : MFW_PHB | +| STATE : code ROUTINE : phb_error_clck | ++--------------------------------------------------------------------+ + + PURPOSE : unsuccessful switch for FDN or BDN + +*/ + +void phb_error_clck() +{ + phb_signal(E_PHB_ERROR, 0); +} + + +/* ++--------------------------------------------------------------------+ +| PROJECT : MMI-Framework (8417) MODULE : MFW_PHB | +| STATE : code ROUTINE : phb_check_number | ++--------------------------------------------------------------------+ + + PURPOSE : Check number against the restrictions for FDN or BDN + +*/ + +T_MFW phb_check_number(UBYTE *number) +{ +// Apr 14, 2005 REF: CRR 29991 xpradipg +// local definition +#ifdef FF_MMI_OPTIM + T_ACI_PB_ENTR *pb_list; +#endif +// ADDED BY RAVI - ACI CHANGES - 5-10-2005 +#if (defined(FF_2TO1_PS) && BOARD != 61) + UBYTE found; + UBYTE index; +#else + SHORT found; + SHORT index; +#endif +// END BY RAVI - 5-10-2005 +#if defined(FF_2TO1_PS) + T_PHB_RECORD entry; +#endif + T_ACI_PB_TEXT text; + UBYTE toa; + T_ACI_TOA ton_npi; + int i; + int len = strlen((char *)number); + + /* Search for '+' digit */ + for (i = 0; (i < len) && (number[i] != '+'); i++); + + /* '+' has been found */ + if (i != len) + { + ton_npi.ton = TON_International; + + /* Move characters of the input string to suppress the '+' */ + for (i++; i < len; i++) + number[i-1] = number[i]; + number[i-1] = '\0'; + } + else + ton_npi.ton = TON_Unknown; + + ton_npi.npi = NPI_IsdnTelephony; + cmhPHB_toaMrg ( &ton_npi, &toa ); + +/* --->>>--- */ +#if defined(FF_2TO1_PS) + if (pb_check_fdn(FDN, number, &found, &entry, toa) NEQ PHB_OK) + return MFW_PHB_FAIL; + if (found) + return PHB_FDN; +#else + /* The old pb_check_fdn() either delivered PHB_OK and found == 1 or + * PHB_FAIL and found == 0. Other combintations were not possibe, + * especially PHB_OK and found == 0. Some unreachable / dead code here. + * Found on g23m S621 by HM 21-Sep-2005 */ + if (pb_check_fdn(toa, number) NEQ PHB_OK) + return MFW_PHB_FAIL; + return PHB_FDN; +#endif /* else, #if defined(FF_2TO1_PS) */ +/* ---<<<--- */ + + if (sAT_PlusCPBS(CMD_SRC_LCL, PB_STOR_Bd, NULL) NEQ AT_CMPL) + return MFW_PHB_FAIL; + + + // March 1 ,2004 REF: CRR 27832 x0012852 SELIM + // Bug:SIM PIN2 related Actions are displying wrong Error Response. + // Fix:MFW calls sAT_PlusCPBS() with third parameter as NULL. + + text.len = MINIMUM(strlen((char *)number), PHB_MAX_LEN-1); //GW -SPR#762 - was MAX_ALPHA_LEN-1); + strncpy((char *)text.data, (char *)number, text.len); + text.data[text.len] = '\0'; + text.cs = CS_Sim; +// Apr 14, 2005 REF: CRR 29991 xpradipg +// allocate memory + PB_LIST_ALLOC(pb_list, PB_LIST_SIZE); + if (cmhPHB_PlusCPBF(CMD_SRC_LCL, + &text, + SR_TYP_Number, + CPBF_MOD_NewSearch, &index, + &found, pb_list) NEQ AT_CMPL) + { +// Apr 14, 2005 REF: CRR 29991 xpradipg +// deallocate memory + PB_LIST_DEALLOC(pb_list, PB_LIST_SIZE); + return MFW_PHB_FAIL; + } + if (found) + { +// Apr 14, 2005 REF: CRR 29991 xpradipg +// deallocate memory + PB_LIST_DEALLOC(pb_list, PB_LIST_SIZE); + return PHB_BDN; + } +// Apr 14, 2005 REF: CRR 29991 xpradipg +// deallocat memory + PB_LIST_DEALLOC(pb_list, PB_LIST_SIZE); + return PHB_OK; +} + + +/* ++--------------------------------------------------------------------+ +| PROJECT : MMI-Framework (8417) MODULE : MFW_PHB | +| STATE : code ROUTINE : phb_get_status | ++--------------------------------------------------------------------+ + + PURPOSE : Check number against the restrictions for FDN or BDN + +*/ + +T_MFW phb_get_status(T_MFW_PHB_STATUS *status) +{ +// ADDED BY RAVI - ACI CHANGES - 5-10-2005 +#if (defined(FF_2TO1_PS) && BOARD != 61) + UBYTE used; + UBYTE total; + UBYTE avail; +#else + SHORT used; + SHORT total; + SHORT avail; +#endif + +// END ADDITION BY RAVI - 5-10-2005 + UBYTE type; +#ifdef TI_PS_FFS_PHB + UBYTE num_len; +#else + UBYTE service; +#endif + UBYTE tag_len; + + TRACE_FUNCTION("phb_get_status()"); + + /* SPR#1112 - SH - Internal phonebook */ +#ifdef INT_PHONEBOOK + if (status->book EQ PHB_IPB) + { + GI_pb_Info(status); + return MFW_PHB_OK; + } +#endif + + switch (status->book) + { + case PHB_ECC: + type = ECC; + break; + case PHB_ADN: + type = ADN; + break; + case PHB_FDN: + type = FDN; + break; +#ifndef TI_PS_FFS_PHB + case PHB_ADN_FDN: + type = ADN_FDN; + break; +#endif + case PHB_BDN: + type = BDN; + break; + case PHB_SDN: + type = SDN; + break; + case PHB_LRN: + type = LRN; + break; + case PHB_LDN: + type = LDN; + break; + case PHB_LMN: + type = LMN; + break; + case PHB_UPN: + type = UPN; + break; + default: + return MFW_PHB_FAIL; + } + +#if !defined(TI_PS_FFS_PHB) + if (pb_read_status(type, &service, &total, &used, + &tag_len, &avail) == PHB_FAIL) + return MFW_PHB_FAIL; +#else + if (pb_read_sizes (type, &total, &used, &num_len, &tag_len) == PHB_FAIL) + return MFW_PHB_FAIL; + avail = total - used; +#endif + + status->tag_len = tag_len; +#ifdef FF_2TO1_PS + status->max_entries = (U16)total; + status->used_entries = (U16)used; + status->avail_entries = (U16)avail; +#else + status->max_entries = total; + status->used_entries = used; + status->avail_entries = avail; +#endif + return MFW_PHB_OK; +} + + +/* ++--------------------------------------------------------------------+ +| PROJECT : MMI-Framework (8417) MODULE : MFW_PHB | +| STATE : code ROUTINE : phb_get_mode | ++--------------------------------------------------------------------+ + + PURPOSE : Request the status of FDN + +*/ + +int phb_get_mode(void) +{ + T_ACI_CLSSTAT clsStat; + +#ifdef TI_PS_FFS_PHB + if (pb_stat == PB_STAT_Busy) + return PHB_LOADING; + + if (pb_stat != PB_STAT_Ready) + return MFW_PHB_FAIL; +#else + UBYTE stat; + + pb_status_req(&stat); + if (stat == PHB_BUSY) + return PHB_LOADING; + + if (stat != PHB_READY) + return MFW_PHB_FAIL; +#endif + + if (qAT_PlusCLCK(CMD_SRC_LCL, CLCK_FAC_Fd, + CLASS_NotPresent, &clsStat) EQ AT_CMPL) + { + switch (clsStat.status) + { + case STATUS_NotActive: + return PHB_UNRESTRICTED; + + case STATUS_Active: + return PHB_RESTRICTED; + + case STATUS_NotPresent: + return PHB_NOT_ALLOCATED; + } + } + return MFW_PHB_FAIL; +} + + +/* ++--------------------------------------------------------------------+ +| PROJECT : MMI-Framework (8417) MODULE : MFW_PHB | +| STATE : code ROUTINE : phb_delete_book | ++--------------------------------------------------------------------+ + + PURPOSE : + +*/ + +T_MFW phb_delete_book(UBYTE book) +{ + T_MFW_PHB_STATUS status; + T_MFW_PHB_ENTRY entry; + T_MFW_PHB_LIST entries; + T_MFW_PHB_RETURN v_returnedStatus = MFW_PHB_OK; + T_PHB_RETURN phb_return; + + TRACE_FUNCTION("phb_delete_book()"); + + if (book == PHB_ADN OR + book == PHB_FDN OR + book == PHB_BDN OR + book == PHB_SDN OR + book == PHB_UPN) + + { +#ifdef TI_PS_FFS_PHB + /* + * When we're returning MFW_PHB_OK and the book is a SIM book + * normally we're not really finished with the operation here + * as the synchronization to the SIM is still ongoing. + */ + phb_return = pb_del_book(book); + if ((phb_return EQ PHB_OK) OR (phb_return EQ PHB_EXCT)) +#else + if (pb_delete_book(book) == PHB_OK) +#endif + return MFW_PHB_OK; + else + return MFW_PHB_FAIL; + } + + entries.entry = &entry; + status.book = book; + phb_get_status(&status); + + /* + * PATCH CDB 12 04 2000 : This function has been modified to store the RAM copy of the + * LDN/LMN/LRN phonebook in E2PROM. As we had returns in the middle of the function, + * we have to make a record of each possible returned value of the various function, + * then return it. At the end, we return the copied returned value. + */ + while (status.used_entries) + { + if (phb_read_entries(book, 1, MFW_PHB_INDEX, 1, &entries) != MFW_PHB_OK) + { + v_returnedStatus = MFW_PHB_FAIL; + break; + } + + if (!entries.num_entries) + { + v_returnedStatus = MFW_PHB_OK; + break; + } + + if (phb_delete_entry(book, entries.entry->index, &status)!= MFW_PHB_OK) + { + v_returnedStatus = MFW_PHB_FAIL; + break; + } + } + +#ifndef TI_PS_FFS_PHB // Flushing not necessary with FFS based SIM PHB + if ((book EQ PHB_LDN) OR (book EQ PHB_LRN) OR (book EQ PHB_LMN)) + { + // Don't forget to store it in the E2PROM !!! + pb_write_eeprom(); + } +#endif + + /* + * end of beautiful patch + */ + return (v_returnedStatus); +} + + +/* ++--------------------------------------------------------------------+ +| PROJECT : MMI-Framework (8417) MODULE : MFW_PHB | +| STATE : code ROUTINE : phb_set_auto_off | ++--------------------------------------------------------------------+ + + PURPOSE : + +*/ + +T_MFW phb_set_auto_off(UBYTE mode) +{ + if (mode == PHB_AUTO_ON) + { + if (sAT_PercentPBCF(CMD_SRC_LCL, PBCF_LDN_Enable, + PBCF_LRN_Enable, PBCF_LMN_Enable) NEQ AT_CMPL) + return MFW_PHB_FAIL; + return MFW_PHB_OK; + } + if (mode == PHB_AUTO_OFF) + { + if (sAT_PercentPBCF(CMD_SRC_LCL, PBCF_LDN_Disable, + PBCF_LRN_Disable, PBCF_LMN_Disable) != AT_CMPL) + return MFW_PHB_FAIL; + return MFW_PHB_OK; + } +} + + +/* ++--------------------------------------------------------------------+ +| PROJECT : MMI-Framework (8417) MODULE : MFW_PHB | +| STATE : code ROUTINE : phb_get_auto_off | ++--------------------------------------------------------------------+ + + PURPOSE : + +*/ + +T_MFW phb_get_auto_off(UBYTE *mode) +{ + T_ACI_PBCF_LDN ldn; + T_ACI_PBCF_LRN lrn; + T_ACI_PBCF_LMN lmn; + if (qAT_PercentPBCF(CMD_SRC_LCL, &ldn, &lrn, &lmn) != AT_CMPL) + return MFW_PHB_FAIL; + + switch (ldn) + { + case PBCF_LDN_Disable: + *mode = PHB_AUTO_OFF; + return MFW_PHB_OK; + case PBCF_LDN_Enable: + *mode = PHB_AUTO_ON; + return MFW_PHB_OK; + default: + return MFW_PHB_FAIL; + } +} + + +/* ++--------------------------------------------------------------------+ +| PROJECT : MMI-Framework (8417) MODULE : MFW_PHB | +| STATE : code ROUTINE : phb_switch_entry | ++--------------------------------------------------------------------+ + + PURPOSE : switch one entry between ADN and FDN + +*/ + +T_MFW_PHB_RETURN phb_switch_entry (T_MFW_PHB_ENTRY *entry, UBYTE *passwd) +{ + T_MFW_PHB_STATUS status; + SHORT pn1Cnt = -1; + SHORT pn2Cnt = -1; + SHORT pk1Cnt = -1; + SHORT pk2Cnt = -1; + T_ACI_PVRF_STAT ps1 = PVRF_STAT_NotPresent; + T_ACI_PVRF_STAT ps2 = PVRF_STAT_NotPresent; + // UBYTE avail = 0; // RAVI + UBYTE index; + + qAT_PercentPVRF(CMD_SRC_LCL, &pn1Cnt, + &pn2Cnt, &pk1Cnt, &pk2Cnt, &ps1, &ps2); + if (ps2 != PVRF_STAT_NotRequired) + { + if (pn2Cnt < 3) + return MFW_PHB_PIN2_REQ; + else + return MFW_PHB_PUK2_REQ; + } + + index = entry->index; + entry->index = 0; + + switch (entry->book) + { + case PHB_FDN: + if (phb_store_entry (PHB_ADN, entry, &status) == MFW_PHB_OK) + { + phb_delete_entry (PHB_FDN, index, &status); + return MFW_PHB_OK; + } + break; + case PHB_ADN: + if (phb_store_entry (PHB_FDN, entry, &status) == MFW_PHB_OK) + { + phb_delete_entry (PHB_ADN, index, &status); + return MFW_PHB_OK; + } + break; + default: + break; + } + return (MFW_PHB_FAIL); +} + + +/* ++--------------------------------------------------------------------+ +| PROJECT: MMI-Framework (8417) MODULE: MFW_PHB | +| STATE : code ROUTINE: phb_read_upn_eeprom | ++--------------------------------------------------------------------+ + + + PURPOSE : Read user personal numbers from EEPROM + +*/ + +void phb_read_upn_eeprom(void) +{ + +#ifdef PCM_2_FFS + T_PSPDF_UPN efupn; +#else + EF_UPN efupn; +#endif + + USHORT max_rcd; + T_ACI_TOA type; + UBYTE version; + UBYTE i; + + TRACE_FUNCTION("phb_read_upn_eeprom()"); + + if (upn_list.count) + { + phb_signal(E_PHB_UPN_LIST, &upn_list); + return; + } + +#ifdef PCM_2_FFS + if (ffs_ReadRecord((UBYTE *)PSPDF_UPN_ID, (UBYTE *)&efupn, + sizeof( T_PSPDF_UPN ) , (USHORT)(i+1), 1 ) == sizeof( T_PSPDF_UPN ) ) +#else + pcm_ReadRecord((UBYTE *)EF_UPN_ID, + 1, + SIZE_EF_UPN, + (UBYTE *)&efupn, + &version, + &max_rcd); + +#endif + for (i=0; i<max_rcd; i++) + { +#ifdef PCM_2_FFS + if (ffs_ReadRecord((UBYTE *)PSPDF_UPN_ID, (UBYTE *)&efupn, + sizeof( T_PSPDF_UPN ) , (USHORT)(i+1), 1 ) == sizeof( T_PSPDF_UPN ) ) +#else + if (pcm_ReadRecord((UBYTE *)EF_UPN_ID, + (USHORT)(i+1), + SIZE_EF_UPN, + (UBYTE *)&efupn, + &version, + &max_rcd) == DRV_OK) +#endif + + { + if (efupn.usrNum[0] NEQ 0xff) + { + /* copy record */ +#ifdef NO_ASCIIZ +/*MC, SPR1257 name strings should use MAX_ALPHA_LEN*/ + cmhPHB_getTagNt (efupn.alphId, + 10, /* alpha length is 10 bytes in eeprom */ + (CHAR *)upn_list.upn[cnt].name.data, + /*PHB_MAX_LEN*/MAX_ALPHA_LEN); +#else +/*MC, SPR1257 name strings should use MAX_ALPHA_LEN*/ + cmhPHB_getTagNt (efupn.alphId, + 10, /* alpha length is 10 bytes in eeprom */ + (CHAR *)upn_list.upn[cnt].name, + /*PHB_MAX_LEN*/MAX_ALPHA_LEN); +#endif + cmhPHB_getAdrStr ((CHAR *)upn_list.upn[cnt].number, + PHB_MAX_LEN - 1, + efupn.usrNum, + efupn.len); + + cmhPHB_toaDmrg (efupn.numTp, &type); + upn_list.upn[cnt].ton = phb_cvtTon(type.ton); + upn_list.upn[cnt].npi = (T_MFW_PHB_NPI)phb_cvtNpi(type.npi); + /* ccp */ + /* ext1 */ + cnt++; + upn_list.count++; + } + } + } + phb_signal(E_PHB_UPN_LIST, &upn_list); +} + + +/* ++--------------------------------------------------------------------+ +| PROJECT: MMI-Framework (8417) MODULE: MFW_PHB | +| STATE : code ROUTINE: phb_get_upn | ++--------------------------------------------------------------------+ + + + PURPOSE : Request user personal numbers + +*/ + +void phb_get_upn(void) +{ + T_MFW_PHB_ENTRY phb_entry; + T_MFW_PHB_LIST phb_list; + T_MFW_PHB_STATUS status; + int i; + SHORT start_ind; + SHORT stop_ind; + SHORT last_ind; +// Apr 14, 2005 REF: CRR 29991 xpradipg +// local pointer definition +#ifdef FF_MMI_OPTIM + T_ACI_PB_ENTR *pb_list; +#endif + + TRACE_FUNCTION("phb_get_upn()"); + + phb_list.entry = &phb_entry; + + memset(&status, 0, sizeof(status)); + status.book = PHB_UPN; + phb_get_status(&status); + + upn_list.count = 0; + /* select phonebook */ + if (sAT_PlusCPBS(CMD_SRC_LCL, phb_codePhbType ( PHB_UPN ), NULL) NEQ AT_CMPL) + +// March 1 ,2004 REF: CRR 27832 x0012852 +// Bug:SIM PIN2 related Actions are displying wrong Error Response. +// Fix:MFW calls sAT_PlusCPBS() with third parameter as NULL. + + phb_signal(E_PHB_UPN_LIST, &upn_list); + + start_ind = 1; + stop_ind = 1; + upn_list.count = 0; +// Apr 14, 2005 REF: CRR 29991 xpradipg +// allocate memory +#ifdef FF_MMI_OPTIM + pb_list = (T_ACI_PB_ENTR*)mfwAlloc(PB_LIST_SIZE); + if(NULL == pb_list) + return; +#endif + for (i=0; i<status.used_entries; i++) + { + + if (cmhPHB_PlusCPBR(CMD_SRC_LCL, + SR_TYP_Index, + start_ind, + stop_ind, + &last_ind, + pb_list) EQ AT_CMPL) + { + if (pb_list[0].index <= 0) + break; + + strcpy((char *)upn_list.upn[i].number, (char *)pb_list[0].number); +#ifdef NO_ASCIIZ + memcpy(upn_list.upn[i].name.data, pb_list[0].text.data, pb_list[0].text.len); + upn_list.upn[i].name.len = pb_list[0].text.len; +#else + phb_Alpha2Gsm(&pb_list[0].text, upn_list.upn[i].name); +#endif + upn_list.upn[i].ton = phb_cvtTon(pb_list[0].type.ton); + upn_list.upn[i].npi = (T_MFW_PHB_NPI)phb_cvtNpi(pb_list[0].type.npi); + start_ind++; + stop_ind++; + upn_list.count++; + } + } + + phb_signal(E_PHB_UPN_LIST, &upn_list); +// Apr 14, 2005 REF: CRR 29991 xpradipg +// deallocate the memory + PB_LIST_DEALLOC(pb_list, PB_LIST_SIZE); +} + +/* ++--------------------------------------------------------------------+ +| PROJECT: MMI-Framework (8417) MODULE: MFW_PHB | +| STATE : code ROUTINE: phb_save_upn | ++--------------------------------------------------------------------+ + + + PURPOSE : Save user personal numbers in EEPROM + +*/ + +T_MFW phb_save_upn(T_MFW_UPN *upn) +{ + T_MFW_PHB_ENTRY entry; + T_MFW_PHB_STATUS status; + + entry.book = PHB_UPN; +#ifdef NO_ASCIIZ + memcpy(entry.name.data, upn->name.data, upn->name.len); + entry.name.len = upn->name.len; +#endif + strcpy((char *)entry.number, (char *)upn->number); + // PATCH LE 12.05.00 + // store upn ever on first location + // zero searches for a free record, which is not + // available and then the operation fails ! + + // old code entry.index = 0; + entry.index = 1; + // END PATCH LE 12.05.00 + entry.ton = MFW_TON_UNKNOWN; + entry.npi = MFW_NPI_UNKNOWN; + + if (phb_store_entry(PHB_UPN, &entry, &status) EQ MFW_PHB_OK) + return MFW_PHB_OK; + return MFW_PHB_FAIL; +} + +/* ++--------------------------------------------------------------------+ +| PROJECT: MMI-Framework (8417) MODULE: MFW_PHB | +| STATE : code ROUTINE: phb_Alpha2Gsm | ++--------------------------------------------------------------------+ + + + PURPOSE : convert alpha to GSM string (set bit 7 to 1) + +*/ + +void phb_Alpha2Gsm(T_ACI_PB_TEXT *text, UBYTE *alpha) +{ + int i; + + for (i=0; i<text->len; i++) + { + if(i == (PHB_MAX_LEN - 1)) + break; + alpha[i] = text->data[i] | 0x80; + } + alpha[i] = '\0'; +} + +/* ++--------------------------------------------------------------------+ +| PROJECT: MMI-Framework (8417) MODULE: MFW_PHB | +| STATE : code ROUTINE: phb_Gsm2Alpha | ++--------------------------------------------------------------------+ + + + PURPOSE : convert zero-terminated GSM string to "data + len" + (set bit 7 to 0) + +*/ + +void phb_Gsm2Alpha(UBYTE *alpha, T_ACI_PB_TEXT *text) +{ + int i; + + text->len = strlen((char *)alpha); + for ( i = 0; i < text->len; i++ ) + alpha[i] = alpha[i] & 0x7F; + memcpy(text->data, alpha, text->len); + text->data[text->len] = '\0'; + text->cs = CS_Sim; +} + +/* ++--------------------------------------------------------------------+ +| PROJECT: MMI-Framework (8417) MODULE: MFW_PHB | +| STATE : code ROUTINE: rAT_phb_status | ++--------------------------------------------------------------------+ + + + PURPOSE : reading phonebook from SIM card is ready. + +*/ + +void rAT_phb_status (T_ACI_PB_STAT status) +{ +#ifdef TI_PS_FFS_PHB + pb_stat = status; + + switch (status) + { + case PB_STAT_Ready: + sms_phbReady_ind(); + phb_signal(E_PHB_READY, 0); + break; + + case PB_STAT_Busy: + case PB_STAT_Blocked: + default: + phb_signal(E_PHB_BUSY, 0); + break; + } +#else + if (status EQ PB_STAT_Ready) + { + sms_phbReady_ind(); + phb_signal(E_PHB_READY, 0); + } + if (status EQ PB_STAT_Blocked) + phb_signal(E_PHB_BUSY, 0); +#endif +} + + +/* ++--------------------------------------------------------------------+ +| PROJECT: MMI-Framework (8417) MODULE: MFW_PHB | +| STATE : code ROUTINE: phb_exit | ++--------------------------------------------------------------------+ + + + PURPOSE : + +*/ + +void phb_exit(void) +{ + TRACE_FUNCTION ("phb_exit()"); +}