FreeCalypso > hg > fc-magnetite
view src/aci2/mfw/mfw_ss.c @ 685:3fb7384e820d
tpudrv12.h: FCDEV3B goes back to being itself
A while back we had the idea of a FreeCalypso modem family whereby our
current fcdev3b target would some day morph into fcmodem, with multiple
FC modem family products, potentially either triband or quadband, being
firmware-compatible with each other and with our original FCDEV3B. But
in light of the discovery of Tango modules that earlier idea is now being
withdrawn: instead the already existing Tango hw is being adopted into
our FreeCalypso family.
Tango cannot be firmware-compatible with triband OM/FCDEV3B targets
because the original quadband RFFE on Tango modules is wired in TI's
original Leonardo arrangement. Because this Leonardo/Tango way is now
becoming the official FreeCalypso way of driving quadband RFFEs thanks
to the adoption of Tango into our FC family, our earlier idea of
extending FIC's triband RFFE control signals with TSPACT5 no longer makes
much sense - we will probably never produce any new hardware with that
once-proposed arrangement. Therefore, that triband-or-quadband FCFAM
provision is being removed from the code base, and FCDEV3B goes back to
being treated the same way as CONFIG_TARGET_GTAMODEM for RFFE control
purposes.
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Thu, 24 Sep 2020 21:03:08 +0000 |
parents | 93999a60b835 |
children |
line wrap: on
line source
/* +--------------------------------------------------------------------+ | PROJECT: MMI-Framework (8417) $Workfile:: mfw_ss.c $| | $Author:: Vo $Revision:: 1 $| | CREATED: 25.1.99 $Modtime:: 24.03.00 9:48 $| | STATE : code | +--------------------------------------------------------------------+ MODULE : MFW_SS PURPOSE : This modul contains the functions for supplementary management. $History:: mfw_ss.c $ Dec 16, 2005 REF: OMAPS00053316 x0018858 Description: E-Sample 2.58 compiler code crashes when accessing the Voicemail service in the Messages Solution: Added a NULL Check for the USSD pointer that is being received. Jul 05, 2005 REF: CRR 22565 a0876501 Description: IMEI display on handset through atd*#06# was swapped. Solution: Byte swapping corrected for IMEI decoding. Mar 30, 2005 REF: CRR 29986 xpradipg Description: Optimisation 1: Removal of unused variables and dynamically allocate/ deallocate mbndata Solution: unused variables are removed Apr 06 2005 REF: CRR 29989 xpradipg Description: Optimisation 3: replace the static global data with dynamic allocation / deallocation Solution: The static global variables are dynamically allocated and deallocated Aug 16, 2004 REF: CRR 24323 Deepa M.D Bug:Clenup of sprintf used for tracing Fix:Replace the char buf[]; sprintf (buf, "...", ...); TRACE_EVENT (buf); statements by TRACE_EVENT_PX Jul 15, 2004 REF: CRR 13873 xkundadu Description: Make an incoming call, the end user pressing 0+send will pick up the call. Instead, 0+send should reject the incoming call. Solution: Added the handling of 0/1/2 SEND for a waiting call. Modified the ss_decode() function in the mfw_ss.c file to search the sequential table in the case of waiting call also. Made changes in mfw_cm.c file also * * ***************** Version 24 ***************** * User: Vo Date: 24.03.00 Time: 10:18 * Updated in $/GSM/Condat/MS/SRC/MFW * Bug fix: result of IMEI * New: notice PIN type of SS string for PIN change/PIN unblock * * ***************** Version 23 ***************** * User: Vo Date: 10.01.00 Time: 16:09 * Updated in $/GSM/Condat/MS/SRC/MFW * new function ss_exit() * * ***************** Version 22 ***************** * User: Vo Date: 10.01.00 Time: 13:32 * Updated in $/GSM/Condat/MS/SRC/MFW * * ***************** Version 21 ***************** * User: Ak Date: 10.01.00 Time: 13:14 * Updated in $/GSM/Condat/MS/SRC/MFW * * ***************** Version 20 ***************** * User: Ak Date: 21.10.99 Time: 11:56 * Updated in $/GSM/Condat/MS/SRC/MFW * Why: Improvement * What: Passing of network basic service codes instead of GSM 2.30 * codes for SS control string results and invocations * * ***************** Version 19 ***************** * User: Ak Date: 29.09.99 Time: 8:37 * Updated in $/GSM/DEV/MS/SRC/MFW * Why: bug fix * What: strcpy do not check a NULL pointer argument, corrected * * ***************** Version 18 ***************** * User: Ak Date: 28.09.99 Time: 14:16 * Updated in $/GSM/DEV/MS/SRC/MFW * Why: bug fix * What: strcpy do not check a NULL pointer argument, corrected * * ***************** Version 17 ***************** * User: Es Date: 16.09.99 Time: 17:25 * Updated in $/GSM/DEV/MS/SRC/MFW * include SENSEI patch 13/09/99 * two minor fixes * * ***************** Version 16 ***************** * User: Vo Date: 12.09.99 Time: 14:16 * Updated in $/GSM/DEV/MS/SRC/MFW * New: USSD handle * * ***************** Version 15 ***************** * User: Vo Date: 30.08.99 Time: 12:08 * Updated in $/GSM/DEV/MS/SRC/MFW * SS string for PIN unblock * * ***************** Version 14 ***************** * User: Vo Date: 9.08.99 Time: 16:53 * Updated in $/GSM/DEV/MS/SRC/MFW * SS result from network * present IMEI * different handling of network password and PIN1/PIN2 password * * ***************** Version 13 ***************** * User: Vo Date: 21.07.99 Time: 14:44 * Updated in $/GSM/DEV/MS/SRC/MFW * * ***************** Version 12 ***************** * User: Vo Date: 16.07.99 Time: 10:39 * Updated in $/GSM/DEV/MS/SRC/MFW * * ***************** Version 11 ***************** * User: Vo Date: 9.07.99 Time: 14:56 * Updated in $/GSM/DEV/MS/SRC/MFW * * ***************** Version 1 ***************** * User: Vo Date: 10.02.99 Time: 12:41 * Created in $/GSM/DEV/MS/SRC/MFW */ #define ENTITY_MFW #include <string.h> #include <stdio.h> #include <stdlib.h> #if defined (NEW_FRAME) #include "typedefs.h" #include "vsi.h" #include "custom.h" #include "gsm.h" #else #include "STDDEFS.H" #include "custom.h" #include "gsm.h" #include "vsi.h" #endif #include "message.h" #include "prim.h" #include "aci_cmh.h" #include "cus_aci.h" #include "ksd.h" #include "prim.h" #ifndef PCM_2_FFS #include "pcm.h" #else #include "prim.h" #include "Gsm.h" #endif #include "psa.h" #include "psa_sim.h" #include "mfw_mfw.h" #include "mfw_nm.h" #include "mfw_sim.h" #include "mfw_sima.h" #include "mfw_nmi.h" #include "mfw_simi.h" #include "mfw_nma.h" #include "mfw_phb.h" #include "mfw_cm.h" #include "mfw_cmi.h" #include "mfw_ss.h" #include "mfw_ssi.h" #include "mfw_win.h" #include "mfw_phbi.h" #include <string.h> /*************** Variables ******************************************/ // Mar 30, 2005 REF: CRR 29986 xpradipg // remove unused variables #ifndef FF_MMI_OPTIM static T_MFW_SS_SUPORT ss_suport; #endif // Apr 06 2005 REF: CRR 29989 xpradipg // This scope of the variable lies within a function hence it is made as local #ifndef FF_MMI_OPTIM static T_MFW_SS_NOTIFY notify; #endif // Apr 06 2005 REF: CRR 29989 xpradipg // The below static globals are dynamically allocated in rAT_PercentKSIR where // the data is populated for the supplementary services response and // deallocated once the ss_signal function is executed where in the contents // are copied onto another variable #ifdef FF_MMI_OPTIM T_MFW_SS_CF_CNF *cf_cnf = NULL; T_MFW_SS_CB_CNF *cb_cnf = NULL; T_MFW_SS_CLI_CNF *cli_cnf = NULL; T_MFW_SS_CW_CNF *cw_cnf = NULL; T_MFW_SS_PW_CNF *pw_cnf = NULL; T_MFW_IMEI *imei_info = NULL; #else static T_MFW_SS_CF_CNF cf_cnf; static T_MFW_SS_CB_CNF cb_cnf; static T_MFW_SS_CLI_CNF cli_cnf; static T_MFW_SS_CW_CNF cw_cnf; static T_MFW_SS_PW_CNF pw_cnf; static T_MFW_SS_RES ss_res; static T_MFW_IMEI imei_info; #endif static T_MFW_SS_USSD ussd_info; // Mar 30, 2005 REF: CRR 29986 xpradipg // remove unused variables #ifndef FF_MMI_OPTIM static U8 clip_status; static U8 colp_status; static U8 clir_status; static U8 clir_prefix; static U8 colr_status; #endif static U8 clck_flag; static U8 pwd_flag; /* 1 for change PIN */ #define CF_LST_SIZE (sizeof(T_MFW_FEATURE) *MFW_MAX_FEAT_NR) #define CB_LST_SIZE (sizeof(T_MFW_TELECOM) *MFW_MAX_TELE_NR) #define CW_LST_SIZE (sizeof(T_MFW_SRV_GROUP)*MFW_MAX_SRV_NR) #define MAX_LST_BUF (MAXIMUM(MAXIMUM(CF_LST_SIZE,\ CB_LST_SIZE),\ CW_LST_SIZE)) #define LANG_RESET "*#0" /*mc, SPR 1111 beginning of language reset pseudo-SS string*/ #define TTY_NEXTCALL_ON "*55#" /* SPR#1352 - SH - Pseudo-SS string to switch on TTY on next call */ #define TTY_NEXTCALL_OFF "#55#" /* SPR#1352 - SH - Pseudo-SS string to switch off TTY on next call */ static ULONG ssLstBuf[MAX_LST_BUF/sizeof(ULONG)]; EXTERN MfwHdr * current_mfw_elem; // July 09, 2005 REF : MMI-22565 - a0876501 extern UBYTE cmhSS_getCdFromImei (T_ACI_IMEI* imei); /* +--------------------------------------------------------------------+ | PROJECT: MMI-Framework (8417) MODULE: MFW_SS | | STATE : code ROUTINE: ss_mfw_init | +--------------------------------------------------------------------+ PURPOSE : */ void ss_mfw_init(void) { // Mar 30, 2005 REF: CRR 29986 xpradipg // remove reundant code since the values assigned here are never referenced #ifndef PCM_2_FFS #ifndef FF_MMI_OPTIM EF_MSCAP mscap; EF_MSSUP mssup; EF_MSSET msset; UBYTE version; /* Read the Mobile Capabilities from EEPROM */ if (pcm_ReadFile((UBYTE *)EF_MSCAP_ID, SIZE_EF_MSCAP, (UBYTE *)&mscap, &version) EQ PCM_OK) { ss_suport.speech = (UBYTE)FldGet(mscap.chnMode,spchSupV1); ss_suport.data = (UBYTE)FldGet(mscap.datCap1,datSup); ss_suport.asyn = (UBYTE)FldGet(mscap.datCap1,AsySup); ss_suport.syn = (UBYTE)FldGet(mscap.datCap1,NTSynSup); } if (pcm_ReadFile((UBYTE *)EF_MSSUP_ID, SIZE_EF_MSSUP, (UBYTE *)&mssup, &version) EQ PCM_OK) { ss_suport.aoc = (UBYTE)FldGet(mssup.feat1,AoC); ss_suport.dtmf = (UBYTE)FldGet(mssup.feat1,DTMF); ss_suport.cf = (UBYTE)FldGet(mssup.feat1,CF); ss_suport.cb = (UBYTE)FldGet(mssup.feat1,CB); ss_suport.ussd = (UBYTE)FldGet(mssup.feat1,USSD); ss_suport.etc = (UBYTE)FldGet(mssup.feat1,ETC); } if (pcm_ReadFile((UBYTE *)EF_MSSET_ID, SIZE_EF_MSSET, (UBYTE *)&msset, &version) EQ PCM_OK) { ss_suport.clire = (UBYTE)FldGet(msset.misc,clir); ss_suport.clipr = (UBYTE)FldGet(msset.misc,clip); } #endif #endif pwd_flag = 0; } /* +--------------------------------------------------------------------+ | PROJECT: MMI-Framework (8417) MODULE: MFW_SS | | STATE : code ROUTINE: ss_exit | +--------------------------------------------------------------------+ PURPOSE : */ void ss_exit(void) { TRACE_FUNCTION("ss_exit()"); } /* +--------------------------------------------------------------------+ | PROJECT: MMI-Framework (8417) MODULE: MFW_SS | | STATE : code ROUTINE: ss_create | +--------------------------------------------------------------------+ PURPOSE : create event for supplementary management */ T_MFW_HND ss_create(T_MFW_HND hWin, T_MFW_EVENT event, T_MFW_CB cbfunc) { T_MFW_HDR *hdr; T_MFW_SS *ss_para; MfwHdr * insert_status =0; TRACE_FUNCTION("ss_create()"); hdr = (T_MFW_HDR *) mfwAlloc(sizeof (T_MFW_HDR)); ss_para = (T_MFW_SS *) mfwAlloc(sizeof (T_MFW_SS)); if (!hdr OR !ss_para) { TRACE_ERROR("ERROR: ss_create() Mem Alloc Failed."); if(hdr) mfwFree((U8*)hdr,sizeof(MfwHdr)); if(ss_para) mfwFree((U8*)ss_para,sizeof(T_MFW_SS)); return FALSE; } /* * initialisation of the handler */ ss_para->emask = event; ss_para->handler = cbfunc; hdr->data = ss_para; /* store parameter in node */ hdr->type = MFW_TYP_SS; /* store type of event handler */ /* * installation of the handler */ insert_status = mfwInsert((T_MFW_HDR *)hWin, hdr); if(!insert_status) { TRACE_ERROR("ERROR: ss_create() Failed to Install Handler. "); mfwFree((U8*)hdr,sizeof(MfwHdr)); mfwFree((U8*)ss_para,sizeof(T_MFW_SS)); return 0; } return insert_status; } /* +--------------------------------------------------------------------+ | PROJECT: MMI-Framework (8417) MODULE: MFW_SS | | STATE : code ROUTINE: ss_delete | +--------------------------------------------------------------------+ PURPOSE : delete a event for supplementary management */ T_MFW_RES ss_delete(T_MFW_HND h) { TRACE_FUNCTION("ss_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_SS)); mfwFree((U8 *)h,sizeof(T_MFW_HDR)); return MFW_RES_OK; } /* +--------------------------------------------------------------------+ | PROJECT: MMI-Framework (8417) MODULE: MFW_SS | | STATE : code ROUTINE: ss_sign_exec | +--------------------------------------------------------------------+ PURPOSE : Send a signal if SS management handler. */ BOOL ss_sign_exec (T_MFW_HDR * cur_elem, T_MFW_EVENT event, T_MFW_SS_PARA * para) { TRACE_FUNCTION ("ss_sign_exec()"); while (cur_elem) { /* * event handler is available */ if (cur_elem->type EQ MFW_TYP_SS) { T_MFW_SS * ss_data; /* * handler is SS management handler */ ss_data = (T_MFW_SS *)cur_elem->data; if (ss_data->emask & event) { /* * event is expected by the call back function */ ss_data->event = event; switch (event) { case E_SS_NOTIFY: memcpy (&ss_data->para.notify, para, sizeof (T_MFW_SS_NOTIFY)); break; case E_SS_CF_CNF: case E_SS_CF_ICN_UPD: memcpy (&ss_data->para.cf_cnf, para, sizeof (T_MFW_SS_CF_CNF)); break; case E_SS_CB_CNF: memcpy (&ss_data->para.cb_cnf, para, sizeof (T_MFW_SS_CB_CNF)); break; case E_SS_CW_CNF: memcpy (&ss_data->para.cw_cnf, para, sizeof (T_MFW_SS_CW_CNF)); break; case E_SS_CLI_CNF: memcpy (&ss_data->para.cli_cnf, para, sizeof (T_MFW_SS_CLI_CNF)); break; case E_SS_RES: memcpy (&ss_data->para.ss_res, para, sizeof (T_MFW_SS_RES)); break; case E_SS_GET_PW: memcpy (&ss_data->para.pw_cnf, para, sizeof (T_MFW_SS_PW_CNF)); break; case E_SS_IMEI: memcpy (&ss_data->para.imei_info, para, sizeof (T_MFW_IMEI)); break; case E_SS_USSD_REQ: memcpy (&ss_data->para.ussd_info, para, sizeof (T_MFW_SS_USSD)); break; case E_SS_USSD_CNF: memcpy (&ss_data->para.ussd_info, para, sizeof (T_MFW_SS_USSD)); break; } /* * if call back defined, call it */ if (ss_data->handler) { // PATCH LE 06.06.00 // store current mfw elem current_mfw_elem = cur_elem; // END PATCH LE 06.06.00 if ((*(ss_data->handler)) (ss_data->event, (void *)&ss_data->para)) return TRUE; } } } cur_elem = cur_elem->next; } return FALSE; } /* +--------------------------------------------------------------------+ | PROJECT: MMI-Framework (8417) MODULE: MFW_SS | | STATE : code ROUTINE: ss_signal | +--------------------------------------------------------------------+ PURPOSE : send a event signal. */ void ss_signal(T_MFW_EVENT event, void * para) { UBYTE temp; TRACE_FUNCTION ("ss_signal()"); temp = dspl_Enable(0); if (mfwSignallingMethod EQ 0) { /* * focus is on a window */ if (mfwFocus) /* * send event to sim management * handler if available */ if (ss_sign_exec (mfwFocus, event, para)) { dspl_Enable(temp); return; } /* * acutal focussed window is not available * or has no network management registration * handler, then search all nodes from the root. */ if (mfwRoot) ss_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 (ss_sign_exec (h, event, para)) { dspl_Enable(temp); return; } /* * All windows tried inclusive root */ if (h == mfwRoot) { dspl_Enable(temp); return; } /* * get parent window */ h = mfwParent(mfwParent(h)); if(h) h = ((MfwWin * )(h->data))->elems; } ss_sign_exec (mfwRoot, event, para); } dspl_Enable(temp); } /* +--------------------------------------------------------------------+ | PROJECT: MMI-Framework (8417) MODULE: MFW_SS | | STATE : code ROUTINE: ss_check_ss_string | +--------------------------------------------------------------------+ PURPOSE : Check SS string */ T_MFW_SS_RETURN ss_check_ss_string(UBYTE *string) { T_MFW_SS_RETURN ss_group; T_KSD_SEQGRP grp; CHAR *rest; T_KSD_SEQPARAM para; SHORT id; int string_length; UBYTE call_active=FALSE; TRACE_FUNCTION("ss_check_ss_string"); #define MFW_MAX_DIAL_SHORT_STRING_LEN 2 /* check the type of destination address */ if ((cm_search_callId(CAL_STAT_Held, &id) == CM_OK) OR (cm_search_callId(CAL_STAT_Active, &id) == CM_OK)) { call_active = TRUE; ksd_decode((CHAR *)string, TRUE, &grp, &rest, ¶); } else ksd_decode((CHAR *)string, FALSE, &grp, &rest, ¶); /* check short string */ string_length = strlen((char*)string); TRACE_EVENT_P2("ksd_decode(""%s"") returns -> %d",(char*)string,grp); switch (grp) { case (SEQGRP_DIAL): /*JVJ CQ 6242 */ if (string_length<=MFW_MAX_DIAL_SHORT_STRING_LEN) { /* If the call is active, the short string will be USSD in all the cases not described in ETSI 2.30*/ if (call_active) grp = SEQGRP_USSD; /* If the call is not active, the short strings 1x will be DIAL, the rest USSD*/ else if ((string_length EQ 1)||(*(string) NEQ '1')) grp = SEQGRP_USSD; } break; case (SEQGRP_SUP_CLIR): /* JGG/JVJ - CQ 6537 */ case (SEQGRP_INV_CLIR): if (strlen(rest)!=0) { T_MFW_SS_RETURN rest_ss_group; /*check to make sure that the number is a real dial string */ rest_ss_group = ss_check_ss_string((UBYTE*)rest); if (rest_ss_group EQ MFW_SS_DIAL) /*If rest is a dial string, then the whole string is dial */ ss_group = MFW_SS_DIAL; else ss_group = MFW_SS_UNKNOWN; TRACE_EVENT_P2("ss_check_ss_string(""%s"") returns -> %d",(char*)string,ss_group); return ss_group; } break; default: break; } ss_group = ss_check_group(grp, para); TRACE_EVENT_P2("ss_check_ss_string(""%s"") returns -> %d",(char*)string,ss_group); return ss_group; } /* +--------------------------------------------------------------------+ | PROJECT: MMI-Framework (8417) MODULE: MFW_SS | | STATE : code ROUTINE: ss_decode | +--------------------------------------------------------------------+ PURPOSE : Decode SS string */ T_MFW_SS_RETURN ss_decode(UBYTE *string, CHAR **rt, T_KSD_SEQPARAM *p) { T_KSD_SEQGRP grp; CHAR *rest; T_KSD_SEQPARAM para; SHORT id; BOOL bRetVal; TRACE_FUNCTION("ss_decode()"); // Added the checking of wait call to solve the bug MMI-SPR 13873. // If the call is a waiting also pass TRUE as the second parameter to the // function ksd_decode() to decode the entered number. In ksd_decode only if // the second parameter is TRUE the sequential table is searched to find out // the group where the user entered string belongs to. if ((cm_search_callId(CAL_STAT_Held, &id) == CM_OK) OR (cm_search_callId(CAL_STAT_Active, &id) == CM_OK) OR (cm_search_callId(CAL_STAT_Wait, &id) == CM_OK)) { bRetVal = ksd_decode((CHAR *)string, TRUE, &grp, &rest, ¶); if (!bRetVal) *rest = 0; } else { bRetVal = ksd_decode((CHAR *)string, FALSE, &grp, &rest, ¶); if (!bRetVal) *rest = 0; } if (!bRetVal) return MFW_SS_FAIL; *rt = rest; if (grp == SEQGRP_UNKNOWN) return MFW_SS_UNKNOWN; memcpy(p, ¶, sizeof(T_KSD_SEQPARAM)); return(ss_check_group(grp, para)); } /* +--------------------------------------------------------------------+ | PROJECT: MMI-Framework (8417) MODULE: MFW_SS | | STATE : code ROUTINE: ss_check_group | +--------------------------------------------------------------------+ PURPOSE : returns the group of SS string */ T_MFW_SS_RETURN ss_check_group(T_KSD_SEQGRP grp, T_KSD_SEQPARAM para) { TRACE_EVENT_P1("ss_check_group: grp=%d", grp); switch (grp) { case SEQGRP_DIAL: /*SPR#1352 - SH - Check for TTY On Next Call psuedo-ss strings*/ if (!strncmp((char*)para.ussd.ussd, TTY_NEXTCALL_ON, strlen(TTY_NEXTCALL_ON))) return MFW_SS_TTY_NEXTCALL_ON; if (!strncmp((char*)para.ussd.ussd, TTY_NEXTCALL_OFF, strlen(TTY_NEXTCALL_OFF))) return MFW_SS_TTY_NEXTCALL_OFF; /*SH end*/ return MFW_SS_DIAL; case SEQGRP_DIAL_IDX: return MFW_SS_DIAL_IDX; case SEQGRP_DTMF: return MFW_SS_DTMF; case SEQGRP_USSD: /*MC, SPR 1111 check for LANGUAGE reset code*/ if (!strncmp((char*)para.ussd.ussd, LANG_RESET, strlen(LANG_RESET)) && para.ussd.ussd[6]=='#') return MFW_SS_LANG_RESET; /*MC end*/ return MFW_SS_USSD; case SEQGRP_ACT_SIM_LOCK: /* lock SIM card */ case SEQGRP_DEACT_SIM_LOCK: /* unlock SIM card */ case SEQGRP_INTRGT_SIM_LOCK: return MFW_SS_SIM_LOCK; case SEQGRP_CHANGE_REGISTER: case SEQGRP_SET_REGISTER: case SEQGRP_START_REGISTER: return MFW_SS_REG_PW; case SEQGRP_CF: return MFW_SS_CF; case SEQGRP_CB: /* barring services */ return MFW_SS_CB; case SEQGRP_SUP_CLIR: case SEQGRP_INV_CLIR: return MFW_SS_CLIR; case SEQGRP_SUP_CLIP: case SEQGRP_INV_CLIP: return MFW_SS_CLIP; case SEQGRP_SUP_COLR: case SEQGRP_INV_COLR: return MFW_SS_COLR; case SEQGRP_SUP_COLP: case SEQGRP_INV_COLP: return MFW_SS_COLP; case SEQGRP_CL: switch (para.cl.ssCd) { case KSD_SS_CLIP: return MFW_SS_CLIP; case KSD_SS_CLIR: return MFW_SS_CLIR; case KSD_SS_COLP: return MFW_SS_COLP; case KSD_SS_COLR: return MFW_SS_COLR; } return MFW_SS_UNKNOWN; case SEQGRP_PWD: switch(para.pwd.ssCd) { /* case KSD_SS_CCBS: CCBS has nothing to do with PWD! */ case KSD_SS_ALL_CBSS: case KSD_SS_BOC: case KSD_SS_BAOC: case KSD_SS_BOIC: case KSD_SS_BOICXH: case KSD_SS_BIC: case KSD_SS_BAIC: case KSD_SS_BICRM: /*NM 190602*/ case KSD_SS_ALL_SERV: return MFW_SS_REG_PW; case KSD_SS_PIN1: case KSD_SS_PIN2: return MFW_SS_SIM_REG_PW; } return MFW_SS_UNKNOWN; case SEQGRP_UBLK: return MFW_SS_SIM_UNBLCK_PIN; case SEQGRP_CW: return MFW_SS_WAIT; case SEQGRP_CCBS: return MFW_SS_CCBS; case SEQGRP_PRSNT_IMEI: return MFW_SS_MMI; case SEQGRP_CHLD: /*MC 11.04.02 */ if (para.chld.mode == CHLD_MOD_Ect) return MFW_SS_ECT; else if (para.chld.mode == CHLD_MOD_Ccbs) return MFW_SS_CCBS; else /*MC*/ return MFW_SS_HOLD; case SEQGRP_UNKNOWN: return MFW_SS_UNKNOWN; default: return MFW_SS_UNKNOWN; } } /* +-------------------------------------------------------------------+ | PROJECT : MMI-Framework (8417) MODULE : MFW_SS | | STATE : code ROUTINE : ss_execute_transaction | +-------------------------------------------------------------------+ PURPOSE : Start a SS transaction */ T_MFW_SS_RETURN ss_execute_transaction(UBYTE *ss_string, UBYTE ussd_mand) { T_ACI_RETURN res; TRACE_FUNCTION("ss_execute_transaction()"); res = sAT_Dn(CMD_SRC_LCL, (CHAR *)ss_string, -1, -1, -1); if( (res != AT_EXCT) AND (res != AT_CMPL)) { TRACE_EVENT("sAT_D error"); return MFW_SS_FAIL; } return ss_check_ss_string(ss_string); } /* +--------------------------------------------------------------------+ | PROJECT: MMI-Framework (8417) MODULE: MFW_SS | | STATE : code ROUTINE: ss_cvtCssuCodes | +--------------------------------------------------------------------+ PURPOSE : This function is used to convert the CSSU mode used by ACI to the CSSU mode used by MFW. */ T_MFW_SS_NOTIFY_CODES ss_cvtCssuCodes(T_ACI_CSSU_CODE code) { switch (code) { case CSSU_CODE_ForwardedCall: return MFW_SS_MT_FORWARDED; case CSSU_CODE_CUGCall: return MFW_SS_MT_CUG_CALL; case CSSU_CODE_Multiparty: return MFW_SS_NOTIFY_MULTIPARTY; case CSSU_CODE_HeldCallRel: return MFW_SS_NOTIFY_holdRELEASED; case CSSU_CODE_FwrdCheckSS: return MFW_SS_NOTIFY_checkSS; case CSSU_CODE_ECTAlert: return MFW_SS_NOTIFY_ectALERT; case CSSU_CODE_ECTConnect: return MFW_SS_NOTIFY_ectCONNECT; case CSSU_CODE_DeflectedCall: return MFW_SS_MT_DEFLECTED; default: return MFW_SS_NOTIFY_UNKNOWN; } } /* +--------------------------------------------------------------------+ | PROJECT: MMI-Framework (8417) MODULE: MFW_SS | | STATE : code ROUTINE: ss_cvtCssiCodes | +--------------------------------------------------------------------+ PURPOSE : This function is used to convert the CSSI mode used by ACI to the CSSI mode used by MFW. */ T_MFW_SS_NOTIFY_CODES ss_cvtCssiCodes(T_ACI_CSSI_CODE code) { switch (code) { case CSSI_CODE_CFUActive: return MFW_SS_MO_unconFORWARD; case CSSI_CODE_SomeCCFActive: return MFW_SS_MO_conFORWARD; case CSSI_CODE_ForwardedCall: return MFW_SS_MO_FORWARDED; case CSSI_CODE_CallWaiting: return MFW_SS_MO_WAITING; case CSSI_CODE_CUGCall: return MFW_SS_MO_CUG_CALL; case CSSI_CODE_OutCallsBarred: return MFW_SS_MO_moBARRED; case CSSI_CODE_IncCallsBarred: return MFW_SS_MO_mtBARRED; case CSSI_CODE_CLIRSupRej: return MFW_SS_MO_CLIR; case CSSI_CODE_DeflectedCall: return MFW_SS_MO_DEFLECTED; default: return MFW_SS_NOTIFY_UNKNOWN; } } /* +--------------------------------------------------------------------+ | PROJECT: MMI-Framework (8417) MODULE: MFW_SS | | STATE : code ROUTINE: ss_notify | +--------------------------------------------------------------------+ PURPOSE : Change of SS status from the network. */ void ss_notify(T_MFW_SS_NOTIFY_CODES code, SHORT index, UBYTE *number, UBYTE *subaddr) { // Apr 06 2005 REF: CRR 29989 xpradipg // defined the variable locally since the scope lies within this function #ifdef FF_MMI_OPTIM T_MFW_SS_NOTIFY notify; #endif memset(¬ify, 0, sizeof(T_MFW_SS_NOTIFY)); notify.code = code; if(number) strcpy((char *)notify.number, (char *)number); if (subaddr) strcpy((char *)notify.subaddr, (char *)subaddr); //PATCH TB 1309: Wrong codes tested if ((code == MFW_SS_MO_CUG_CALL) OR (code == MFW_SS_MT_CUG_CALL)) notify.index = (UBYTE)index; /* END PATCH TB */ { /***************************Go-lite Optimization changes Start***********************/ //Aug 16, 2004 REF: CRR 24323 Deepa M.D TRACE_EVENT_P1 ("SS notify code = %d", notify.code); /***************************Go-lite Optimization changes end***********************/ } ss_signal(E_SS_NOTIFY, ¬ify); } /* +--------------------------------------------------------------------+ | PROJECT: MMI-Framework (8417) MODULE : MFW_SS | | STATE : code ROUTINE : ss_cvtOCode | +--------------------------------------------------------------------+ PURPOSE : Convert operation codes */ T_MFW ss_cvtOCode(T_ACI_KSD_OP code) { switch (code) { case KSD_OP_IRGT: return SS_INTERROGATION; case KSD_OP_REG: return SS_REGISTRATION; case KSD_OP_ERS: return SS_ERASURE; case KSD_OP_ACT: return SS_ACTIVATION; case KSD_OP_DEACT: return SS_DEACTIVATION; default: return SS_CODES_UNKNOWN; } } /* +--------------------------------------------------------------------+ | PROJECT: MMI-Framework (8417) MODULE : MFW_SS | | STATE : code ROUTINE : ss_cvtSCodes | +--------------------------------------------------------------------+ PURPOSE : This function is used to convert the SS code used by ACI to the SS code used by MFW. */ T_MFW ss_cvtSCode(T_ACI_KSD_SS code) { switch (code) { case KSD_SS_CLIP: return SS_CLIP; case KSD_SS_CLIR: return SS_CLIR; case KSD_SS_COLP: return SS_COLP; case KSD_SS_COLR: return SS_COLR; case KSD_SS_CW: return SS_CW; case KSD_SS_BAIC: return SS_CB_BAIC; case KSD_SS_BAOC: return SS_CB_BAOC; case KSD_SS_ALL_CBSS: return SS_CB_ALL; case KSD_SS_BICRM: return SS_CB_BAICroam; case KSD_SS_BIC: return SS_CB_ALL_BAIC; case KSD_SS_BOICXH: return SS_CB_BAOICexH; case KSD_SS_BOIC: return SS_CB_BAOIC; case KSD_SS_BOC: return SS_CB_ALL_BAOC; case KSD_SS_CFB: return SS_CF_CFB; case KSD_SS_CFNRC: return SS_CF_CFNR; case KSD_SS_CFNRY: return SS_CF_CFNRy; case KSD_SS_CFU: return SS_CF_CFU; case KSD_SS_ALL_CFWSS: return SS_CF_ALL_COND; case KSD_SS_ALL_FWSS: return SS_CF_ALL; case KSD_SS_CCBS: return SS_CCBS; case KSD_SS_PIN1: return SS_PIN1; case KSD_SS_PIN2: return SS_PIN2; default: return SS_CODES_UNKNOWN; } } /* +--------------------------------------------------------------------+ | PROJECT: MMI-Framework (8417) MODULE : MFW_SS | | STATE : code ROUTINE : ss_cvtCLStatus | +--------------------------------------------------------------------+ PURPOSE : This function is used to convert the CL status used by ACI to the CL status used by MFW. */ T_MFW ss_cvtCLStatus(T_ACI_KSD_CLIR_OP stat) { switch (stat) { case KSD_CO_PERMANENT: return MFW_CL_PERM; case KSD_CO_TEMPORARY: return MFW_CL_TEMP_DEF_REST; case KSD_CO_ALLOWED: return MFW_CL_TEMP_DEF_ALLOWED; default: return MFW_CL_UNKNOWN; } } /* +--------------------------------------------------------------------+ | PROJECT: MMI-Framework (8417) MODULE : MFW_SS | | STATE : code ROUTINE : ss_cvtCLOvrd | +--------------------------------------------------------------------+ PURPOSE : This function is used to convert the override status of CLIR used by ACI to the override status of CLIR used by MFW. */ T_MFW ss_cvtCLOvrd(T_ACI_KSD_OVRD_CTG ovrd) { switch (ovrd) { case KSD_OVR_CAT_ENABLED: return MFW_OV_ENABLED; case KSD_OVR_CAT_DISABLED: return MFW_OV_DISABLED; default: return MFW_OV_UNKNOWN; } } /* +--------------------------------------------------------------------+ | PROJECT: MMI-Framework (8417) MODULE : MFW_SS | | STATE : code ROUTINE : ss_cvtErrCode | +--------------------------------------------------------------------+ PURPOSE : This function is used to convert the error code used by ACI to the error code used by MFW. */ T_MFW ss_cvtErrCode(T_ACI_KSD_ERR err) { switch (err) { case KSD_NO_ERROR: return MFW_SS_NO_ERROR; case KSD_ERR_UNKNOWN_SUBSCRIBER: return MFW_SS_ERR_UNKNOWN_SUBSCRIBER; case KSD_ERR_ILLEGAL_SUBSCRIBER: return MFW_SS_ERR_ILLEGAL_SUBSCRIBER; case KSD_ERR_BEARER_SVC_NOT_PROV: return MFW_SS_ERR_BEARER_SVC_NOT_PROV; case KSD_ERR_TELE_SVC_NOT_PROV: return MFW_SS_ERR_TELE_SVC_NOT_PROV; case KSD_ERR_ILLEGAL_EQUIPMENT: return MFW_SS_ERR_ILLEGAL_EQUIPMENT; case KSD_ERR_CALL_BARRED: return MFW_SS_ERR_CALL_BARRED; case KSD_ERR_ILLEGAL_SS_OPERATION: return MFW_SS_ERR_ILLEGAL_SS_OPERATION; case KSD_ERR_SS_ERR_STATUS: return MFW_SS_ERR_SS_ERR_STATUS; case KSD_ERR_SS_NOT_AVAIL: return MFW_SS_ERR_SS_NOT_AVAIL; case KSD_ERR_SS_SUBS_VIOLATION: return MFW_SS_ERR_SS_SUBS_VIOLATION; case KSD_ERR_SS_INCOMP: return MFW_SS_ERR_SS_INCOMP; case KSD_ERR_FAC_NOT_SUPPORTED: return MFW_SS_ERR_FAC_NOT_SUPPORTED; case KSD_ERR_ABSENT_SUBS: return MFW_SS_ERR_ABSENT_SUBS; case KSD_ERR_SYSTEM_FAIL: return MFW_SS_ERR_SYSTEM_FAIL; case KSD_ERR_DATA_MISSING: return MFW_SS_ERR_DATA_MISSING; case KSD_ERR_UNEXPECT_DATA: return MFW_SS_ERR_UNEXPECT_DATA; case KSD_ERR_PWD_REG_FAIL: return MFW_SS_ERR_PWD_REG_FAIL; case KSD_ERR_NEG_PWD_CHECK: return MFW_SS_ERR_NEG_PWD_CHECK; case KSD_ERR_NUM_PWD_VIOLATION: return MFW_SS_ERR_NUM_PWD_VIOLATION; case KSD_ERR_UNKNOWN_ALPHA: return MFW_SS_ERR_UNKNOWN_ALPHA; case KSD_ERR_USSD_BUSY: return MFW_SS_ERR_USSD_BUSY; case KSD_ERR_MAX_NUM_MPTY_EXCEED: return MFW_SS_ERR_MAX_NUM_MPTY_EXCEED; case KSD_ERR_RESOURCE_NOT_AVAIL: return MFW_SS_ERR_RESOURCE_NOT_AVAIL; case KSD_GEN_PROB_UNRECOG_CMP: return MFW_SS_GEN_PROB_UNRECOG_CMP; case KSD_GEN_PROB_MISTYPED_CMP: return MFW_SS_GEN_PROB_MISTYPED_CMP; case KSD_GEN_PROB_BAD_STRUCT_CMP: return MFW_SS_GEN_PROB_BAD_STRUCT_CMP; case KSD_INV_PROB_DUPL_INV_ID: return MFW_SS_INV_PROB_DUPL_INV_ID; case KSD_INV_PROB_UNRECOG_OP: return MFW_SS_INV_PROB_UNRECOG_OP; case KSD_INV_PROB_MISTYPED_PAR: return MFW_SS_INV_PROB_MISTYPED_PAR; case KSD_INV_PROB_RESOURCE_LIM: return MFW_SS_INV_PROB_RESOURCE_LIM; case KSD_INV_PROB_INIT_RELEASE: return MFW_SS_INV_PROB_INIT_RELEASE; case KSD_INV_PROB_UNRECOG_LNK_ID: return MFW_SS_INV_PROB_UNRECOG_LNK_ID; case KSD_INV_PROB_LNK_RES_UNEXP: return MFW_SS_INV_PROB_LNK_RES_UNEXP; case KSD_INV_PROB_UNEXP_LNK_OP: return MFW_SS_INV_PROB_UNEXP_LNK_OP; case KSD_RES_PROB_UNRECOG_INV_ID: return MFW_SS_RES_PROB_UNRECOG_INV_ID; case KSD_RES_PROB_RET_RES_UNEXP: return MFW_SS_RES_PROB_RET_RES_UNEXP; case KSD_RES_PROB_MISTYPED_PAR: return MFW_SS_RES_PROB_MISTYPED_PAR; case KSD_ERR_PROB_UNRECOG_INV_ID: return MFW_SS_ERR_PROB_UNRECOG_INV_ID; case KSD_ERR_PROB_RET_ERR_UNEXP: return MFW_SS_ERR_PROB_RET_ERR_UNEXP; case KSD_ERR_PROB_UNRECOG_ERR: return MFW_SS_ERR_PROB_UNRECOG_ERR; case KSD_ERR_PROB_UNEXP_ERR: return MFW_SS_ERR_PROB_UNEXP_ERR; case KSD_ERR_PROB_MISTYPED_PAR: return MFW_SS_ERR_PROB_MISTYPED_PAR; case KSD_ERR_FATAL_INV_RESULT: return MFW_SS_ERR_FATAL_INV_RESULT; case KSD_ERR_FATAL_CCD_DEC: return MFW_SS_ERR_FATAL_CCD_DEC; case KSD_ERR_FATAL_SS_ENT: return MFW_SS_ERR_FATAL_SS_ENT; default: return MFW_SS_ERR_UNKNOWN; } } /* +--------------------------------------------------------------------+ | PROJECT: MMI-Framework (8417) MODULE : MFW_SS | | STATE : code ROUTINE : ss_decode_imei | +--------------------------------------------------------------------+ PURPOSE : convert imei (packed bcd to ASCII) */ void ss_decode_imei(T_ACI_KSIR *ksStat) { // Apr 06 2005 REF: CRR 29989 xpradipg #ifdef FF_MMI_OPTIM memset(imei_info, 0, sizeof(T_MFW_IMEI)); imei_info->imei_number[0] = ( ksStat->ir.rKSIMEI.tac1 & 0xF0 ) >> 4 | 0x30; imei_info->imei_number[1] = ( ksStat->ir.rKSIMEI.tac1 ) & 0x0F | 0x30; imei_info->imei_number[2] = ( ksStat->ir.rKSIMEI.tac2 & 0xF0 ) >> 4 | 0x30; imei_info->imei_number[3] = ( ksStat->ir.rKSIMEI.tac2 ) & 0x0F | 0x30; imei_info->imei_number[4] = ( ksStat->ir.rKSIMEI.tac3 & 0xF0 ) >> 4 | 0x30; imei_info->imei_number[5] = ( ksStat->ir.rKSIMEI.tac3 ) & 0x0F | 0x30; imei_info->imei_number[6] = ( ksStat->ir.rKSIMEI.fac & 0xF0 ) >> 4 | 0x30; imei_info->imei_number[7] = ( ksStat->ir.rKSIMEI.fac ) & 0x0F | 0x30; imei_info->imei_number[8] = ( ksStat->ir.rKSIMEI.snr1 & 0xF0 ) >> 4 | 0x30; imei_info->imei_number[9] = ( ksStat->ir.rKSIMEI.snr1 ) & 0x0F | 0x30; imei_info->imei_number[10] = ( ksStat->ir.rKSIMEI.snr2 & 0xF0 ) >> 4 | 0x30; imei_info->imei_number[11] = ( ksStat->ir.rKSIMEI.snr2 ) & 0x0F | 0x30; imei_info->imei_number[12] = ( ksStat->ir.rKSIMEI.snr3 & 0xF0 ) >> 4 | 0x30; imei_info->imei_number[13] = ( ksStat->ir.rKSIMEI.snr3 ) & 0x0F | 0x30; //a0876501 - Check byte comes before the Software version during display. imei_info->imei_number[14] = ( ksStat->ir.rKSIMEI.cd & 0x0F ) | 0x30; imei_info->imei_number[15] = ( ksStat->ir.rKSIMEI.svn & 0xF0 ) >> 4 | 0x30; imei_info->imei_number[16] = ( ksStat->ir.rKSIMEI.svn ) & 0x0F | 0x30; imei_info->imei_number[17] = '\0'; #else memset(&imei_info, 0, sizeof(imei_info)); // Jul 05 2005 REF: CRR 22565 a0876501 // Fixed the issue of byte swapping. imei_info.imei_number[0] = ( ksStat->ir.rKSIMEI.tac1 & 0xF0 ) >> 4 | 0x30; imei_info.imei_number[1] = ( ksStat->ir.rKSIMEI.tac1 ) & 0x0F | 0x30; imei_info.imei_number[2] = ( ksStat->ir.rKSIMEI.tac2 & 0xF0 ) >> 4 | 0x30; imei_info.imei_number[3] = ( ksStat->ir.rKSIMEI.tac2 ) & 0x0F | 0x30; imei_info.imei_number[4] = ( ksStat->ir.rKSIMEI.tac3 & 0xF0 ) >> 4 | 0x30; imei_info.imei_number[5] = ( ksStat->ir.rKSIMEI.tac3 ) & 0x0F | 0x30; imei_info.imei_number[6] = ( ksStat->ir.rKSIMEI.fac & 0xF0 ) >> 4 | 0x30; imei_info.imei_number[7] = ( ksStat->ir.rKSIMEI.fac ) & 0x0F | 0x30; imei_info.imei_number[8] = ( ksStat->ir.rKSIMEI.snr1 & 0xF0 ) >> 4 | 0x30; imei_info.imei_number[9] = ( ksStat->ir.rKSIMEI.snr1 ) & 0x0F | 0x30; imei_info.imei_number[10] = ( ksStat->ir.rKSIMEI.snr2 & 0xF0 ) >> 4 | 0x30; imei_info.imei_number[11] = ( ksStat->ir.rKSIMEI.snr2 ) & 0x0F | 0x30; imei_info.imei_number[12] = ( ksStat->ir.rKSIMEI.snr3 & 0xF0 ) >> 4 | 0x30; imei_info.imei_number[13] = ( ksStat->ir.rKSIMEI.snr3 ) & 0x0F | 0x30; //a0876501 - Check byte comes before the Software version during display. imei_info.imei_number[14] = ( ksStat->ir.rKSIMEI.cd & 0x0F ) | 0x30; imei_info.imei_number[15] = ( ksStat->ir.rKSIMEI.svn & 0xF0 ) >> 4 | 0x30; imei_info.imei_number[16] = ( ksStat->ir.rKSIMEI.svn ) & 0x0F | 0x30; imei_info.imei_number[17] = '\0'; TRACE_EVENT_P8("ss_decode_imei IMEI: TAC %1c%1c%1c%1c%1c%1c%1c%1c", imei_info.imei_number[0], imei_info.imei_number[1], imei_info.imei_number[2], imei_info.imei_number[3], imei_info.imei_number[4], imei_info.imei_number[5], imei_info.imei_number[6], imei_info.imei_number[7]); TRACE_EVENT_P6("ss_decode_imei IMEI: SNR %1c%1c%1c%1c%1c%1c", imei_info.imei_number[8], imei_info.imei_number[9], imei_info.imei_number[10], imei_info.imei_number[11], imei_info.imei_number[12], imei_info.imei_number[13]); TRACE_EVENT_P4("ss_decode_imei IMEI: SV CD %1c%1c%1c%1c", imei_info.imei_number[14], imei_info.imei_number[15], imei_info.imei_number[16],imei_info.imei_number[17]); #endif } /* +--------------------------------------------------------------------+ | PROJECT: MMI-Framework (8417) MODULE : MFW_SS | | STATE : code ROUTINE : getCdByteFromImei | +--------------------------------------------------------------------+ PURPOSE : Get CD byte from IMEI. // July 23, 2005 REF : MMI-22565 - a0876501 */ UBYTE getCdByteFromImei(UBYTE *imei) { T_ACI_IMEI aci_imei; // July 23, 2005 REF : MMI-22565 - a0876501 // For calculating the Cd byte, copy the buffer contents. aci_imei.tac1 = imei[0]; aci_imei.tac2 = imei[1]; aci_imei.tac3 = imei[2]; aci_imei.fac = imei[3]; aci_imei.snr1 = imei[4]; aci_imei.snr2 = imei[5]; aci_imei.snr3 = imei[6]; aci_imei.svn = imei[7]; #ifndef NEPTUNE_BOARD return(cmhSS_getCdFromImei(&aci_imei)); #endif } /* +--------------------------------------------------------------------+ | PROJECT: MMI-Framework (8417) MODULE: MFW_SS | | STATE : code ROUTINE: rAT_PercentKSIR | +--------------------------------------------------------------------+ PURPOSE : Network response for key sequences */ void rAT_PercentKSIR ( T_ACI_KSIR *ksStat) { UBYTE idx; T_MFW_TELECOM *p_tele; T_MFW_FEATURE *p_feat; T_MFW_SRV_GROUP *p_srv; TRACE_FUNCTION("rAT_PercentKSIR()"); TRACE_EVENT_P1("ksStat->ksdCmd %d", ksStat->ksdCmd); switch (ksStat->ksdCmd) { case KSD_CMD_CB: TRACE_EVENT("KSD_CMD_CB"); TRACE_EVENT_P1("ksStat->ir.rKSCB.ssCd %d", ksStat->ir.rKSCB.ssCd); TRACE_EVENT_P1("ksStat->ir.rKSCB.opCd %d", ksStat->ir.rKSCB.opCd); TRACE_EVENT_P1("ksStat->ir.rKSCB.ssErr %d", ksStat->ir.rKSCB.ssErr); TRACE_EVENT_P1("ksStat->ir.rKSCB.c_cbInfoLst %d", ksStat->ir.rKSCB.c_cbInfoLst); if (ksStat->ir.rKSCB.c_cbInfoLst) { int i; for (i = 0; i < ksStat->ir.rKSCB.c_cbInfoLst; i++) { TRACE_EVENT_P2("ksStat->ir.rKSCB.cbInfoLst[%d].bsTp %d", i, ksStat->ir.rKSCB.cbInfoLst[i].bsTp); TRACE_EVENT_P2("ksStat->ir.rKSCB.cbInfoLst[%d].bsCd %d", i, ksStat->ir.rKSCB.cbInfoLst[i].bsCd); TRACE_EVENT_P2("ksStat->ir.rKSCB.cbInfoLst[%d].ssSt %d", i, ksStat->ir.rKSCB.cbInfoLst[i].ssSt); } } p_tele = (T_MFW_TELECOM *) ssLstBuf; // Apr 06 2005 REF: CRR 29989 xpradipg #ifdef FF_MMI_OPTIM cb_cnf = (T_MFW_SS_CB_CNF*)mfwAlloc(sizeof(T_MFW_SS_CB_CNF)); if(NULL != cb_cnf) { TRACE_EVENT_P2("Mem Aloc for cb_cnf = %x Size = %d",cb_cnf,sizeof(T_MFW_SS_CB_CNF)); cb_cnf->ss_code = ss_cvtSCode(ksStat->ir.rKSCB.ssCd); cb_cnf->ss_category = ss_cvtOCode(ksStat->ir.rKSCB.opCd); cb_cnf->ss_error = ss_cvtErrCode(ksStat->ir.rKSCB.ssErr); cb_cnf->ss_telecom_list = p_tele; } else return; #else cb_cnf.ss_code = (T_MFW_SS_CODES) ss_cvtSCode((T_ACI_KSD_SS)ksStat->ir.rKSCB.ssCd); cb_cnf.ss_category = (T_MFW_SS_CATEGORY)ss_cvtOCode((T_ACI_KSD_OP)ksStat->ir.rKSCB.opCd); cb_cnf.ss_error = (T_MFW_SS_ERROR)ss_cvtErrCode((T_ACI_KSD_ERR)ksStat->ir.rKSCB.ssErr); cb_cnf.ss_telecom_list = p_tele; #endif for( idx = 0; idx < ksStat->ir.rKSCB.c_cbInfoLst AND idx < MFW_MAX_TELE_NR; idx++, p_tele++ ) { p_tele->ss_telecom_type = ksStat->ir.rKSCB. cbInfoLst[idx].bsTp; p_tele->ss_telecom_service = ksStat->ir.rKSCB. cbInfoLst[idx].bsCd; p_tele->ss_status = ksStat->ir.rKSCB. cbInfoLst[idx].ssSt; } // Apr 06 2005 REF: CRR 29989 xpradipg #ifdef FF_MMI_OPTIM if(NULL != cb_cnf) cb_cnf->ss_telecom_count = idx; #else cb_cnf.ss_telecom_count = idx; #endif break; case KSD_CMD_CF: TRACE_EVENT("KSD_CMD_CF"); TRACE_EVENT_P1("ksStat->ir.rKSCF.ssCd %d", ksStat->ir.rKSCF.ssCd); TRACE_EVENT_P1("ksStat->ir.rKSCF.opCd %d", ksStat->ir.rKSCF.opCd); TRACE_EVENT_P1("ksStat->ir.rKSCF.ssErr %d", ksStat->ir.rKSCF.ssErr); TRACE_EVENT_P1("ksStat->ir.rKSCF.c_cfFeatLst %d", ksStat->ir.rKSCF.c_cfFeatLst); if (ksStat->ir.rKSCF.c_cfFeatLst) { int i; for (i = 0; i < ksStat->ir.rKSCF.c_cfFeatLst; i++) { TRACE_EVENT_P2("ksStat->ir.rKSCF.cfFeatLst[%d].bsTp %d", i, ksStat->ir.rKSCF.cfFeatLst[i].bsTp); TRACE_EVENT_P2("ksStat->ir.rKSCF.cfFeatLst[%d].bsCd %d", i, ksStat->ir.rKSCF.cfFeatLst[i].bsCd); TRACE_EVENT_P2("ksStat->ir.rKSCF.cfFeatLst[%d].ssSt %d", i, ksStat->ir.rKSCF.cfFeatLst[i].ssSt); TRACE_EVENT_P2("ksStat->ir.rKSCF.cfFeatLst[%d].num %s", i, ksStat->ir.rKSCF.cfFeatLst[i].num); TRACE_EVENT_P2("ksStat->ir.rKSCF.cfFeatLst[%d].ton 0x%02X", i, ksStat->ir.rKSCF.cfFeatLst[i].ton); TRACE_EVENT_P2("ksStat->ir.rKSCF.cfFeatLst[%d].npi 0x%02X", i, ksStat->ir.rKSCF.cfFeatLst[i].npi); TRACE_EVENT_P2("ksStat->ir.rKSCF.cfFeatLst[%d].sub %s", i, ksStat->ir.rKSCF.cfFeatLst[i].sub); TRACE_EVENT_P2("ksStat->ir.rKSCF.cfFeatLst[%d].tos 0x%02X", i, ksStat->ir.rKSCF.cfFeatLst[i].tos); TRACE_EVENT_P2("ksStat->ir.rKSCF.cfFeatLst[%d].oe 0x%02X", i, ksStat->ir.rKSCF.cfFeatLst[i].oe); TRACE_EVENT_P2("ksStat->ir.rKSCF.cfFeatLst[%d].time 0x%02X", i, ksStat->ir.rKSCF.cfFeatLst[i].time); } } p_feat = (T_MFW_FEATURE *) ssLstBuf; // Apr 06 2005 REF: CRR 29989 xpradipg #ifdef FF_MMI_OPTIM cf_cnf = (T_MFW_SS_CF_CNF*)mfwAlloc(sizeof(T_MFW_SS_CF_CNF)); if(NULL != cf_cnf) { TRACE_EVENT_P2("Mem Loc = %x, allocates size = %d",cf_cnf,sizeof(T_MFW_SS_CF_CNF)); cf_cnf->ss_code = (T_MFW_SS_CODES)ss_cvtSCode((T_ACI_KSD_SS)ksStat->ir.rKSCF.ssCd); cf_cnf->ss_category = (T_MFW_SS_CATEGORY)ss_cvtOCode((T_ACI_KSD_OP)ksStat->ir.rKSCF.opCd); cf_cnf->ss_error = (T_MFW_SS_ERROR)ss_cvtErrCode((T_ACI_KSD_ERR)ksStat->ir.rKSCF.ssErr); cf_cnf->ss_feature_list = p_feat; } #else cf_cnf.ss_code = (T_MFW_SS_CODES)ss_cvtSCode((T_ACI_KSD_SS)ksStat->ir.rKSCF.ssCd); cf_cnf.ss_category = (T_MFW_SS_CATEGORY)ss_cvtOCode((T_ACI_KSD_OP)ksStat->ir.rKSCF.opCd); cf_cnf.ss_error = (T_MFW_SS_ERROR)ss_cvtErrCode((T_ACI_KSD_ERR)ksStat->ir.rKSCF.ssErr); cf_cnf.ss_feature_list = p_feat; #endif for( idx = 0; idx < ksStat->ir.rKSCF.c_cfFeatLst AND idx < MFW_MAX_FEAT_NR; idx++, p_feat++ ) { p_feat->ss_telecom_type = ksStat->ir.rKSCF. cfFeatLst[idx].bsTp; p_feat->ss_telecom_service = ksStat->ir.rKSCF. cfFeatLst[idx].bsCd; p_feat->ss_status = ksStat->ir.rKSCF.cfFeatLst[idx].ssSt; p_feat->ss_numbering_type = phb_cvtTon(ksStat->ir.rKSCF. cfFeatLst[idx].ton); p_feat->ss_numbering_plan = (UBYTE)phb_cvtNpi(ksStat->ir.rKSCF. cfFeatLst[idx].npi); strncpy((char *)p_feat->ss_forwarded_to_number, (char *)ksStat->ir.rKSCF.cfFeatLst[idx].num, MFW_SS_NUM_LEN); strncpy((char *)p_feat->ss_forwarded_to_subaddress, (char *)ksStat->ir.rKSCF.cfFeatLst[idx].sub, MFW_SS_SUBADR_LEN); p_feat->ss_no_reply_condition_time = ksStat->ir.rKSCF. cfFeatLst[idx].time; } // Apr 06 2005 REF: CRR 29989 xpradipg #ifdef FF_MMI_OPTIM if(NULL != cf_cnf) cf_cnf->ss_feature_count = idx; #else cf_cnf.ss_feature_count = idx; #endif TRACE_EVENT("rat_percentksir->KSD_CMD_CF"); if (ksStat->srcId != CMD_SRC_LCL) // Apr 06 2005 REF: CRR 29989 xpradipg #ifdef FF_MMI_OPTIM { ss_signal(E_SS_CF_ICN_UPD,cf_cnf); } #else ss_signal(E_SS_CF_ICN_UPD, &cf_cnf); #endif break; case KSD_CMD_CL: TRACE_EVENT("KSD_CMD_CL"); TRACE_EVENT_P1("ksStat->ir.rKSCL.ssCd %d", ksStat->ir.rKSCL.ssCd); TRACE_EVENT_P1("ksStat->ir.rKSCL.opCd %d", ksStat->ir.rKSCL.opCd); TRACE_EVENT_P1("ksStat->ir.rKSCL.ssErr %d", ksStat->ir.rKSCL.ssErr); TRACE_EVENT_P1("ksStat->ir.rKSCL.ssSt %d", ksStat->ir.rKSCL.ssSt); TRACE_EVENT_P1("ksStat->ir.rKSCL.mode %d", ksStat->ir.rKSCL.mode); TRACE_EVENT_P1("ksStat->ir.rKSCL.clirOpt %d", ksStat->ir.rKSCL.clirOpt); TRACE_EVENT_P1("ksStat->ir.rKSCL.ovrdCtg %d", ksStat->ir.rKSCL.ovrdCtg); // Apr 06 2005 REF: CRR 29989 xpradipg #ifdef FF_MMI_OPTIM cli_cnf = (T_MFW_SS_CLI_CNF*)mfwAlloc(sizeof(T_MFW_SS_CLI_CNF)); if(NULL != cli_cnf) { cli_cnf->ss_code = ss_cvtSCode(ksStat->ir.rKSCL.ssCd); cli_cnf->ss_category = ss_cvtOCode(ksStat->ir.rKSCL.opCd); cli_cnf->ss_error = ss_cvtErrCode(ksStat->ir.rKSCL.ssErr); cli_cnf->ss_status = ksStat->ir.rKSCL.ssSt; cli_cnf->ss_clir_option = ss_cvtCLStatus(ksStat->ir.rKSCL.clirOpt); cli_cnf->ss_ovrd_ctgry = ss_cvtCLOvrd(ksStat->ir.rKSCL.ovrdCtg); } #else cli_cnf.ss_code = (T_MFW_SS_CODES)ss_cvtSCode((T_ACI_KSD_SS)ksStat->ir.rKSCL.ssCd); cli_cnf.ss_category = (T_MFW_SS_CATEGORY)ss_cvtOCode((T_ACI_KSD_OP)ksStat->ir.rKSCL.opCd); cli_cnf.ss_error = (T_MFW_SS_ERROR)ss_cvtErrCode((T_ACI_KSD_ERR)ksStat->ir.rKSCL.ssErr); cli_cnf.ss_status = ksStat->ir.rKSCL.ssSt; cli_cnf.ss_clir_option = (T_MFW_SS_ERROR)ss_cvtCLStatus((T_ACI_KSD_CLIR_OP)ksStat->ir.rKSCL.clirOpt); cli_cnf.ss_ovrd_ctgry = (T_MFW_OV_CTGRY)ss_cvtCLOvrd((T_ACI_KSD_OVRD_CTG)ksStat->ir.rKSCL.ovrdCtg); #endif break; case KSD_CMD_CW: TRACE_EVENT("KSD_CMD_CW"); TRACE_EVENT_P1("ksStat->ir.rKSCW.ssCd %d", ksStat->ir.rKSCW.ssCd); TRACE_EVENT_P1("ksStat->ir.rKSCW.opCd %d", ksStat->ir.rKSCW.opCd); TRACE_EVENT_P1("ksStat->ir.rKSCW.ssErr %d", ksStat->ir.rKSCW.ssErr); TRACE_EVENT_P1("ksStat->ir.rKSCW.ssSt %d", ksStat->ir.rKSCW.ssSt); TRACE_EVENT_P1("ksStat->ir.rKSCW.c_cwBSGLst %d", ksStat->ir.rKSCW.c_cwBSGLst); if (ksStat->ir.rKSCW.c_cwBSGLst) { int i; for (i = 0; i < ksStat->ir.rKSCW.c_cwBSGLst; i++) { TRACE_EVENT_P2("ksStat->ir.rKSCW.cwBSGLst[%d].bsTp %d", i, ksStat->ir.rKSCW.cwBSGLst[i].bsTp); TRACE_EVENT_P2("ksStat->ir.rKSCW.cwBSGLst[%d].bsCd %d", i, ksStat->ir.rKSCW.cwBSGLst[i].bsCd); } } p_srv = (T_MFW_SRV_GROUP *) ssLstBuf; // Apr 06 2005 REF: CRR 29989 xpradipg #ifdef FF_MMI_OPTIM cw_cnf = (T_MFW_SS_CW_CNF*)mfwAlloc(sizeof(T_MFW_SS_CW_CNF)); if(cw_cnf != NULL) { cw_cnf->ss_code = ss_cvtSCode(ksStat->ir.rKSCW.ssCd); cw_cnf->ss_category = ss_cvtOCode(ksStat->ir.rKSCW.opCd); cw_cnf->ss_error = ss_cvtErrCode(ksStat->ir.rKSCW.ssErr); cw_cnf->ss_status = ksStat->ir.rKSCW.ssSt; cw_cnf->ss_service_list = p_srv; } #else cw_cnf.ss_code = (T_MFW_SS_CODES)ss_cvtSCode((T_ACI_KSD_SS)ksStat->ir.rKSCW.ssCd); cw_cnf.ss_category = (T_MFW_SS_CATEGORY)ss_cvtOCode((T_ACI_KSD_OP)ksStat->ir.rKSCW.opCd); cw_cnf.ss_error = (T_MFW_SS_ERROR)ss_cvtErrCode((T_ACI_KSD_ERR)ksStat->ir.rKSCW.ssErr); cw_cnf.ss_status = ksStat->ir.rKSCW.ssSt; cw_cnf.ss_service_list = p_srv; #endif for( idx = 0; idx < ksStat->ir.rKSCW.c_cwBSGLst AND idx < MFW_MAX_SRV_NR; idx++, p_srv++ ) { p_srv->ss_telecom_type = ksStat->ir.rKSCW. cwBSGLst[idx].bsTp; p_srv->ss_telecom_service = ksStat->ir.rKSCW. cwBSGLst[idx].bsCd; } // Apr 06 2005 REF: CRR 29989 xpradipg #ifdef FF_MMI_OPTIM if(NULL != cw_cnf) cw_cnf->ss_service_count = idx; #else cw_cnf.ss_service_count = idx; #endif break; case KSD_CMD_PWD: TRACE_EVENT("KSD_CMD_PWD"); TRACE_EVENT_P1("ksStat->ir.rKSPW.ssCd %d", ksStat->ir.rKSPW.ssCd); TRACE_EVENT_P1("ksStat->ir.rKSPW.opCd %d", ksStat->ir.rKSPW.opCd); TRACE_EVENT_P1("ksStat->ir.rKSPW.ssErr %d", ksStat->ir.rKSPW.ssErr); TRACE_EVENT_P1("ksStat->ir.rKSPW.newPwd %s", ksStat->ir.rKSPW.newPwd); // Apr 06 2005 REF: CRR 29989 xpradipg #ifdef FF_MMI_OPTIM pw_cnf = (T_MFW_SS_PW_CNF*)mfwAlloc(sizeof(T_MFW_SS_PW_CNF)); if( NULL != pw_cnf) { pw_cnf->ss_code = ss_cvtSCode(ksStat->ir.rKSPW.ssCd); pw_cnf->ss_category = ss_cvtOCode(ksStat->ir.rKSPW.opCd); pw_cnf->ss_error = ss_cvtErrCode(ksStat->ir.rKSPW.ssErr); strncpy( (char *)pw_cnf->ss_new_pwd, (char *)ksStat->ir.rKSPW.newPwd, MFW_SS_PWD_LEN); } #else pw_cnf.ss_code = (T_MFW_SS_CODES)ss_cvtSCode((T_ACI_KSD_SS)ksStat->ir.rKSPW.ssCd); pw_cnf.ss_category = (T_MFW_SS_CATEGORY)ss_cvtOCode((T_ACI_KSD_OP)ksStat->ir.rKSPW.opCd); pw_cnf.ss_error = (T_MFW_SS_ERROR)ss_cvtErrCode((T_ACI_KSD_ERR)ksStat->ir.rKSPW.ssErr); strncpy( (char *)pw_cnf.ss_new_pwd, (char *)ksStat->ir.rKSPW.newPwd, MFW_SS_PWD_LEN); #endif break; case KSD_CMD_IMEI: TRACE_EVENT("KSD_CMD_IMEI"); TRACE_EVENT_P1("ksStat->ir.rKSIMEI.tac1 %d", ksStat->ir.rKSIMEI.tac1); TRACE_EVENT_P1("ksStat->ir.rKSIMEI.tac2 %d", ksStat->ir.rKSIMEI.tac2); TRACE_EVENT_P1("ksStat->ir.rKSIMEI.tac3 %d", ksStat->ir.rKSIMEI.tac3); TRACE_EVENT_P1("ksStat->ir.rKSIMEI.fac %d", ksStat->ir.rKSIMEI.fac); TRACE_EVENT_P1("ksStat->ir.rKSIMEI.snr1 %d", ksStat->ir.rKSIMEI.snr1); TRACE_EVENT_P1("ksStat->ir.rKSIMEI.snr2 %d", ksStat->ir.rKSIMEI.snr2); TRACE_EVENT_P1("ksStat->ir.rKSIMEI.snr3 %d", ksStat->ir.rKSIMEI.snr3); TRACE_EVENT_P1("ksStat->ir.rKSIMEI.svn %d", ksStat->ir.rKSIMEI.svn); TRACE_EVENT_P1("ksStat->ir.rKSIMEI.cd %d", ksStat->ir.rKSIMEI.cd); // Apr 06 2005 REF: CRR 29989 xpradipg #ifdef FF_MMI_OPTIM imei_info = (T_MFW_IMEI*)mfwAlloc(sizeof(T_MFW_IMEI)); if( NULL != imei_info) { #endif ss_decode_imei(ksStat); // Apr 06 2005 REF: CRR 29989 xpradipg #ifdef FF_MMI_OPTIM imei_info->error = MFW_SS_NO_ERROR; ss_signal(E_SS_IMEI, imei_info); } #else imei_info.error = MFW_SS_NO_ERROR; ss_signal(E_SS_IMEI, &imei_info); #endif break; case KSD_CMD_USSD: TRACE_EVENT("KSD_CMD_USSD"); TRACE_EVENT_P1("ksStat->ir.rKSUS.ussd %s", ksStat->ir.rKSUS.ussd); TRACE_EVENT_P1("ksStat->ir.rKSUS.dcs 0x%02X", ksStat->ir.rKSUS.dcs); TRACE_EVENT_P1("ksStat->ir.rKSUS.mode %d", ksStat->ir.rKSUS.mode); TRACE_EVENT_P1("ksStat->ir.rKSUS.ssErr %d", ksStat->ir.rKSUS.ssErr); memset(&ussd_info, 0, sizeof(ussd_info)); ussd_info.len = strlen((char *)ksStat->ir.rKSUS.ussd); strcpy((char*)ussd_info.ussd, (char *)ksStat->ir.rKSUS.ussd); ussd_info.dcs = MFW_ASCII; ussd_info.error = ss_cvtErrCode((T_ACI_KSD_ERR)ksStat->ir.rKSUS.ssErr); break; default: TRACE_EVENT("default"); break; } } /* +--------------------------------------------------------------------+ | PROJECT: MMI-Framework (8417) MODULE: MFW_SS | | STATE : code ROUTINE: ss_command_info | +--------------------------------------------------------------------+ PURPOSE : Notify for send a SS string from ACI */ void ss_command_info(T_ACI_CLOG* cmd) { // Apr 06 2005 REF: CRR 29989 xpradipg // the variable is made local since the scope lies within this function #ifdef FF_MMI_OPTIM T_MFW_SS_RES ss_res; #endif TRACE_FUNCTION("ss_command_info()"); if (cmd->cmdPrm.sCFUN.srcId != CMD_SRC_LCL) return; switch (cmd->atCmd) { case KSD_CMD_CB: ss_res.type = ss_cvtSCode((T_ACI_KSD_SS)cmd->cmdPrm.sKSCB.ssCd); ss_res.category = ss_cvtOCode((T_ACI_KSD_OP)cmd->cmdPrm.sKSCB.opCd); if( cmd->cmdPrm.sKSCB.pwd ) strncpy(ss_res.ppn, (char *)cmd->cmdPrm.sKSCB.pwd, MAX_PWD_LEN); else ss_res.ppn[0] = 0; ss_res.pwd[0] = 0; ss_res.bs = cmd->cmdPrm.sKSCB.bsCd; ss_res.time = 0; ss_signal(E_SS_RES, &ss_res); break; case KSD_CMD_CF: ss_res.type = ss_cvtSCode((T_ACI_KSD_SS)cmd->cmdPrm.sKSCF.ssCd); ss_res.category = ss_cvtOCode((T_ACI_KSD_OP)cmd->cmdPrm.sKSCF.opCd); ss_res.ppn[0] = 0; ss_res.pwd[0] = 0; ss_res.bs = cmd->cmdPrm.sKSCF.bsCd; ss_res.time = cmd->cmdPrm.sKSCF.time; ss_signal(E_SS_RES, &ss_res); break; case KSD_CMD_CW: ss_res.type = SS_CW; ss_res.category = ss_cvtOCode((T_ACI_KSD_OP)cmd->cmdPrm.sKSCW.opCd); ss_res.ppn[0] = 0; ss_res.pwd[0] = 0; ss_res.bs = cmd->cmdPrm.sKSCW.bsCd; ss_res.time = 0; ss_signal(E_SS_RES, &ss_res); break; case KSD_CMD_PWD: switch(cmd->cmdPrm.sKSPW.ssCd) { case KSD_SS_CCBS: case KSD_SS_ALL_CBSS: case KSD_SS_BOC: case KSD_SS_BAOC: case KSD_SS_BOIC: case KSD_SS_BOICXH: case KSD_SS_BIC: case KSD_SS_BAIC: case KSD_SS_BICRM: /*NM 190602*/ case KSD_SS_ALL_SERV : ss_res.type = ss_cvtSCode((T_ACI_KSD_SS)cmd->cmdPrm.sKSPW.ssCd); ss_res.category = SS_REGISTRATION; if( cmd->cmdPrm.sKSPW.oldPwd ) strncpy(ss_res.ppn, (char *)cmd->cmdPrm.sKSPW.oldPwd, MAX_PWD_LEN); else ss_res.ppn[0] = 0; if( cmd->cmdPrm.sKSPW.newPwd ) strncpy(ss_res.pwd, (char *)cmd->cmdPrm.sKSPW.newPwd, MAX_PWD_LEN); else ss_res.pwd[0] = 0; ss_res.bs = 0; ss_res.time = 0; ss_signal(E_SS_RES, &ss_res); break; case KSD_SS_PIN1: pwd_flag = 1; sim_pin_ident(MFW_SIM_PIN1); break; case KSD_SS_PIN2: pwd_flag = 1; sim_pin_ident(MFW_SIM_PIN2); break; } break; case KSD_CMD_UBLK: switch(cmd->cmdPrm.sKSPW.ssCd) { case KSD_SS_PIN1: pwd_flag = 1; sim_pin_ident(MFW_SIM_PUK1); break; case KSD_SS_PIN2: pwd_flag = 1; sim_pin_ident(MFW_SIM_PUK2); break; } break; case KSD_CMD_CL: ss_res.type = ss_cvtSCode((T_ACI_KSD_SS)cmd->cmdPrm.sKSCL.ssCd); ss_res.category = ss_cvtOCode((T_ACI_KSD_OP)cmd->cmdPrm.sKSCL.opCd); ss_res.ppn[0] = 0; ss_res.pwd[0] = 0; ss_res.bs = 0; ss_res.time = 0; ss_signal(E_SS_RES, &ss_res); break; case KSD_CMD_USSD: memset(&ussd_info, 0, sizeof(ussd_info)); if( cmd->cmdPrm.sKSUS.ussd ) { ussd_info.len = strlen((char *)cmd->cmdPrm.sKSUS.ussd); strcpy((char*)ussd_info.ussd, (char *)cmd->cmdPrm.sKSUS.ussd); } else ussd_info.ussd[0] = 0; ussd_info.dcs = MFW_ASCII; //PATCH TB 1509 ss_res.type = SS_USSD; ss_res.category = SS_CTG_UNKNOWN; ss_res.ppn[0] = 0; ss_res.pwd[0] = 0; ss_res.bs = 0; ss_res.time = 0; ss_signal(E_SS_RES, &ss_res); //END PATCH TB break; case AT_CMD_CUSD: memset(&ussd_info, 0, sizeof(ussd_info)); ussd_info.len = cmd->cmdPrm.sCUSD.str->len; memcpy((char*)ussd_info.ussd, cmd->cmdPrm.sCUSD.str->data, cmd->cmdPrm.sCUSD.str->len); ussd_info.dcs = (T_MFW_DCS)cmd->cmdPrm.sCUSD.dcs; /* SPR#CQ3204 -JVJ - USSD call back sent to MMI */ ss_res.type = SS_USSD; ss_res.category = SS_CTG_UNKNOWN; ss_res.ppn[0] = 0; ss_res.pwd[0] = 0; ss_res.bs = 0; ss_res.time = 0; ss_signal(E_SS_RES, &ss_res); /* SPR#CQ3204 -JVJ */ break; default: break; } } /* +--------------------------------------------------------------------+ | PROJECT: MMI-Framework (8417) MODULE: MFW_SS | | STATE : code ROUTINE: ss_ok_string | +--------------------------------------------------------------------+ PURPOSE : Send of SS string is successful. */ void ss_ok_string(T_ACI_AT_CMD cmdId) { TRACE_FUNCTION("ss_ok_string()"); switch (cmdId) { case KSD_CMD_CB: // Apr 06 2005 REF: CRR 29989 xpradipg // free the allocated memory once the ss_signal() execution is done #ifdef FF_MMI_OPTIM TRACE_EVENT("KSD_CMD_CB"); if(cb_cnf) { ss_signal(E_SS_CB_CNF, cb_cnf); mfwFree((U8*)cb_cnf, sizeof(T_MFW_SS_CB_CNF)); } #else ss_signal(E_SS_CB_CNF, &cb_cnf); #endif break; case KSD_CMD_CF: // Apr 06 2005 REF: CRR 29989 xpradipg #ifdef FF_MMI_OPTIM TRACE_EVENT("KSD_CMD_CF"); if(cf_cnf) { ss_signal(E_SS_CF_CNF, cf_cnf); mfwFree((U8*)cf_cnf, sizeof(T_MFW_SS_CF_CNF)); } #else ss_signal(E_SS_CF_CNF, &cf_cnf); #endif break; case KSD_CMD_CW: // Apr 06 2005 REF: CRR 29989 xpradipg #ifdef FF_MMI_OPTIM TRACE_EVENT("KSD_CMD_CW"); if(cw_cnf) { ss_signal(E_SS_CW_CNF, cw_cnf); mfwFree((U8*)cw_cnf, sizeof(T_MFW_SS_CW_CNF)); } #else ss_signal(E_SS_CW_CNF, &cw_cnf); #endif break; case KSD_CMD_PWD: // Apr 06 2005 REF: CRR 29989 xpradipg #ifdef FF_MMI_OPTIM TRACE_EVENT("KSD_CMD_PW"); if(pw_cnf) { if (!pwd_flag) ss_signal(E_SS_GET_PW, pw_cnf); mfwFree((U8*)pw_cnf,sizeof(T_MFW_SS_PW_CNF)); } #else if (!pwd_flag) ss_signal(E_SS_GET_PW, &pw_cnf); #endif if (pwd_flag == 1) { pwd_flag = 0; sim_ok_cpinc(); } break; case KSD_CMD_UBLK: sim_ss_unblock(SIM_UBLK_OK, CME_ERR_NotPresent); break; case KSD_CMD_CL: // Apr 06 2005 REF: CRR 29989 xpradipg #ifdef FF_MMI_OPTIM TRACE_EVENT("KSD_CMD_CLI"); if(cli_cnf) { ss_signal(E_SS_CLI_CNF,(void*) cli_cnf); mfwFree((U8*)cli_cnf, sizeof(T_MFW_SS_CLI_CNF)); } #else ss_signal(E_SS_CLI_CNF,&cli_cnf); #endif break; case KSD_CMD_IMEI: // Apr 06 2005 REF: CRR 29989 xpradipg #ifdef FF_MMI_OPTIM if( imei_info) { imei_info->error = MFW_SS_NO_ERROR; ss_signal(E_SS_IMEI, imei_info); mfwFree((U8*)imei_info,sizeof(T_MFW_IMEI)); } #else imei_info.error = MFW_SS_NO_ERROR; ss_signal(E_SS_IMEI, &imei_info); #endif break; default: break; } } /* +--------------------------------------------------------------------+ | PROJECT: MMI-Framework (8417) MODULE: MFW_SS | | STATE : code ROUTINE: ss_error_string | +--------------------------------------------------------------------+ PURPOSE : Send of SS string is failed. */ void ss_error_string(T_ACI_AT_CMD cmdId, T_ACI_CME_ERR reason) { TRACE_FUNCTION("ss_error_string()"); switch (cmdId) { case KSD_CMD_CB: // Apr 06 2005 REF: CRR 29989 xpradipg // deallocation occurs either in ok/ error since the response is always is // either one of them #ifdef FF_MMI_OPTIM TRACE_EVENT("KSD_CMD_CB"); if(cb_cnf) { ss_signal(E_SS_CB_CNF, cb_cnf); mfwFree((U8*)cb_cnf,sizeof(T_MFW_SS_CB_CNF)); } #else ss_signal(E_SS_CB_CNF, &cb_cnf); #endif break; case KSD_CMD_CF: // Apr 06 2005 REF: CRR 29989 xpradipg #ifdef FF_MMI_OPTIM TRACE_EVENT("KSD_CMD_CF"); if(cf_cnf) { ss_signal(E_SS_CF_CNF, cf_cnf); mfwFree((U8*)cf_cnf,sizeof(T_MFW_SS_CF_CNF)); TRACE_FUNCTION("memory freed for cf_cnf"); } #else ss_signal(E_SS_CF_CNF, &cf_cnf); #endif break; case KSD_CMD_CW: // Apr 06 2005 REF: CRR 29989 xpradipg #ifdef FF_MMI_OPTIM TRACE_EVENT("KSD_CMD_CW"); if(cw_cnf) { ss_signal(E_SS_CW_CNF, cw_cnf); mfwFree((U8*)E_SS_CW_CNF,sizeof(T_MFW_SS_CW_CNF)); } #else ss_signal(E_SS_CW_CNF, &cw_cnf); #endif break; case KSD_CMD_PWD: // Apr 06 2005 REF: CRR 29989 xpradipg #ifdef FF_MMI_OPTIM TRACE_EVENT("KSD_CMD_PW"); if(pw_cnf) { if (!pwd_flag) ss_signal(E_SS_GET_PW, pw_cnf); mfwFree((U8*)pw_cnf,sizeof(T_MFW_SS_PW_CNF)); } #else if (!pwd_flag) ss_signal(E_SS_GET_PW, &pw_cnf); #endif if (pwd_flag == 1) { pwd_flag = 0; sim_error_cpinc(); } break; case KSD_CMD_UBLK: sim_ss_unblock(SIM_UBLK_ERROR, reason); break; case KSD_CMD_CL: // Apr 06 2005 REF: CRR 29989 xpradipg #ifdef FF_MMI_OPTIM TRACE_EVENT("KSD_CMD_CLI"); if(cli_cnf) { ss_signal(E_SS_CLI_CNF, cli_cnf); mfwFree((U8*)cli_cnf,sizeof(T_MFW_SS_CLI_CNF)); } #else ss_signal(E_SS_CLI_CNF,&cli_cnf); #endif case KSD_CMD_IMEI: // Apr 06 2005 REF: CRR 29989 xpradipg #ifdef FF_MMI_OPTIM if( imei_info) { imei_info->error = MFW_SS_ERROR; ss_signal(E_SS_IMEI, imei_info); mfwFree((U8*)imei_info,sizeof(T_MFW_IMEI)); } #else imei_info.error = MFW_SS_ERROR; ss_signal(E_SS_IMEI, &imei_info); #endif break; default: break; } } /* +--------------------------------------------------------------------+ | PROJECT: MMI-Framework (8417) MODULE: MFW_SS | | STATE : code ROUTINE: ss_set_clck | +--------------------------------------------------------------------+ PURPOSE : This function execute the facility lock command. */ T_MFW ss_set_clck(T_ACI_CLCK_FAC fac, T_ACI_CLCK_MOD mode, CHAR *passwd, T_ACI_CLASS class_type, UBYTE modul) { TRACE_EVENT("ss_set_clck()"); clck_flag = modul; if (sAT_PlusCLCK(CMD_SRC_LCL, fac,mode, passwd, class_type) != AT_EXCT) return MFW_SS_FAIL; return MFW_SS_OK; } /* +--------------------------------------------------------------------+ | PROJECT : MMI-Framework (8417) MODULE : MFW_SS | | STATE : code ROUTINE : ss_ok_clck | +--------------------------------------------------------------------+ PURPOSE : The executing of the facility lock command is successful. */ void ss_ok_clck() { TRACE_FUNCTION("ss_ok_clck()"); switch (clck_flag) { case MFW_PHB: phb_ok_clck(); break; case MFW_SIM_CPIND: sim_ok_cpind(); break; case MFW_SIM_CPINE: sim_ok_cpine(); break; } clck_flag = MFW_MODUL_UNKNOWN; } /* +--------------------------------------------------------------------+ | PROJECT : MMI-Framework (8417) MODULE : MFW_SS | | STATE : code ROUTINE : ss_error_clck | +--------------------------------------------------------------------+ PURPOSE : The executing of the facility lock command is failed. */ void ss_error_clck() { TRACE_FUNCTION("ss_error_clck()"); switch (clck_flag) { case MFW_PHB: phb_error_clck(); break; case MFW_SIM_CPIND: sim_error_cpind(); break; case MFW_SIM_CPINE: sim_error_cpine(); break; } clck_flag = MFW_MODUL_UNKNOWN; } /* +--------------------------------------------------------------------+ | PROJECT: MMI-Framework (8417) MODULE: MFW_DMY | | STATE : code ROUTINE: ss_send_ussd | +--------------------------------------------------------------------+ PURPOSE : Send USSD string. Note: ASCII is not allowed to use. */ T_MFW ss_send_ussd(T_MFW_SS_USSD *ussd_info) { T_ACI_USSD_DATA str; T_ACI_RETURN res; TRACE_FUNCTION("ss_send_ussd()"); if (!ussd_info->len OR !ussd_info->ussd) return MFW_SS_FAIL; if (ussd_info->dcs == MFW_ASCII) return MFW_SS_FAIL; if (ussd_info->len > MAX_USSD_LEN) { str.len = MAX_USSD_LEN; memcpy(str.data, ussd_info->ussd, MAX_USSD_LEN); } else { str.len = ussd_info->len; memcpy(str.data, ussd_info->ussd, ussd_info->len); } res = sAT_PlusCUSD(CMD_SRC_LCL, &str, (SHORT)ussd_info->dcs); if ((res != AT_EXCT) AND (res != AT_CMPL)) return MFW_SS_FAIL; return MFW_SS_OK; } /* +--------------------------------------------------------------------+ | PROJECT: MMI-Framework (8417) MODULE: MFW_DMY | | STATE : code ROUTINE: rAT_PlusCUSD | +--------------------------------------------------------------------+ PURPOSE : Notify or response for USSD from ACI */ void rAT_PlusCUSD(T_ACI_CUSD_MOD m, T_ACI_USSD_DATA *ussd, SHORT dcs) { TRACE_FUNCTION("rAT_PlusCUSD()"); //Dec 16, 2005 OMAPS00053316 x0018858 //Added the NullCheck to ensure that we dont access the elements when the pointer is NULL. //Begin OMAPS00053316 if(ussd != NULL) { ussd_info.len = ussd->len; memcpy(ussd_info.ussd, ussd->data, sizeof(ussd_info.ussd)); } else { ussd_info.len = 0; memset(ussd_info.ussd, 0x00, sizeof(ussd_info.ussd)); } //End OMAPS00053316 ussd_info.dcs = (T_MFW_DCS)dcs; ussd_info.error = MFW_SS_NO_ERROR; if (m == CUSD_MOD_YesActReq) ss_signal(E_SS_USSD_REQ, &ussd_info); if (m == CUSD_MOD_NoActReq) ss_signal(E_SS_USSD_CNF, &ussd_info); } /* +--------------------------------------------------------------------+ | PROJECT: MMI-Framework (8417) MODULE: MFW_DMY | | STATE : code ROUTINE: ss_ok_ussd | +--------------------------------------------------------------------+ PURPOSE : USSD process is successful. */ void ss_ok_ussd(T_ACI_AT_CMD cmdId) { TRACE_FUNCTION("ss_ok_ussd()"); if (cmdId == KSD_CMD_USSD) { ussd_info.error = MFW_SS_NO_ERROR; ss_signal(E_SS_USSD_CNF, &ussd_info); } } /* +--------------------------------------------------------------------+ | PROJECT: MMI-Framework (8417) MODULE: MFW_SS | | STATE : code ROUTINE: ss_error_ussd | +--------------------------------------------------------------------+ PURPOSE : USSD process is failed. */ void ss_error_ussd(T_ACI_AT_CMD cmdId, T_ACI_CME_ERR reason) { TRACE_FUNCTION("ss_error_ussd()"); // ussd_info.error = ss_cvtErrCode(reason); ss_signal(E_SS_USSD_CNF, &ussd_info); } /* +---------------------------------------------------------------------+ | PROJECT: MMI-Framework (8417) MODULE: MFW_SS | | STATE : code ROUTINE: ss_abort_transaction | +---------------------------------------------------------------------+ PURPOSE : Abort executing of SS transaction */ T_MFW ss_abort_transaction(void) { TRACE_FUNCTION("ss_abort_transaction()"); if (sAT_Abort(CMD_SRC_LCL, AT_CMD_CUSD) EQ AT_CMPL) return TRUE; else { if (sAT_Abort(CMD_SRC_LCL, AT_CMD_D) EQ AT_CMPL) return TRUE; } return FALSE; } /* +--------------------------------------------------------------------+ | PROJECT: MMI-Framework (8417) MODULE: MFW_SS | | STATE : code ROUTINE: ss_set_cug | +--------------------------------------------------------------------+ PURPOSE : set parameter of close user group */ T_MFW_SS_RETURN ss_set_cug (T_MFW_SS_CUG_PARA *cug_param) { T_ACI_CCUG_MOD cug_mode = CCUG_MOD_NotPresent; T_ACI_CCUG_IDX cug_index = CCUG_IDX_NotPresent; T_ACI_CCUG_INFO cug_info = CCUG_INFO_NotPresent; TRACE_FUNCTION("ss_set_cug()"); /* check cug mode */ switch(cug_param->mode) { case MFW_SS_CUG_TMP_DISABLE: cug_mode = CCUG_MOD_DisableTmp; break; case MFW_SS_CUG_TMP_ENABLE: cug_mode = CCUG_MOD_EnableTmp; /* enable to control cug info */ break; default: /* ACI keep last valid value */ break; } /* check cug index */ switch(cug_param->index) { case MFW_SS_CUG_INDEX0: cug_index = CCUG_IDX_0; break; case MFW_SS_CUG_INDEX1: cug_index = CCUG_IDX_1; break; case MFW_SS_CUG_INDEX2: cug_index = CCUG_IDX_2; break; case MFW_SS_CUG_INDEX3: cug_index = CCUG_IDX_3; break; case MFW_SS_CUG_INDEX4: cug_index = CCUG_IDX_4; break; case MFW_SS_CUG_INDEX5: cug_index = CCUG_IDX_5; break; case MFW_SS_CUG_INDEX6: cug_index = CCUG_IDX_6; break; case MFW_SS_CUG_INDEX7: cug_index = CCUG_IDX_7; break; case MFW_SS_CUG_INDEX8: cug_index = CCUG_IDX_8; break; case MFW_SS_CUG_INDEX9: cug_index = CCUG_IDX_9; break; case MFW_SS_CUG_NO_INDEX: cug_index = CCUG_IDX_No; /* preferred CUG taken from subscriber data */ break; default: /* ACI keep last valid value */ break; } /* check cug info */ switch(cug_param->info) { case MFW_SS_CUG_SUPP_OA: cug_info = CCUG_INFO_SuppOa; /* suppress outgoing access */ break; case MFW_SS_CUG_SUPP_PREF: cug_info = CCUG_INFO_SuppPrefCug; /* suppress preferential closed user group */ break; case MFW_SS_CUG_SUPP_BOTH: cug_info = CCUG_INFO_SuppBoth; /* suppress outgoing access and preferential cug */ break; case MFW_SS_CUG_INFO_NO: /* no cug info */ cug_info = CCUG_INFO_No; break; default: /* ACI keep last valid value */ break; } if(sAT_PlusCCUG(CMD_SRC_LCL,cug_mode,cug_index,cug_info) EQ AT_CMPL) /* set in ACI cug parameters */ return MFW_SS_OK; else return MFW_SS_FAIL; } /* +--------------------------------------------------------------------+ | PROJECT: MMI-Framework (8417) MODULE: MFW_SS | | STATE : code ROUTINE: ss_get_cug | +--------------------------------------------------------------------+ PURPOSE : get parameter of close user group */ T_MFW_SS_RETURN ss_get_cug(T_MFW_SS_CUG_PARA *cug_param) { T_ACI_CCUG_MOD cug_mode; T_ACI_CCUG_IDX cug_index; T_ACI_CCUG_INFO cug_info; cug_param->mode = MFW_SS_CUG_MODE_Not_Present; cug_param->index = MFW_SS_CUG_INDEX_Not_Present; cug_param->info = MFW_SS_CUG_INFO_Not_Present; TRACE_FUNCTION("ss_get_cug()"); if(qAT_PlusCCUG(CMD_SRC_LCL,&cug_mode,&cug_index,&cug_info) NEQ AT_CMPL) /* get cug parameters of ACI */ return MFW_SS_FAIL; else { cug_param->mode = (T_MFW_SS_CUG_MODE)cug_mode; cug_param->index = (T_MFW_SS_CUG_INDEX)cug_index; cug_param->info = (T_MFW_SS_CUG_INFO)cug_info; return MFW_SS_OK; } } //PATCH TB 1309 /* +--------------------------------------------------------------------+ | PROJECT: MMI-Framework (8417) MODULE: MFW_SS | | STATE : code ROUTINE: ss_command_abort | +--------------------------------------------------------------------+ PURPOSE : */ T_MFW ss_command_abort(void) { TRACE_FUNCTION ("ss_command_abort()"); // Abort SS transaction. // Any SS AT_CMD will clear all SS (any) transaction(s) if (sAT_Abort(CMD_SRC_LCL, AT_CMD_CUSD) == AT_CMPL) return TRUE; else return FALSE; } //END PATCH TB //CQ-16432 start void ss_sat_passwdReqd(T_ACI_AT_CMD cmdId, T_ACI_CME_ERR err) { TRACE_FUNCTION("ss_sat_passwdReqd"); ss_signal(E_SS_SAT_CPWD,&cmdId); return; } //CQ-16432 end