First attempt at MCSI voice path automatic switching
The function is implemented at the ACI level in both aci2 and aci3,
successfully avoids triggering the DSP bug on the first call,
but the shutdown of MCSI upon call completion is not working properly yet
in either version.
line source
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT: MMI-Framework (8417) $Workfile:: mfw_cm.c $|
+ − | $Author:: Ak $Revision:: 1 $|
+ − | CREATED: 3.11.98 $Modtime:: 10.04.00 14:58 $|
+ − | STATE : code |
+ − +--------------------------------------------------------------------+
+ −
+ − MODULE : MFW_CM
+ −
+ − PURPOSE : This modul contains call management functions.
+ −
+ − HISTORY:
+ − Dec 20, 2006 DR:OMAPS00108192 a0393213(R.Prabakar)
+ − Description : Continous DTMF tones for simultanous keypress
+ − Solution : Bug was due to improper nesting of START-STOP sequence. Now they are avoided.
+ −
+ − Dec 13, 2006 DR:OMAPS00107103 a0393213(R.Prabakar)
+ − Description : No DTMF tones for simultanous keypress
+ − Solution : Once there was some problem in sending DTMF tones, the problem persisted till the next reset.
+ − This was because the queue was not getting flushed once the call was ended.
+ − Now the queue is flushed once the call is ended.
+ −
+ − Nov 30, 2006 DR:OMAPS00105758 a0393213(R.Prabakar)
+ − Description :No DTMF tones after collision of DTMF tones
+ −
+ − Nov 03, 2006 DR: OMAPS00101158 x0pleela
+ − Description : Board crashes after sending atd command through HyperTerminal
+ − Solution : Avoid peforming phonebook search operation if the source id is not LOCAL
+ − - Defined new static variable uOthersrc to set the value to TRUE or FALSE
+ − based on the source Id
+ − - Defined two new function mfw_set_OtherSrc_Value() to set the value of
+ − uOtherSrc to either TRUE or FALSE and mfw_get_OtherSrc_Value
+ − to get the value of uOtherSrc
+ −
+ − Oct 10, 2006 DR: OMAPS00093720 x0039928
+ − Description : If dial a international number and fail, when auto redail enabled, it will delete '+'.
+ − Solution : MFW_TON_INTERNATIONAL is set for out_call.ton if the dialling number contains '+'
+ −
+ − Sep 01, 2006 REF:OMAPS00090555 x0039928
+ − Description : When make a MO call,MFW can not get call number from ACI.
+ − Solution : The called number is extracted from the parameter of callCmEvent()
+ − for event E_CM_MO_RES and is displayed. Also stack memory optimization is done to
+ − resolve MMI stack overflow problem.
+ −
+ − June 15, 2006 OMAPS00079492 x0043642
+ − Description : FT TMO (wk20/06) TC 9.1, 9.2 Multi Party, MS fails to return to idle mode
+ − Solution : assign MFW_CM_DISCONNECT_ALL to variable cmd_hold, and call cm_signal()
+ −
+ −
+ − May 30, 2006 DR: OMAPS00070657 x0pleela
+ − Description: CPHS feature on Locosto-Lite
+ − Solution: For ALS feature,
+ − a) Added definition for new function "mfw_get_ALS_type"
+ −
+ − Apr 25, 2006 OMAPS00075711 a0393213 (R.Prabakar)
+ − Description : 'End Conference' option doesn't work
+ − Solution : The ACI_CHLD_MOD is changed from CHLD_MOD_RelActSpec to CHLD_MOD_RelActAndAcpt while calling sAT_PlusCHLD()
+ − in cm_disconnect(). This is done since CHLD_MOD_RelActSpec with callId 0 is equivalent to sending
+ − AT+CHLD=10 which is invalid according to GSM specification
+ −
+ − Apr 26, 2006 OMAPS00074886 a0393213 (Prabakar R)
+ − Description : No option in MMI to release the held call.
+ − Solution : No option was available. Added a menu option.
+ −
+ − Mar 28, 2006 REF:DR OMAPS00072407 x0039928
+ − Description: Phone hangs when tried to make an outgoing call
+ − Solution: Reverting back the changes of issue OMAPS00048894 to stop from stack overflow.
+ −
+ − Feb 27, 2006 REF:DR OMAPS00067884 x0039928
+ − Description: Held call released at locosto phone does not release the call at other end
+ − Solution: if the mode is greater than CHLD_MOD_RelDialCall then sAT_PercentCHLD() is called
+ − instead of sAT_PlusCHLD()
+ −
+ − Jan 27, 2006 REF:DR OMAPS00048894 x0039928
+ − Description: Outgoing Call: The called number is not displayed while an outgoing call is made
+ − Solution: The called number is extracted from the parameter of callCmEvent() for event E_CM_MO_RES and is displayed.
+ −
+ − Apr 22, 2006 OMAPS00070762 a0393213 (Prabakar R)
+ − Bug : Make MO call from MS1 to MS2. Make MT call from MS3 to MS1. Type at+chld=1 in ATI.
+ − expected behaviour : active call should be released and the incoming call should be accepted
+ − observed behaviour : happens as expected. but display shows incoming call screen only.
+ − active screen is not shown eventhough the connection is established between MS1 and MS3
+ − Fix : cmd.call_number was not set to 0, which is required in cm_result_cmd()
+ − to call cm_ok_connect()which updates the display. It is set now.
+ −
+ −
+ − Apr 21, 2006 OMAPS00070774 a0393213 (Prabakar R)
+ − Bug : Make MO call from MS1 to MS2. Make MT call from MS3 to MS1. Type at+chld=2 in ATI.
+ − expected behaviour : active call should be put to hold and the incoming call should be accepted
+ − observed behaviour : happens as expected. but display shows incoming call screen only.
+ − active screen is not shown eventhough the connection is established between MS1 and MS3
+ − Fix : AT commands from CMD_SRC_ATI_3 was not processed. As a result, MFW was not informed of the acceptance of the call
+ − through ATI. In precise cmd_hold variable was not set to MFW_CM_MT_ACCEPT, which is necessary for display update
+ −
+ −
+ − Sep 12, 2005 REF: MMI-SMR-34085 x0021334
+ − Description: RE: Add +CDIP command - MMI Additions
+ − Solution: Dummy implementation of function "rAT_PlusCDIP()" is done to enable successful compilation.
+ − Nov 02, 2005 DR OMAPS00052132 xdeepadh
+ − Bug:Not able to access the SMS inbox and also not able to send SMS in Locosto Lite build
+ − Fix: The ATI Enums usage has been put under the FF_ATI flag.
+ −
+ − Aug 10, 2005 REF: MMI-SPR-30099 x0018858
+ − Description: During a held communication, if the user presses 4 and send then there is no response from network.
+ − Solution: Modified the return value and also added a case statement to handle the response received.
+ −
+ − Apr 07 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
+ −
+ − Apr 03, 2005 REF: CRR 29988 - xpradipg
+ − Description: Optimisation 2: Reduce the keyboard buffer and the dtmf buffer
+ − size
+ − Solution : The dtmf buffer is reduced to 20 from 50
+ −
+ − 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
+ −
+ − Feb 03, 200 REF: CRR 25960 x0012850
+ − Description: Call Hold: While one call in Active and other in Held by swapping either of phone is not audible
+ − Solution: swapping action results in one of the calls getting muted. We attach user connection again.
+ −
+ − Aug 23, 2004 REF: CRR 22222 xkundadu
+ − Bug: Runaway Call Waiting Tone.
+ − Call Waiting tone doesnot stop after ansering waiting call.
+ −
+ − Fix: Handle the AT-Command source id CMD_SRC_ATI_2 also for call control
+ − callback functions.
+ −
+ − Jun 05, 2004 REF: CRR 18262 NISHIKANT KULKARNI
+ − Description: The sample sends a STOP DTMF message without release of the key by the user
+ − Solution: Instead of sending DTMF commands in "VTS_MOD_Auto" mode, on key press DTMF tone is started
+ − using VTS_MOD_ManStart and on key release DTMF tone is stopped using VTS_MOD_ManStop mode.
+ −
+ − // Apr 26, 2004 REF: CRR 16545 Ajith K P and Side effect of CRR 16545.
+ − // Issue description: When the user enters 11SEND and if the first call is
+ − // HELD call,the held call disconnects. This should not happen.
+ − // Problem was, though sAT_PlusCHLD(..) is expected to disconnect an ACTIVE
+ − // call only, it was disconnecting HELD call rather than returning AT_FAIL.
+ − // If sAT_PlusCHLD() Fails, Send the user entered string as USSD to network using sAT-Dn().
+ − // So now if the user wants to release a HELD call, in cm_disconect() we are calling the
+ − // sAT_PlusCHLD(..) function with C
+ −
+ −
+ − Mar 28, 2006 REF:ER OMAPS00071798 x0043642
+ − Added new options in BMI to accept the value for tty audio mode,
+ − and the accepted value is passed as parameter in function call sAT_PercentCTTY
+ −
+ − */
+ −
+ − #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_win.h"
+ −
+ − #include "mfw_tim.h"
+ − #include "mfw_utils.h"
+ −
+ − #include "ksd.h"
+ − #include "psa.h"
+ −
+ − #if defined (FAX_AND_DATA)
+ − #include "aci_fd.h"
+ − #endif
+ −
+ − #include "cmh.h"
+ − #include "phb.h"
+ − #include "cmh_phb.h"
+ −
+ − #include "mfw_ss.h"
+ − #include "mfw_ssi.h"
+ − #include "mfw_win.h"
+ − #include "mfw_ffs.h"
+ −
+ − #include "prim.h"
+ − #ifndef PCM_2_FFS
+ − #include "pcm.h"
+ − #endif
+ −
+ −
+ −
+ − /*
+ − * Conditional compilation flag for CCBS testing.
+ − * When defined, the cm_ccbs_... functions do not call ACI functions but
+ − * simply set the return value variable to indicate success. Also the body
+ − * of the rAT_PercentMMITEST function is defined for parsing AT%MMITEST
+ − * commands and calling ACI/MFW functions as if CCBS events had occured.
+ − */
+ − // #define CCBS_TEST
+ −
+ − /********* current define *******************************************/
+ − // Apr 14, 2005 REF: CRR 29991 xpradipg
+ − // remove the static definition
+ − #ifndef FF_MMI_OPTIM
+ − static T_MFW_CM_BLACKLIST_LIST black_list;
+ − #endif
+ −
+ − // Apr 06 2005 REF: CRR 29989 xpradipg
+ − // The definition of global is removed since it is locally used
+ − #ifndef FF_MMI_OPTIM
+ − static T_ACI_CAL_ENTR call_tab[MAX_CALL_NR];
+ − #endif
+ − static T_MFW_PHB_LIST entries;
+ − static T_MFW_CM_CC_STAT cc_stat; /* current outgoing call status */
+ − static T_MFW_CM_COMMAND cmd;
+ − static T_MFW_CM_NOTIFY notify;
+ −
+ − static UBYTE call_type; /* indicate an ECC call or normal call */
+ − static UBYTE call_stat; /* indicate an MO call or MT call */
+ − /*a0393213 lint WR:symbol not referenced soln:the variable is put under the flag (which won't be defined) so that the flag
+ − can be removed if the variable is necessary*/
+ − #ifdef MMI_LINT_WARNING_REMOVAL
+ − static SHORT cc_id; /* current call index */
+ − #endif
+ − static UBYTE redial_stat;
+ − static UBYTE redial_count;
+ − static UBYTE cmd_hold;
+ −
+ − static T_MFW_CM_CW_INFO in_call;
+ − static T_MFW_CM_MO_INFO out_call;
+ − static T_MFW_CM_DISCONNECT dis_connect;
+ − static T_MFW_CM_REDIAL rdl;
+ − static T_MFW_CM_CPI cm_cpi;
+ − /* Marcus: CCBS: 14/11/2002: Start */
+ − static T_MFW_CM_CCBS_INFO ccbs_info; // E_CM_CCBS data
+ − static T_MFW_CM_CCBS_OP ccbs_op = CM_CCBS_NONE; // Current CCBS operation
+ − /* Marcus: CCBS: 14/11/2002: End */
+ −
+ − static T_CM_CLI cli_prefix;
+ − /*CONQUEST 5998-MC 30/04/02 -initialised timers to zero (prevents corruption) */
+ − static MfwHnd redialTim1= NULL; /* the 1th redialing */
+ − static MfwHnd redialTim24 = NULL; /* the 2th to 4st redialing */
+ − static MfwHnd redialTim5 = NULL; /* the 5th or over redialing */
+ −
+ − static int cmCommand (U32 cmd, void *h); /* handle window commands */
+ − static int cm_redial_timeout(MfwEvt e, MfwTim *t);
+ − static char currAccepting = 0; /* ES!! 210999 */
+ − static char currConnecting = 0; /* ES!! 290999 */
+ − /*a0393213 lint WR:symbol not referenced soln:the variable is put under the flag (which won't be defined) so that the flag
+ − can be removed if the variable is necessary*/
+ − #ifdef MMI_LINT_WARNING_REMOVAL
+ − static T_ACI_AT_CMD currCmd;
+ − #endif
+ − static T_MFW_CM_DTMF dtmf_sent={FALSE};/*OMAPS00108192 a0393213 - variable which keeps track of the dtmf sent to ACI (via sAT_PlusVTS)*/
+ − static T_MFW_CM_DTMF dtmf_queued={FALSE};/*OMAPS00108192 a0393213 - variable which keeps track of the recent dtmf added to the queue*/
+ − void cm_force_disconnect(void); // RAVI
+ −
+ − /* June 15, 2006 OMAPS00079492 x0043642 */
+ − void set_cmdHold(int command);
+ −
+ − //APR 03 2005 - REF CRR: 29988 xpradipg
+ − //The DTMF buffer is reduced from 50 to 20
+ − #ifdef FF_MMI_REDUCED_KBD_BUFFER
+ − #define MAX_DTMF_Q_ENTRIES 20
+ − #else
+ − #define MAX_DTMF_Q_ENTRIES 50
+ − #endif
+ − #define CPI_CAUSE_MASK 0xFF /* cq11676 cause mask 17-02-04 MZ */
+ − static UBYTE dtmf_q[MAX_DTMF_Q_ENTRIES];
+ − static SHORT mfw_cm_dtmf_q_id;
+ −
+ − // MMI-SPR 13873 xkundadu.
+ − // Added this boolean variable to check whether a particular call is in
+ − // multiparty or not
+ − BOOL bIsMultpty = FALSE;
+ −
+ − EXTERN MfwHdr * current_mfw_elem;
+ −
+ − LOCAL T_MFW_CM_CALL_STAT cm_cvt_call_status( T_ACI_CAL_STAT stat );
+ −
+ − //x0pleela 03 Nov, 2006 DR: OMAPS00101158
+ − //Variable which says the type of source Id
+ − //FALSE if LOCAL SRC, TRUE if other sources like AT1, AT2, AT3...
+ − static UBYTE uOtherSrc;
+ − //function to set the value of uOtherSrc to either TRUE or FALSE
+ − GLOBAL void mfw_set_OtherSrc_Value(UBYTE otherSrc);
+ − //function to get the value of uOtherSrc
+ − GLOBAL UBYTE mfw_get_OtherSrc_Value(void);
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT: MMI-Framework (8417) MODULE: MFW_CM |
+ − | STATE : code ROUTINE: cm_init |
+ − +--------------------------------------------------------------------+
+ −
+ −
+ − PURPOSE : initialize for call management
+ −
+ − */
+ −
+ − void cm_init(void)
+ − {
+ − // Apr 14, 2005 REF: CRR 29991 xpradipg
+ − // local variable definition
+ − #ifdef FF_MMI_OPTIM
+ − T_MFW_CM_BLACKLIST_LIST black_list;
+ − /*a0393213 compiler warnings removal- removed variable 'file'*/
+ − #endif
+ − TRACE_FUNCTION ("cm_init()");
+ − memset(&black_list, 0, sizeof(T_MFW_CM_BLACKLIST_LIST));
+ − // Apr 14, 2005 REF: CRR 29991 xpradipg
+ − // Since the blacklist is not persistent across powercycles we reset the file
+ − // contents
+ − #ifdef FF_MMI_OPTIM
+ − if( flash_MMI_blackList_write((U8 *)&black_list, sizeof(T_MFW_CM_BLACKLIST_LIST),0) < 0)
+ − TRACE_EVENT("Error opening the black list file");
+ − #endif
+ −
+ − currAccepting = 0; /* ES!! 210999 */
+ − currConnecting = 0; /* ES!! 290999 */
+ −
+ − call_type = MFW_CALL_FREE;
+ − call_stat = MFW_CALL_FREE;
+ − cc_stat.type = MFW_CALL_FREE;
+ − #ifdef MMI_LINT_WARNING_REMOVAL /*a0393213 lint warnings removal*/
+ − cc_id = 0;
+ − #endif
+ −
+ − cmd_hold = 0;
+ − #ifdef MMI_LINT_WARNING_REMOVAL /*a0393213 lint warnings removal*/
+ − currCmd = AT_CMD_NONE;
+ − #endif
+ −
+ − // get prefix from EEPROM
+ − cli_prefix = 0;
+ −
+ − /* create time event for redialing */
+ − redialTim1 = timCreate (0, MIN_DURATION_1, (MfwCb)cm_redial_timeout);
+ − redialTim24 = timCreate (0, MIN_DURATION_2_4, (MfwCb)cm_redial_timeout);
+ − redialTim5 = timCreate (0, MIN_DURATION_5, (MfwCb)cm_redial_timeout);
+ −
+ − redial_stat = (UBYTE)FFS_flashData.redial_mode;
+ −
+ − mfwCommand[MfwTypCm] = (MfwCb) cmCommand;
+ −
+ − /*
+ − ** Create a static circular buffer to hold the dtmf tones
+ − */
+ − mfw_cm_dtmf_q_id = mfw_cbuf_create( MAX_DTMF_Q_ENTRIES,
+ − sizeof(UBYTE),
+ − 0,
+ − 0xFF,
+ − TRUE,
+ − (void *)&dtmf_q[0]);
+ −
+ − if (mfw_cm_dtmf_q_id < 0)
+ − TRACE_EVENT_P1("ERROR : mfw_cbuf_create failed with error value %d", mfw_cm_dtmf_q_id);
+ − }
+ −
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT: MMI-Framework (8417) MODULE: MFW_CM |
+ − | STATE : code ROUTINE: cm_exit |
+ − +--------------------------------------------------------------------+
+ −
+ −
+ − PURPOSE :
+ −
+ − */
+ −
+ − void cm_exit(void)
+ − {
+ − TRACE_FUNCTION ("cm_exit()");
+ −
+ − /* delete time event for redialing */
+ − timDelete (redialTim5);
+ − timDelete (redialTim24);
+ − timDelete (redialTim1);
+ − }
+ −
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT: MMI-Framework (8417) MODULE: MFW_CM |
+ − | STATE : code ROUTINE: cm_create |
+ − +--------------------------------------------------------------------+
+ −
+ −
+ − PURPOSE : create event for call management
+ −
+ − */
+ −
+ − T_MFW_HND cm_create(T_MFW_HND hWin, T_MFW_EVENT event, T_MFW_CB cbfunc)
+ − {
+ − T_MFW_HDR *hdr;
+ − T_MFW_CM *cm_para;
+ −
+ − TRACE_FUNCTION ("cm_create()");
+ −
+ − hdr = (T_MFW_HDR *) mfwAlloc(sizeof (T_MFW_HDR));
+ − cm_para = (T_MFW_CM *) mfwAlloc(sizeof (T_MFW_CM));
+ −
+ − if (!hdr OR !cm_para)
+ − return FALSE;
+ −
+ − /*
+ − * initialisation of the handler
+ − */
+ − cm_para->emask = event;
+ − cm_para->handler = cbfunc;
+ −
+ − hdr->data = cm_para; /* store parameter in node */
+ − hdr->type = MFW_TYP_CM; /* store type of event handler */
+ −
+ − /*
+ − * installation of the handler
+ − */
+ − return mfwInsert((T_MFW_HDR *)hWin, hdr);
+ − }
+ −
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT: MMI-Framework (8417) MODULE: MFW_CM |
+ − | STATE : code ROUTINE: cm_delete |
+ − +--------------------------------------------------------------------+
+ −
+ −
+ − PURPOSE : delete a event for call management
+ −
+ − */
+ −
+ − T_MFW_RES cm_delete(T_MFW_HND h)
+ − {
+ − TRACE_FUNCTION ("cm_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_CM));
+ − mfwFree((U8 *)h,sizeof(T_MFW_HDR));
+ −
+ − return MFW_RES_OK;
+ − }
+ −
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT: MMI-Framework (8417) MODULE: MFW_CM |
+ − | STATE : code ROUTINE: cm_signal |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE : send a event signal.
+ −
+ − */
+ −
+ − void cm_signal(T_MFW_EVENT event, void * para)
+ − {
+ − UBYTE temp;
+ −
+ −
+ −
+ − temp = dspl_Enable(0);
+ −
+ −
+ − if (mfwSignallingMethod EQ 0)
+ − {
+ − /*
+ − * focus is on a window
+ − */
+ − if (mfwFocus)
+ − /*
+ − * send event to sim management
+ − * handler if available
+ − */
+ − if (cm_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)
+ − cm_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 (cm_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;
+ − }
+ − cm_sign_exec (mfwRoot, event, para);
+ − }
+ − dspl_Enable(temp);
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT: MMI-Framework (8417) MODULE: MFW_CM |
+ − | STATE : code ROUTINE: cm_sign_exec |
+ − +--------------------------------------------------------------------+
+ −
+ −
+ − PURPOSE : Send a signal if CM management handler.
+ −
+ − */
+ −
+ − BOOL cm_sign_exec (T_MFW_HDR * cur_elem, T_MFW_EVENT event, T_MFW_CM_PARA * para)
+ − {
+ − TRACE_FUNCTION ("cm_sign_exec()");
+ −
+ − while (cur_elem)
+ − {
+ − /*
+ − * event handler is available
+ − */
+ − if (cur_elem->type EQ MFW_TYP_CM)
+ − {
+ − T_MFW_CM * cm_data;
+ − /*
+ − * handler is CM management handler
+ − */
+ − cm_data = (T_MFW_CM *)cur_elem->data;
+ − if (cm_data->emask & event)
+ − {
+ − /*
+ − * event is expected by the call back function
+ − */
+ − cm_data->event = event;
+ − switch (event)
+ − {
+ − case E_CM_COLP:
+ − memcpy (&cm_data->para.mo_data, para, sizeof (T_MFW_CM_MO_INFO));
+ − break;
+ −
+ − case E_CM_DISCONNECT:
+ − memcpy (&cm_data->para.disconnect, para, sizeof (T_MFW_CM_DISCONNECT));
+ − break;
+ − case E_CM_DISCONNECT_ALL:
+ − memcpy (&cm_data->para.disconnect_all, para, sizeof (T_MFW_CM_DISCONNECT_ALL));
+ − break;
+ −
+ − case E_CM_CW:
+ − memcpy (&cm_data->para.cw_info, para, sizeof (T_MFW_CM_CW_INFO));
+ − break;
+ −
+ − case E_CM_COMMAND:
+ − memcpy (&cm_data->para.command, para, sizeof (T_MFW_CM_COMMAND));
+ − break;
+ −
+ − case E_CM_AOC:
+ − memcpy (&cm_data->para.aoc_info, para, sizeof (T_MFW_CM_AOC_INFO));
+ − break;
+ −
+ − case E_CM_REDIAL:
+ − memcpy (&cm_data->para.rdl, para, sizeof (T_MFW_CM_REDIAL));
+ − break;
+ −
+ − case E_CM_CONNECT_ACK:
+ − memcpy (&cm_data->para.call_id, para, sizeof (SHORT));
+ − break;
+ −
+ − // Sep 01, 2006 REF:OMAPS00090555 x0039928
+ − // Fix: Copy MO data
+ − case E_CM_MO_RES:
+ − memcpy (&cm_data->para.mo_data, para, sizeof (T_MFW_CM_MO_INFO));
+ − break;
+ −
+ − case E_CM_CPI:
+ − memcpy (&cm_data->para.cm_cpi, para, sizeof (T_MFW_CM_CPI));
+ − break;
+ −
+ − case E_CM_RING_OFF:
+ − break;
+ −
+ − case E_CM_AOC_CNF:
+ − memcpy (&cm_data->para.aoc_cnf, para, sizeof (T_MFW_CM_AOC_CNF));
+ − break;
+ −
+ − case E_CM_DTMF:
+ − memcpy (&cm_data->para.dtmf_tone, para, sizeof (UBYTE));
+ − break;
+ −
+ − case E_CM_NOTIFY:
+ − memcpy (&cm_data->para.notify, para, sizeof (T_MFW_CM_NOTIFY));
+ − break;
+ − /*MC SPR 1392*/
+ − case E_CM_CALL_DEFLECT_STATUS:
+ − memcpy (&cm_data->para.call_deflect_status, para, sizeof (BOOL));
+ − break;
+ − /* Marcus: CCBS: 14/11/2002: Start */
+ − case E_CM_CCBS:
+ − TRACE_EVENT("E_CM_CCBS");
+ − memcpy (&cm_data->para.ccbs, para, sizeof (T_MFW_CM_CCBS_INFO));
+ − break;
+ − /* Marcus: CCBS: 14/11/2002: End */
+ −
+ − case E_CM_CTYI:
+ − memcpy (&cm_data->para.ctyi, para, sizeof (T_MFW_CM_CTYI));
+ − break;
+ −
+ − }
+ −
+ − /*
+ − * if call back defined, call it
+ − */
+ − if (cm_data->handler)
+ − {
+ − // PATCH LE 06.06.00
+ − // store current mfw elem
+ − current_mfw_elem = cur_elem;
+ − // END PATCH LE 06.06.00
+ − if ((*(cm_data->handler)) (cm_data->event, (void *)&cm_data->para))
+ − return TRUE;
+ − }
+ − }
+ − }
+ − cur_elem = cur_elem->next;
+ − }
+ − return FALSE;
+ − }
+ −
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : MMI-Framework (8417) MODULE : MFW_CM |
+ − | STATE : code ROUTINE : cm_callTyp_cvt |
+ − +--------------------------------------------------------------------+
+ −
+ −
+ − PURPOSE : This function is used to convert the type of call class
+ − used by MFW to the type of call class used by ACI.
+ −
+ − */
+ −
+ − LOCAL T_MFW_CM_CALL_TYPE cm_callTyp_cvt(T_ACI_CLASS cls)
+ − {
+ − switch ( cls )
+ − {
+ − case ( CLASS_Vce ) : return VOICE_CALL;
+ − case ( CLASS_AuxVce): return AuxVOICE_CALL;
+ − case ( CLASS_Dat ) : return DATA_CALL;
+ − case ( CLASS_Fax ) : return FAX_CALL;
+ − case ( CLASS_VceDat ) :
+ − case ( CLASS_VceFax ) :
+ − case ( CLASS_DatFax ) :
+ − case ( CLASS_VceDatFax ): return (T_MFW_CM_CALL_TYPE)cls;
+ − case ( CLASS_None ) : return NONE_TYPE;
+ − case (CLASS_NotPresent): return NONE_TYPE;
+ −
+ − default: return NONE_TYPE;
+ − }
+ − }
+ −
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT: MMI-Framework (8417) MODULE: MFW_CM |
+ − | STATE : code ROUTINE: cm_search_callId |
+ − +--------------------------------------------------------------------+
+ −
+ −
+ − PURPOSE : find call index from call table
+ −
+ − */
+ −
+ − int cm_search_callId(T_ACI_CAL_STAT type, SHORT *id)
+ − {
+ − int i;
+ − // Apr 06 2005 REF: CRR 29989 xpradipg
+ − // Local definition and allocation
+ − #ifdef FF_MMI_OPTIM
+ − T_ACI_CAL_ENTR *call_tab;
+ − *id = 0;
+ − call_tab = (T_ACI_CAL_ENTR*)mfwAlloc(sizeof(T_ACI_CAL_ENTR)*MAX_CALL_NR);
+ − if(NULL == call_tab)
+ − return CM_ERROR;
+ − #else
+ − *id = 0;
+ − #endif
+ − TRACE_FUNCTION("cm_search_callId()");
+ −
+ −
+ − if (qAT_PercentCAL(CMD_SRC_LCL, call_tab) != AT_CMPL)
+ − {
+ − // Apr 06 2005 REF: CRR 29989 xpradipg
+ − // deallocation of memory allocated
+ − #ifdef FF_MMI_OPTIM
+ − if(call_tab)
+ − mfwFree((U8*)call_tab, sizeof(T_ACI_CAL_ENTR)*MAX_CALL_NR);
+ − #endif
+ − return CM_ERROR;
+ − }
+ −
+ − for (i=0; i<MAX_CALL_NR; i++)
+ − {
+ − if (call_tab[i].index == -1)
+ − break;
+ −
+ − if (call_tab[i].status == type)
+ − {
+ − *id = call_tab[i].index;
+ − // Apr 06 2005 REF: CRR 29989 xpradipg
+ − // deallocation of memory
+ − #ifdef FF_MMI_OPTIM
+ − if(call_tab)
+ − mfwFree((U8*)call_tab, sizeof(T_ACI_CAL_ENTR)*MAX_CALL_NR);
+ − #endif
+ − return CM_OK;
+ − }
+ −
+ − }
+ − // Apr 06 2005 REF: CRR 29989 xpradipg
+ − // deallocation of memory
+ − #ifdef FF_MMI_OPTIM
+ − if(call_tab)
+ − mfwFree((U8*)call_tab, sizeof(T_ACI_CAL_ENTR)*MAX_CALL_NR);
+ − #endif
+ − return CM_ERROR;
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT: MMI-Framework (8417) MODULE: MFW_CM |
+ − | STATE : code ROUTINE: cm_search_callMode |
+ − +--------------------------------------------------------------------+
+ −
+ −
+ − PURPOSE : find call type from call table
+ −
+ − */
+ −
+ − T_ACI_CAL_MODE cm_search_callMode(SHORT id)
+ − {
+ − int i;
+ − // Apr 06 2005 REF: CRR 29989 xpradipg
+ − // allocation of memory, if the memory allocation fails then we return the
+ − // error value same as when the qAT_PercentCAL() fails
+ − #ifdef FF_MMI_OPTIM
+ − T_ACI_CAL_ENTR *call_tab;//[MAX_CALL_NR];
+ − T_ACI_CAL_MODE calMode;
+ − call_tab = (T_ACI_CAL_ENTR*)mfwAlloc(sizeof(T_ACI_CAL_ENTR)*MAX_CALL_NR);
+ − if(NULL == call_tab)
+ − return CAL_MODE_Unknown;
+ − #endif
+ −
+ − TRACE_FUNCTION("cm_search_callMode()");
+ −
+ − if (qAT_PercentCAL(CMD_SRC_LCL, call_tab) != AT_CMPL)
+ − {
+ − // Apr 06 2005 REF: CRR 29989 xpradipg
+ − // deallocate memory
+ − #ifdef FF_MMI_OPTIM
+ − if(call_tab)
+ − mfwFree((U8*)call_tab, sizeof(T_ACI_CAL_ENTR)*MAX_CALL_NR);
+ − #endif
+ − return CAL_MODE_Unknown;
+ − }
+ − for (i=0; i<MAX_CALL_NR; i++)
+ − {
+ − if (call_tab[i].index == -1)
+ − break;
+ −
+ − if (call_tab[i].index == id)
+ − {
+ − // Apr 06 2005 REF: CRR 29989 xpradipg
+ − // deallocate memory
+ − #ifdef FF_MMI_OPTIM
+ − calMode = call_tab[i].calMode;
+ − if(call_tab)
+ − mfwFree((U8*)call_tab, sizeof(T_ACI_CAL_ENTR)*MAX_CALL_NR);
+ − return calMode;
+ − #else
+ − return call_tab[i].calMode;
+ − #endif
+ − }
+ − }
+ − // Apr 06 2005 REF: CRR 29989 xpradipg
+ − // deallocate memory
+ − #ifdef FF_MMI_OPTIM
+ − if(call_tab)
+ − mfwFree((U8*)call_tab, sizeof(T_ACI_CAL_ENTR)*MAX_CALL_NR);
+ − #endif
+ − return CAL_MODE_Unknown;
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT: MMI-Framework (8417) MODULE: MFW_CM |
+ − | STATE : code ROUTINE: cm_search_mptyId |
+ −
+ −
+ − PURPOSE : find multiparty call index from call table
+ −
+ − */
+ −
+ − int cm_search_mptyId(T_ACI_CAL_MPTY type, SHORT *id)
+ − {
+ − int i;
+ − // Apr 06 2005 REF: CRR 29989 xpradipg
+ − // allocate memory
+ − #ifdef FF_MMI_OPTIM
+ − T_ACI_CAL_ENTR *call_tab;//[MAX_CALL_NR];
+ − call_tab = (T_ACI_CAL_ENTR*)mfwAlloc(sizeof(T_ACI_CAL_ENTR)*MAX_CALL_NR);
+ − if( NULL == call_tab)
+ − return CM_ERROR;
+ − #endif
+ −
+ − TRACE_FUNCTION("cm_search_mptyId()");
+ − *id = 0;
+ −
+ − if (qAT_PercentCAL(CMD_SRC_LCL, call_tab) != AT_CMPL)
+ − {
+ − // Apr 06 2005 REF: CRR 29989 xpradipg
+ − // deallocate memory
+ − #ifdef FF_MMI_OPTIM
+ − if(call_tab)
+ − mfwFree((U8*)call_tab, sizeof(T_ACI_CAL_ENTR)*MAX_CALL_NR);
+ − #endif
+ − return CM_ERROR;
+ − }
+ − for (i=0; i<MAX_CALL_NR; i++)
+ − {
+ − if (call_tab[i].index == -1)
+ − break;
+ −
+ − if (call_tab[i].mpty == type)
+ − {
+ − *id = call_tab[i].index;
+ − // Apr 06 2005 REF: CRR 29989 xpradipg
+ − // deallocate memory
+ − #ifdef FF_MMI_OPTIM
+ − if(call_tab)
+ − mfwFree((U8*)call_tab, sizeof(T_ACI_CAL_ENTR)*MAX_CALL_NR);
+ − #endif
+ − return CM_OK;
+ − }
+ − }
+ − // Apr 06 2005 REF: CRR 29989 xpradipg
+ − // deallocate memory
+ − #ifdef FF_MMI_OPTIM
+ − if(call_tab)
+ − mfwFree((U8*)call_tab, sizeof(T_ACI_CAL_ENTR)*MAX_CALL_NR);
+ − #endif
+ − return CM_ERROR;
+ − }
+ −
+ −
+ − /*
+ − +-------------------------------------------------------------------+
+ − | PROJECT: MMI-Framework (8417) MODULE: MFW_CM |
+ − | STATE : code ROUTINE: cm_search_numId |
+ − +-------------------------------------------------------------------+
+ − PURPOSE : find call index from call table
+ − */
+ − /*a0393213(R.Prabakar) lint warnings removal
+ − warning:symbol(cm_search_numId) not referenced
+ − soln :this function was not at all called. so this function has been put under MMI_LINT_WARNING_REMOVAL,
+ − which is not defined. If this function is needed this flag can be removed*/
+ −
+ − #ifdef MMI_LINT_WARNING_REMOVAL
+ − LOCAL SHORT cm_search_numId(UBYTE *number)
+ − {
+ − int i;
+ − // Apr 06 2005 REF: CRR 29989 xpradipg
+ − // allocate memory
+ − #ifdef FF_MMI_OPTIM
+ − SHORT index;
+ − T_ACI_CAL_ENTR *call_tab;//[MAX_CALL_NR];
+ − call_tab = (T_ACI_CAL_ENTR*)mfwAlloc(sizeof(T_ACI_CAL_ENTR)*MAX_CALL_NR);
+ − if(NULL == call_tab)
+ − return 0;
+ − #endif
+ −
+ − TRACE_FUNCTION("cm_search_numId()");
+ −
+ − if (qAT_PercentCAL(CMD_SRC_LCL, call_tab) != AT_CMPL)
+ − {
+ − // Apr 06 2005 REF: CRR 29989 xpradipg
+ − // deallocate memory
+ − #ifdef FF_MMI_OPTIM
+ − if(call_tab)
+ − mfwFree((U8*)call_tab, sizeof(T_ACI_CAL_ENTR)*MAX_CALL_NR);
+ − #endif
+ − return 0;
+ − }
+ −
+ − for (i=0; i<MAX_CALL_NR; i++)
+ − {
+ − if (call_tab[i].index == -1)
+ − break;
+ −
+ − if (!strcmp(call_tab[i].number, (char *)number))
+ − {
+ − // Apr 06 2005 REF: CRR 29989 xpradipg
+ − // deallocate memory
+ − #ifdef FF_MMI_OPTIM
+ − index = call_tab[i].index;
+ − if(call_tab)
+ − mfwFree((U8*)call_tab, sizeof(T_ACI_CAL_ENTR)*MAX_CALL_NR);
+ − return index;
+ − #else
+ − return call_tab[i].index;
+ − #endif
+ − }
+ − }
+ − // Apr 06 2005 REF: CRR 29989 xpradipg
+ − // deallocate memory
+ − #ifdef FF_MMI_OPTIM
+ − if(call_tab)
+ − mfwFree((U8*)call_tab, sizeof(T_ACI_CAL_ENTR)*MAX_CALL_NR);
+ − #endif
+ − return 0;
+ − }
+ −
+ − #endif
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT: MMI-Framework (8417) MODULE: MFW_CM |
+ − | STATE : code ROUTINE: cm_search_callStat |
+ − +--------------------------------------------------------------------+
+ −
+ −
+ − PURPOSE : Search the information from call table.
+ −
+ − */
+ −
+ − T_MFW cm_search_callStat(SHORT call_number,
+ − T_MFW_CM_CALL_STAT *stat,
+ − UBYTE *ton,
+ − UBYTE *mode)
+ − {
+ − int i;
+ − // Apr 06 2005 REF: CRR 29989 xpradipg
+ − // allocat memory
+ − #ifdef FF_MMI_OPTIM
+ − T_ACI_CAL_ENTR *call_tab;//[MAX_CALL_NR];
+ − call_tab = (T_ACI_CAL_ENTR*)mfwAlloc(sizeof(T_ACI_CAL_ENTR)*MAX_CALL_NR);
+ − if( NULL == call_tab)
+ − return CM_ERROR;
+ − #endif
+ −
+ − if (qAT_PercentCAL(CMD_SRC_LCL, call_tab) EQ AT_CMPL)
+ − {
+ − for (i=0; i<MAX_CALL_NR; i++)
+ − {
+ − if (call_tab[i].index == -1)
+ − break;
+ −
+ − if (call_tab[i].index == call_number)
+ − {
+ − *stat = cm_cvt_call_status(call_tab[i].status);
+ − *ton = phb_cvtTon(call_tab[i].type.ton);
+ − *mode = cm_cvt_call_mode(call_tab[i].calMode);
+ − // Apr 06 2005 REF: CRR 29989 xpradipg
+ − // deallocate memory
+ − #ifdef FF_MMI_OPTIM
+ − if(call_tab)
+ − mfwFree((U8*)call_tab, sizeof(T_ACI_CAL_ENTR)*MAX_CALL_NR);
+ − #endif
+ −
+ − return CM_OK;
+ − }
+ − }
+ − // Apr 06 2005 REF: CRR 29989 xpradipg
+ − // this will be returned once we get out of the if statement
+ − #ifndef FF_MMI_OPTIM
+ − return CM_ERROR;
+ − #endif
+ − }
+ − // Apr 06 2005 REF: CRR 29989 xpradipg
+ − // deallocate memory
+ − #ifdef FF_MMI_OPTIM
+ − if(call_tab)
+ − mfwFree((U8*)call_tab, sizeof(T_ACI_CAL_ENTR)*MAX_CALL_NR);
+ − #endif
+ − return CM_ERROR;
+ − }
+ −
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT: MMI-Framework (8417) MODULE: MFW_CM |
+ − | STATE : code ROUTINE: cm_check_emergency |
+ − +--------------------------------------------------------------------+
+ −
+ −
+ − PURPOSE : Check emergency call number
+ −
+ − */
+ −
+ − T_MFW cm_check_emergency(UBYTE *number)
+ − {
+ − //UBYTE index; // RAVI
+ − // T_MFW_PHB_TEXT findText; // RAVI
+ − // T_MFW_PHB_ENTRY entry; // RAVI
+ −
+ − TRACE_FUNCTION ("cm_check_emergency()");
+ − TRACE_EVENT_P1("String being passed = %s", (char*)number);
+ −
+ − //TISH, patch for OMAPS00125064
+ − if (strlen((char *)number) <= 0 OR strlen((char *)number) > 6)
+ − //if (strlen((char *)number) <= 0 OR strlen((char *)number) > 3)
+ − return FALSE;
+ −
+ − if(psaCC_phbSrchECC((char*)number, FALSE))
+ − {
+ − TRACE_EVENT("psaCC_phbSrchECC - returned - TRUE");
+ − return TRUE;
+ − }
+ − else
+ − {
+ − TRACE_EVENT("psaCC_phbSrchECC - returned - FALSE");
+ − return FALSE;
+ − }
+ −
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT: MMI-Framework (8417) MODULE: MFW_CM |
+ − | STATE : code ROUTINE: cm_mo_prefix |
+ − +--------------------------------------------------------------------+
+ −
+ −
+ − PURPOSE : set/get CLIP, CLIR, COLP and COLR tempstatus
+ −
+ − */
+ −
+ − T_CM_CLI cm_mo_prefix(T_CM_CLI prefix)
+ − {
+ − UBYTE bits;
+ −
+ − if ((bits = (prefix & 0x0c)) != 0)
+ − cli_prefix = (cli_prefix & 0xf3) | bits;
+ − if ((bits = (prefix & 0xc0)) != 0)
+ − cli_prefix = (cli_prefix & 0x3f) | bits;
+ − return cli_prefix;
+ − }
+ −
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT: MMI-Framework (8417) MODULE: MFW_CM |
+ − | STATE : code ROUTINE: cm_set_cmd_status |
+ − +--------------------------------------------------------------------+
+ −
+ −
+ − PURPOSE :
+ −
+ − */
+ −
+ − void cm_set_cmd_status(T_ACI_CHLD_MOD mode, CHAR* call)
+ − {
+ − SHORT id;
+ − // Added xkundadu MMI-SPR 13873
+ − // Stores the status of a particular call.
+ − T_MFW_CM_STATUS status;
+ −
+ − TRACE_FUNCTION("cm_set_cmd_status()"); // Marcus: CCBS: 14/11/2002
+ −
+ − memset(&dis_connect, 0, sizeof(T_MFW_CM_DISCONNECT));
+ − memset(&cmd, 0, sizeof(T_MFW_CM_COMMAND));
+ − switch (mode)
+ − {
+ − case CHLD_MOD_RelHldOrUdub:
+ − TRACE_EVENT("CHLD_MOD_RelHldOrUdub"); // Marcus: CCBS: 14/11/2002
+ − /*SPR#1965 - DS - Changed from MFW_CM_MT_REJECT to MFW_CM_TERMINATED because
+ − * the E_CM_DISCONNECT signal is not sent in cm_ok_disconnect() if cmd_hold = MFW_CM_MT_REJECT.
+ − * Port of 1962.
+ − */
+ − cmd_hold = MFW_CM_TERMINATED;
+ −
+ − if (cm_search_callId(CAL_STAT_Wait, &id) == CM_OK)
+ − {
+ − TRACE_EVENT("cm_search_callId(CAL_STAT_Wait, &id) == CM_OK"); // Marcus: CCBS: 14/11/2002
+ − dis_connect.call_number = id;
+ − }
+ − else
+ − {
+ − TRACE_EVENT("cm_search_callId(CAL_STAT_Wait, &id) != CM_OK"); // Marcus: CCBS: 14/11/2002
+ − dis_connect.call_number = -1; // call id?
+ − }
+ −
+ − break;
+ − case CHLD_MOD_RelActAndAcpt:
+ −
+ − TRACE_EVENT("CHLD_MOD_RelActAndAcpt"); // Marcus: CCBS: 14/11/2002
+ − cmd_hold = MFW_CM_1_SEND;
+ −
+ − // Added xkundadu MMI-SPR 13873
+ − // Querying if there are any active calls, storing the index of the
+ − // call and setting a flag if found to be multiparty.
+ − if (cm_search_callId(CAL_STAT_Active, &id) == CM_OK)
+ − {
+ − // Active call is present.
+ − dis_connect.call_number = id; // call id ?
+ − cm_status(id, &status, 1);
+ − if (status.mtpy EQ MFW_MTPY_MEMBER)
+ − {
+ − bIsMultpty = TRUE;
+ − }
+ − else
+ − {
+ − bIsMultpty = FALSE;
+ − }
+ −
+ − }
+ − else
+ − {
+ − dis_connect.call_number = -1;
+ − }
+ − // Added xkundadu MMI-SPR 13873
+ − // Querying if there are any held calls, storing the index of the call
+ − // to change the status to active call.
+ − if (cm_search_callId(CAL_STAT_Held, &id) == CM_OK)
+ − {
+ − cmd.command = CM_RETRIEVE;
+ − cmd.call_number = id;
+ − }
+ − // Added xkundadu MMI-SPR 13873
+ − // Checking is there any waiting call exists or not.
+ − if (cm_search_callId(CAL_STAT_Wait, &id) == CM_OK)
+ − {
+ − // This variable determines whether to accept/reject the call
+ − // in the cm_result_cmd().
+ − cmd.call_number=0;
+ − }
+ − else
+ − {
+ − cmd.call_number=-1;
+ − }
+ −
+ − break;
+ −
+ − case CHLD_MOD_RelActSpec:
+ − TRACE_EVENT("CHLD_MOD_RelActSpec"); // Marcus: CCBS: 14/11/2002
+ − dis_connect.call_number = (SHORT)atoi(call);
+ − if (dis_connect.call_number)
+ − {
+ − TRACE_EVENT("dis_connect.call_number"); // Marcus: CCBS: 14/11/2002
+ − cmd_hold = MFW_CM_TERMINATED;
+ − }
+ − else
+ − {
+ − TRACE_EVENT("!dis_connect.call_number"); // Marcus: CCBS: 14/11/2002
+ − cmd_hold = MFW_CM_MPTY_TERMINATED;
+ − }
+ − break;
+ − case CHLD_MOD_HldActAndAcpt:
+ − TRACE_EVENT("CHLD_MOD_HldActAndAcpt"); // Marcus: CCBS: 14/11/2002
+ − if (cm_search_callId(CAL_STAT_Wait, &id) == CM_OK)
+ − {
+ − TRACE_EVENT("cm_search_callId(CAL_STAT_Wait, &id) == CM_OK"); // Marcus: CCBS: 14/11/2002
+ − cmd_hold = MFW_CM_MT_ACCEPT;
+ − /*
+ − * initialize for result event
+ − */
+ − cmd.command = CM_HOLD;
+ − #ifdef MMI_LINT_WARNING_REMOVAL /*a0393213 lint warnings removal*/
+ − cc_id = id;
+ − #endif
+ − }
+ − else
+ − {
+ − TRACE_EVENT("cm_search_callId(CAL_STAT_Wait, &id) != CM_OK"); // Marcus: CCBS: 14/11/2002
+ − if ((cm_search_callId(CAL_STAT_Active, &id) == CM_OK)
+ − AND (cm_search_callId(CAL_STAT_Held, &id) == CM_OK))
+ − {
+ − TRACE_EVENT("cmd.command = CM_SWAP"); // Marcus: CCBS: 14/11/2002
+ − cmd.command = CM_SWAP;
+ − }
+ − if ((cm_search_callId(CAL_STAT_Active, &id) != CM_OK)
+ − AND (cm_search_callId(CAL_STAT_Held, &id) == CM_OK))
+ − {
+ − TRACE_EVENT("cmd.command = CM_RETRIEVE"); // Marcus: CCBS: 14/11/2002
+ − cmd.command = CM_RETRIEVE;
+ − }
+ − if ((cm_search_callId(CAL_STAT_Active, &id) == CM_OK)
+ − AND (cm_search_callId(CAL_STAT_Held, &id) != CM_OK))
+ − {
+ − TRACE_EVENT("cmd.command = CM_HOLD"); // Marcus: CCBS: 14/11/2002
+ − cmd.command = CM_HOLD;
+ − }
+ − cmd.call_number = 0;
+ − }
+ − break;
+ − case CHLD_MOD_HldActExc:
+ − TRACE_EVENT("CHLD_MOD_HldActExc"); // Marcus: CCBS: 14/11/2002
+ − cmd.command = CM_SPLIT_MULTIPARTY;
+ − cmd.call_number = 0;
+ − break;
+ − case CHLD_MOD_AddHld:
+ − TRACE_EVENT("CHLD_MOD_AddHld"); // Marcus: CCBS: 14/11/2002
+ − cmd.command = CM_BUILD_MULTIPARTY;
+ − cmd.call_number = 0;
+ − break;
+ − case CHLD_MOD_Ect:
+ − TRACE_EVENT("CHLD_MOD_Ect"); // Marcus: CCBS: 14/11/2002
+ − cmd.command = CM_ETC;
+ − cmd.call_number = 0;
+ − break;
+ − case CHLD_MOD_Ccbs:
+ − TRACE_EVENT("CHLD_MOD_Ccbs"); // Marcus: CCBS: 14/11/2002
+ − cmd.command = CM_CCBS;
+ − cmd.call_number = 0;
+ − break;
+ − case CHLD_MOD_HldActDial:
+ − TRACE_EVENT("CHLD_MOD_HldActDial"); // Marcus: CCBS: 14/11/2002
+ − cmd_hold = MFW_CM_HOLD_AND_DIAL;
+ − /*
+ − * initialize for result event
+ − */
+ − cmd.command = CM_HOLD;
+ − /*cc_id = id;*//*a0393213 lint warnings:var not initialized soln:commented as it is not needed*/
+ − break;
+ − }
+ − }
+ −
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT: MMI-Framework (8417) MODULE: MFW_CM |
+ − | STATE : code ROUTINE: cm_check_mo_number |
+ − +--------------------------------------------------------------------+
+ −
+ −
+ − PURPOSE : start mobile originated call
+ −
+ − */
+ −
+ − T_MFW cm_check_mo_number(UBYTE *number)
+ − {
+ − UBYTE i;
+ − // Apr 14, 2005 REF: CRR 29991 xpradipg
+ − // local definition
+ − #ifdef FF_MMI_OPTIM
+ − UBYTE count = 0;
+ − UBYTE blackListNum[MFW_NUM_LEN];
+ − int8 file;
+ − #endif
+ −
+ − /* check whether a redialing exists */
+ − if (call_stat EQ REDIALING_CALL)
+ − {
+ − cm_stop_redialTim();
+ − rdl.redial_mode = CM_REDIAL_OUTGOING;
+ − cm_signal(E_CM_REDIAL, &rdl);
+ − }
+ −
+ −
+ − if (!number)
+ − return CM_OK;
+ − // Apr 14, 2005 REF: CRR 29991 xpradipg
+ − // the list is read from the file
+ − #ifdef FF_MMI_OPTIM
+ − if(( file = flash_MMI_blackList_open()) > 0)
+ − {
+ − if(flash_MMI_blackList_read(file,(U8*)&count,1,0) > 0)
+ − {
+ − for(i=0; i < (int)count; i++)
+ − {
+ − if(flash_MMI_blackList_read(file,(U8*)blackListNum,MFW_NUM_LEN,(i*MFW_NUM_LEN)+1) > 0)
+ − {
+ − if(!strcmp((char*)blackListNum, (char*)number))
+ − {
+ − flash_MMI_blackList_close(file);
+ − return CM_BLACKLIST;
+ − }
+ − }
+ − }
+ − }
+ − flash_MMI_blackList_close(file);
+ − }
+ − #else
+ − /* check whether this number is in blacklist */
+ − for (i=0; i<black_list.count; i++)
+ − {
+ − if (!strcmp((char *)black_list.number[i], (char *)number))
+ − return CM_BLACKLIST;
+ − }
+ − #endif
+ −
+ − /* check the type of this number */
+ − if (cm_check_emergency(number) EQ TRUE)
+ − call_type = MFW_ECC_CALL;
+ − else
+ − call_type = MFW_NORMAL_CALL;
+ −
+ − return CM_OK;
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT: MMI-Framework (8417) MODULE: MFW_CM |
+ − | STATE : code ROUTINE: cm_set_call_mode |
+ − +--------------------------------------------------------------------+
+ −
+ −
+ − PURPOSE : set call mode
+ −
+ − */
+ −
+ − void cm_set_call_mode(T_MFW_CM_CALL_TYPE mode)
+ − {
+ − switch (mode)
+ − {
+ − case VOICE_CALL:
+ − case AuxVOICE_CALL: /*MC, SPR 1026, assume line 2 is handled like line 1*/
+ − case DATA_CALL:
+ − case FAX_CALL:
+ − sAT_PlusCMOD(CMD_SRC_LCL, CMOD_MOD_Single);
+ − break;
+ − case VFD_VOICE:
+ − case VFD_DATA:
+ − sAT_PlusCMOD(CMD_SRC_LCL, CMOD_MOD_VoiceFlwdDat);
+ − break;
+ − case VAD_VOICE:
+ − case VAD_DATA:
+ − sAT_PlusCMOD(CMD_SRC_LCL, CMOD_MOD_VoiceDat);
+ − break;
+ − case VAF_VOICE:
+ − case VAF_FAX:
+ − sAT_PlusCMOD(CMD_SRC_LCL, CMOD_MOD_VoiceFax);
+ − break;
+ − default:
+ − break;
+ − }
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT: MMI-Framework (8417) MODULE: MFW_CM |
+ − | STATE : code ROUTINE: cm_mo_idx |
+ − +--------------------------------------------------------------------+
+ −
+ −
+ − PURPOSE : start mobile originated call
+ −
+ − */
+ −
+ − T_MFW cm_mo_idx(T_KSD_SEQPARAM *para, T_MFW_CM_CALL_TYPE mode)
+ − {
+ − T_MFW_PHB_LIST entries;
+ − T_MFW_PHB_ENTRY entry;
+ − T_ACI_RETURN aci_response; /*a0393213 compiler warnings removal - type of var changed*/
+ − T_MFW mfw_response; /*a0393213 compiler warnings removal - a var introduced*/
+ − //RM 19_09_2000
+ − #ifdef NO_ASCIIZ
+ − T_ACI_PB_TEXT mfwpbText;
+ − #endif
+ − //RM
+ −
+ − entries.entry = &entry;
+ −
+ − /* search this number from phonebook */
+ − if ((phb_read_entries(PHB_ADN, (UBYTE)para->dialIdx.index,
+ − MFW_PHB_INDEX, 1,
+ − &entries) EQ MFW_PHB_OK)
+ − AND ((int)entries.num_entries > 0))
+ − {
+ − mfw_response= cm_check_mo_number(entries.entry->number);
+ − if (mfw_response NEQ CM_OK)
+ − return mfw_response;
+ − }
+ − else
+ − {
+ − mfw_response = cm_check_mo_number(0);
+ − if (mfw_response NEQ CM_OK)
+ − return mfw_response;
+ − }
+ −
+ − /* set the outgoing call status */
+ − call_stat = OUTGOING_CALL;
+ − redial_count = 0;
+ − cc_stat.type = OUTGOING_CALL;
+ −
+ − cm_set_call_mode(mode);
+ −
+ − //RM 19_09_2000 instead change in ksd structure T_KSD_SEQPARAM etc., later to change !!!!
+ − #ifdef NO_ASCIIZ
+ − if(para->dialIdx.str NEQ NULL)
+ − {
+ − mfwpbText.cs = CS_GsmDef;
+ − mfwpbText.len = strlen(para->dialIdx.str);
+ − memcpy(mfwpbText.data,para->dialIdx.str,mfwpbText.len);
+ − }
+ − else
+ − {
+ − mfwpbText.cs = CS_NotPresent;
+ − mfwpbText.len = 0;
+ − }
+ − aci_response= sAT_Dm(CMD_SRC_LCL, &mfwpbText,
+ − para->dialIdx.mem, para->dialIdx.index,
+ − para->dialIdx.clirOvrd, para->dialIdx.cugCtrl,
+ − para->dialIdx.callType);
+ − #else
+ − aci_response= sAT_Dm(CMD_SRC_LCL, para->dialIdx.str,
+ − para->dialIdx.mem, para->dialIdx.index,
+ − para->dialIdx.clirOvrd, para->dialIdx.cugCtrl,
+ − para->dialIdx.callType);
+ − #endif
+ −
+ − if ((aci_response== AT_FAIL) OR (aci_response== AT_BUSY))
+ − {
+ − call_stat = MFW_CALL_FREE;
+ − return cm_error_code(AT_CMD_D);
+ − }
+ −
+ − return CM_OK;
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT: MMI-Framework (8417) MODULE: MFW_CM |
+ − | STATE : code ROUTINE: cm_mo_call |
+ − +--------------------------------------------------------------------+
+ −
+ −
+ − PURPOSE : start mobile originated call
+ −
+ − */
+ −
+ − T_MFW cm_mo_call(UBYTE *number, T_MFW_CM_CALL_TYPE type)
+ − {
+ − CHAR * rest;
+ − T_KSD_SEQPARAM para;
+ − T_MFW_SS_RETURN typ;
+ − T_MFW_SS_RETURN new_typ;
+ − CHAR * string;
+ − UBYTE cm_grp = 0; // RAVI
+ − /*a0393213 compiler warning removal -- removed clir_status def*/
+ − UBYTE colr_status;
+ − UBYTE prefix;
+ − SHORT id;
+ − T_ACI_RETURN res,aci_result;//aci_result was added to fix the bug MMI-SPR 16545
+ − // Sep 01, 2006 REF:OMAPS00090555 x0039928
+ − // Fix: If flag FF_MMI_PB_OPTIM is defined then allocate memory for buf, phone and num_save variables
+ − // through heap instead of stack.
+ − #ifdef FF_MMI_PB_OPTIM
+ − char * buf = (char*)mfwAlloc(80);
+ − char * phone = (char*)mfwAlloc(MFW_NUM_LEN);
+ − char * num_save = (char*)mfwAlloc(MFW_STRING_LEN);
+ − #else
+ − char buf[80];
+ − UBYTE phone[MFW_NUM_LEN];
+ − UBYTE num_save[MFW_STRING_LEN];
+ − #endif
+ −
+ − TRACE_FUNCTION ("cm_mo_call()");
+ −
+ − // Sep 01, 2006 REF:OMAPS00090555 x0039928
+ − #ifdef FF_MMI_PB_OPTIM
+ − memset(buf,0,80);
+ − memset(phone,0,MFW_NUM_LEN);
+ − memset(num_save,0,MFW_STRING_LEN);
+ − strncpy(num_save, (char *)number, MFW_STRING_LEN-1);
+ − #else
+ − strncpy((char *)num_save, (char *)number, MFW_STRING_LEN-1);
+ − num_save[MFW_STRING_LEN-1] = 0;
+ − #endif
+ − // Oct 10, 2006 DR: OMAPS00093720 x0039928
+ − // Fix: Set ton to MFW_TON_INTERNATIONAL
+ − if(number[0] EQ '+')
+ − {
+ − out_call.ton = MFW_TON_INTERNATIONAL;
+ − }
+ − else
+ − {
+ − out_call.ton = MFW_TON_UNKNOWN;
+ − }
+ − /* check the type of number (key sequence), current no function */
+ − typ = ss_decode(number, &rest, ¶);
+ − TRACE_EVENT_P1("Type: %d", typ);
+ − if (typ == MFW_SS_DIAL)
+ − {
+ − mfwStrncpy((char *)phone, para.dial.number, MFW_NUM_LEN);
+ −
+ − }
+ −
+ − if (typ == MFW_SS_HOLD)
+ − {
+ − cm_set_cmd_status(para.chld.mode, para.chld.call);
+ −
+ − // Feb 27, 2006 REF:DR OMAPS00067884 x0039928
+ − // Fix : sAT_PercentCHLD() is called if the mode > CHLD_MOD_RelDialCall
+ − if(para.chld.mode > CHLD_MOD_RelDialCall)
+ − aci_result = sAT_PercentCHLD(CMD_SRC_LCL, para.chld.mode, para.chld.call);
+ − else
+ − aci_result = sAT_PlusCHLD(CMD_SRC_LCL, para.chld.mode, para.chld.call);
+ −
+ − // Apr 26, 2004 REF: CRR 16545 Ajith K P
+ − // If sAT_PlusCHLD() Fails, Send the user entered string as USSD to network using sAT-Dn().
+ − // So if its not failed just return CM_CTRL_STR, otherwise call sAT_Dn().
+ − if ( (aci_result EQ AT_CMPL ) OR (aci_result EQ AT_EXCT ) OR (aci_result EQ AT_BUSY ))
+ − {
+ − // Sep 01, 2006 REF:OMAPS00090555 x0039928
+ − // Fix: Free the memory allocated for buf, phone and num_save variables
+ − #ifdef FF_MMI_PB_OPTIM
+ − if(buf)
+ − mfwFree((U8*) buf,80);
+ − if(phone)
+ − mfwFree((U8*) phone,MFW_NUM_LEN);
+ − if(num_save)
+ − mfwFree((U8*) num_save,MFW_STRING_LEN);
+ − #endif
+ − return CM_CTRL_STR;
+ − }
+ − }
+ − //MC 11.04.02
+ − if (typ == MFW_SS_ECT)
+ − {
+ − cm_set_cmd_status(para.chld.mode, para.chld.call);
+ − if (sAT_PlusCHLD(CMD_SRC_LCL, CHLD_MOD_Ect, 0) != AT_EXCT)
+ − {
+ − //Aug 10, 2005 REF: MMI-SPR-30099 x0018858
+ − //commented this return value.
+ − // return CM_ERROR;
+ − }
+ − else
+ − {
+ − // Sep 01, 2006 REF:OMAPS00090555 x0039928
+ − // Fix: Free the memory allocated for buf,phone and num_save variables
+ − #ifdef FF_MMI_PB_OPTIM
+ − if(buf)
+ − mfwFree((U8*) buf,80);
+ − if(phone)
+ − mfwFree((U8*) phone,MFW_NUM_LEN);
+ − if(num_save)
+ − mfwFree((U8*) num_save,MFW_STRING_LEN);
+ − #endif
+ − return CM_CTRL_STR;
+ − }
+ − }
+ − //MC
+ −
+ − if (typ == MFW_SS_DIAL_IDX)
+ − {
+ − // Sep 01, 2006 REF:OMAPS00090555 x0039928
+ − // Fix: Free the memory allocated for buf,phone and num_save variables
+ − #ifdef FF_MMI_PB_OPTIM
+ − if(buf)
+ − mfwFree((U8*) buf,80);
+ − if(phone)
+ − mfwFree((U8*) phone,MFW_NUM_LEN);
+ − if(num_save)
+ − mfwFree((U8*) num_save,MFW_STRING_LEN);
+ − #endif
+ − return cm_mo_idx(¶, type);
+ − }
+ −
+ − switch (typ)
+ − {
+ −
+ − //NM
+ − case MFW_SS_CLIR: //jgg wrong not CM_OK should be CM_SS, however cm_grp not used after funtion callnumber called
+ −
+ − case MFW_SS_DIAL:
+ − cm_grp = CM_OK;
+ − break;
+ −
+ − case MFW_SS_DTMF:
+ − case MFW_SS_CF:
+ − case MFW_SS_CB:
+ − case MFW_SS_CLIP:
+ − case MFW_SS_COLR:
+ − case MFW_SS_COLP:
+ − case MFW_SS_WAIT:
+ − case MFW_SS_HOLD:
+ − case MFW_SS_CCBS:
+ − case MFW_SS_REG_PW:
+ − //Aug 10, 2005 REF: MMI-SPR-30099 x0018858
+ − //Added this case statement.
+ − case MFW_SS_ECT:
+ − cm_grp = CM_SS;
+ − break;
+ −
+ − case MFW_SS_USSD:
+ − cm_grp = CM_USSD;
+ − break;
+ −
+ − case MFW_SS_SIM_LOCK:
+ − case MFW_SS_SIM_REG_PW:
+ − case MFW_SS_SIM_UNBLCK_PIN:
+ − cm_grp = CM_SIM;
+ − break;
+ −
+ − case MFW_SS_MMI:
+ − cm_grp = CM_MMI;
+ − break;
+ −
+ − /* SPR#1352 - SH - TTY
+ − * If an SS string has been entered, temporarily enable or disable
+ − * TTY for this call only. */
+ −
+ − case MFW_SS_TTY_NEXTCALL_ON:
+ − case MFW_SS_TTY_NEXTCALL_OFF:
+ − {
+ − if (typ==MFW_SS_TTY_NEXTCALL_ON)
+ − {
+ − cm_tty_enable(TRUE);
+ − }
+ − else
+ − {
+ − cm_tty_enable(FALSE);
+ − }
+ − // Sep 01, 2006 REF:OMAPS00090555 x0039928
+ − #ifdef FF_MMI_PB_OPTIM
+ − strcpy(num_save, (num_save + 4)); /* Ignore SS string when dialling */
+ − #else
+ − strcpy((char *)num_save, (char *)&num_save[4]); /* Ignore SS string when dialling */
+ − #endif
+ − rest = (char *)&number[4]; /* Look at number following SS string */
+ − }
+ − break;
+ − /* SH end */
+ −
+ − default:
+ − // Sep 01, 2006 REF:OMAPS00090555 x0039928
+ − // Fix: Free the memory allocated for buf,phone and num_save variables
+ − #ifdef FF_MMI_PB_OPTIM
+ − if(buf)
+ − mfwFree((U8*) buf,80);
+ − if(phone)
+ − mfwFree((U8*) phone,MFW_NUM_LEN);
+ − if(num_save)
+ − mfwFree((U8*) num_save,MFW_STRING_LEN);
+ − #endif
+ − return CM_ERROR;
+ − }
+ −
+ − string = rest;
+ −
+ − colr_status = 0;
+ − // Sep 01, 2006 REF:OMAPS00090555 x0039928
+ − #ifndef FF_MMI_PB_OPTIM
+ − buf[0] = '\0';
+ − #endif
+ − cc_stat.prefix[0] = '\0';
+ − while(strlen(string))
+ − {
+ − TRACE_EVENT("In the while");
+ − new_typ = ss_decode((UBYTE *)string, &rest, ¶);
+ − // /*
+ − if (new_typ == MFW_SS_CLIR)
+ − {
+ −
+ − if (para.Clir.mode == CLIR_MOD_Supp)
+ − {
+ − strcat((char *)cc_stat.prefix, "*31#");
+ − TRACE_EVENT ("CLIR_MOD_Supp");
+ − }
+ − if (para.Clir.mode == CLIR_MOD_Invoc)
+ − {
+ − strcat((char *)cc_stat.prefix, "#31#");
+ − TRACE_EVENT ("CLIR_MOD_Invoc");
+ − }
+ − }
+ − if (new_typ == MFW_SS_COLR)
+ − colr_status = 1;
+ − if (new_typ == MFW_SS_DIAL)
+ − {
+ − TRACE_EVENT("It's a dial");
+ − /* SPR#1352 - SH - only copy string to dial, not whole string */
+ − if (typ==MFW_SS_TTY_NEXTCALL_ON || typ==MFW_SS_TTY_NEXTCALL_OFF)
+ − {
+ − typ = new_typ;
+ − TRACE_EVENT_P1("phone now holds: %s", phone);
+ − }
+ − else
+ − /* end SH */
+ − {
+ − typ = new_typ;
+ − mfwStrncpy((char *)phone, para.dial.number, MFW_NUM_LEN);
+ − }
+ − }
+ − string = rest;
+ − }
+ −
+ − if (!colr_status AND (typ == MFW_SS_DIAL))
+ − {
+ − prefix = cli_prefix & 0xc0;
+ − if (prefix == 0x80)
+ − {
+ − strcat(buf, "*77#");
+ − strcat((char *)cc_stat.prefix, "*77#");
+ − }
+ − if (prefix == 0xc0)
+ − {
+ − strcat(buf, "#77#");
+ − strcat((char *)cc_stat.prefix, "#77#");
+ − }
+ − }
+ −
+ − if (typ == MFW_SS_DIAL)
+ − {
+ − res = (T_ACI_RETURN)cm_check_mo_number((UBYTE*)phone); /*a0393213 lint warnings removal - typecast done*/
+ − if ( res != CM_OK)
+ − {
+ − // Sep 01, 2006 REF:OMAPS00090555 x0039928
+ − // Fix: Free the memory allocated for buf,phone and num_save variables
+ − #ifdef FF_MMI_PB_OPTIM
+ − if(buf)
+ − mfwFree((U8*) buf,80);
+ − if(phone)
+ − mfwFree((U8*) phone,MFW_NUM_LEN);
+ − if(num_save)
+ − mfwFree((U8*) num_save,MFW_STRING_LEN);
+ − #endif
+ − return res;
+ − }
+ −
+ − /* set the outgoing call status */
+ − call_stat = OUTGOING_CALL;
+ − redial_count = 0;
+ − cc_stat.type = OUTGOING_CALL;
+ − cm_grp = CM_OK;
+ − currConnecting = 1;
+ − cm_set_call_mode(type);
+ − }
+ −
+ − strcat(buf, (char *)num_save);
+ − if (cm_search_callId(CAL_STAT_Active, &id) EQ CM_OK)
+ − {
+ − /*
+ − * at least one active, this must be put on hold
+ − * by ACI first, then dial
+ − */
+ − cm_set_cmd_status(CHLD_MOD_HldActDial, "");
+ − #ifdef MMI_LINT_WARNING_REMOVAL /*a0393213 lint warnings removal*/
+ − cc_id = id;
+ − #endif
+ − }
+ − if (type == DATA_CALL)
+ − para.dial.callType = D_TOC_Data;
+ −
+ − // Apr 22, 2004 REF: CRR MMI-SPR-16873 Rashmi C N(Sasken)
+ − // Using the CLIR status maintained in the flash, while making a call
+ − if (!FFS_flashData.CLIR)
+ − {
+ − res = sAT_Dn(CMD_SRC_LCL, buf, D_CLIR_OVRD_Supp, D_CUG_CTRL_NotPresent, para.dial.callType); /*a0393213 compiler warning removal-- -1 changed to D_CUG_CTRL_NotPresent*/
+ − }
+ − else
+ − {
+ − res = sAT_Dn(CMD_SRC_LCL, buf, D_CLIR_OVRD_Invoc, D_CUG_CTRL_NotPresent, para.dial.callType); /*a0393213 compiler warning removal-- -1 changed to D_CUG_CTRL_NotPresent*/
+ − }
+ −
+ − if ((res == AT_FAIL) OR (res == AT_BUSY))
+ − {
+ − // Sep 01, 2006 REF:OMAPS00090555 x0039928
+ − // Fix: Free the memory allocated for buf,phone and num_save variables
+ − #ifdef FF_MMI_PB_OPTIM
+ − if(buf)
+ − mfwFree((U8*) buf,80);
+ − if(phone)
+ − mfwFree((U8*) phone,MFW_NUM_LEN);
+ − if(num_save)
+ − mfwFree((U8*) num_save,MFW_STRING_LEN);
+ − #endif
+ − if (typ == MFW_SS_CLIP)
+ − return CM_CLI;
+ −
+ − call_stat = MFW_CALL_FREE;
+ − return cm_error_code(AT_CMD_D);
+ − }
+ − if (res == AT_CMPL)
+ − {
+ − switch (typ)
+ − {
+ − case MFW_SS_CLIR:
+ − case MFW_SS_CLIP:
+ − case MFW_SS_COLR:
+ − case MFW_SS_COLP:
+ − // Sep 01, 2006 REF:OMAPS00090555 x0039928
+ − // Fix: Free the memory allocated for buf,phone and num_save variables
+ − #ifdef FF_MMI_PB_OPTIM
+ − if(buf)
+ − mfwFree((U8*) buf,80);
+ − if(phone)
+ − mfwFree((U8*) phone,MFW_NUM_LEN);
+ − if(num_save)
+ − mfwFree((U8*) num_save,MFW_STRING_LEN);
+ − #endif
+ − return CM_CLI;
+ − default:
+ − break;
+ − }
+ − }
+ − // Sep 01, 2006 REF:OMAPS00090555 x0039928
+ − // Fix: Free the memory allocated for buf,phone and num_save variables
+ − #ifdef FF_MMI_PB_OPTIM
+ − if(buf)
+ − mfwFree((U8*) buf,80);
+ − if(phone)
+ − mfwFree((U8*) phone,MFW_NUM_LEN);
+ − if(num_save)
+ − mfwFree((U8*) num_save,MFW_STRING_LEN);
+ − #endif
+ − return cm_grp;
+ − }
+ −
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT: GSM-MFW (8417) MODULE: MFW_CB |
+ − | STATE : code ROUTINE: rAT_PlusCRING_OFF |
+ − +--------------------------------------------------------------------+
+ −
+ −
+ − PURPOSE : Alert Off indication from ACI
+ −
+ − */
+ −
+ − #ifdef FF_2TO1_PS
+ − GLOBAL void rAT_PlusCRING_OFF ( SHORT cId )
+ − {
+ − T_MFW_CM_CALL_STAT stat;
+ − UBYTE ton;
+ − T_CAUSE_ps_cause report; /* Marcus: Extended error reporting: 12/11/2002 */
+ − UBYTE mode;
+ −
+ − TRACE_FUNCTION ("rAT_PlusCRING_OFF()");
+ −
+ − if (cm_search_callStat(cId, &stat, &ton, &mode) == CM_OK)
+ − {
+ − call_stat = MFW_CALL_FREE;
+ − call_type = MFW_CALL_FREE;
+ −
+ − //TISH: if there is inband tone, it should not disconnect the call. OMAPS00104986
+ − if (stat == CALL_DEACTIVE && !cm_cpi.inband)
+ − // if (stat == CALL_DEACTIVE)
+ − {
+ − dis_connect.call_number = cId;
+ −
+ − qAT_PlusCEER( CMD_SRC_LCL, &report);
+ − /* Marcus: Extended error reporting: 12/11/2002: Start */
+ −
+ − // TRACE_EVENT_P1("qAT_PlusCEER(%04X)", report);
+ − if (report.ctrl_value != CAUSE_is_from_nwcc)
+ − {
+ − /* Treat Condat defined cause values as if no cause given */
+ − dis_connect.cause = NOT_PRESENT_8BIT;
+ − }
+ − else
+ − {
+ − /* Standards defined cause value is given */
+ − dis_connect.cause = report.value.nwcc_cause;
+ − }
+ − TRACE_EVENT_P1("dis_connect.cause = %02X)", dis_connect.cause);
+ − /* Marcus: Extended error reporting: 12/11/2002: End */
+ − cm_signal(E_CM_DISCONNECT, &dis_connect);
+ − return;
+ − }
+ − cm_signal(E_CM_RING_OFF, 0);
+ − }
+ − }
+ − #else
+ − GLOBAL void rAT_PlusCRING_OFF ( SHORT cId )
+ − {
+ − T_MFW_CM_CALL_STAT stat;
+ − UBYTE ton;
+ − USHORT report; /* Marcus: Extended error reporting: 12/11/2002 */
+ − UBYTE mode;
+ −
+ − TRACE_FUNCTION ("rAT_PlusCRING_OFF()");
+ −
+ − if (cm_search_callStat(cId, &stat, &ton, &mode) == CM_OK)
+ − {
+ − call_stat = MFW_CALL_FREE;
+ − call_type = MFW_CALL_FREE;
+ −
+ − //TISH: if there is inband tone, it should not disconnect the call. OMAPS00104986
+ − if (stat == CALL_DEACTIVE && !cm_cpi.inband)
+ − // if (stat == CALL_DEACTIVE)
+ − {
+ − dis_connect.call_number = cId;
+ −
+ − qAT_PlusCEER( CMD_SRC_LCL, &report);
+ − /* Marcus: Extended error reporting: 12/11/2002: Start */
+ − TRACE_EVENT_P1("qAT_PlusCEER(%04X)", report);
+ − if (GET_CAUSE_DEFBY(report) == DEFBY_CONDAT)
+ − {
+ − /* Treat Condat defined cause values as if no cause given */
+ − dis_connect.cause = NOT_PRESENT_8BIT;
+ − }
+ − else
+ − {
+ − /* Standards defined cause value is given */
+ − dis_connect.cause = GET_CAUSE_VALUE(report);
+ − }
+ − TRACE_EVENT_P1("dis_connect.cause = %02X)", dis_connect.cause);
+ − /* Marcus: Extended error reporting: 12/11/2002: End */
+ − cm_signal(E_CM_DISCONNECT, &dis_connect);
+ − return;
+ − }
+ − cm_signal(E_CM_RING_OFF, 0);
+ − }
+ − }
+ − #endif
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : MMI-Framework (8417) MODULE : MFW_CM |
+ − | STATE : code ROUTINE : rAT_PlusCRING |
+ − +--------------------------------------------------------------------+
+ −
+ −
+ − PURPOSE : Alert indication from ACI
+ −
+ − */
+ − /*a0393213 warnings removal - second and third parameter changed as a result of ACI enum change*/
+ − void rAT_PlusCRING(T_ACI_CRING_MOD mode,
+ − T_ACI_CRING_SERV_TYP type1,
+ − T_ACI_CRING_SERV_TYP type2)
+ − {
+ − SHORT call_number;
+ −
+ − TRACE_FUNCTION ("rAT_PlusCRING()");
+ −
+ − in_call.result = Present;
+ −
+ − /* search the call identifier */
+ − if (cm_search_callId(CAL_STAT_Wait, &call_number) == CM_OK)
+ − in_call.call_number = call_number;
+ − else
+ − in_call.call_number = 0;
+ −
+ − /* If redial is active, it must be stoped. */
+ − if (call_stat == REDIALING_CALL)
+ − {
+ − cm_stop_redialTim();
+ − rdl.redial_mode = CM_REDIAL_INCOMING;
+ − cm_signal(E_CM_REDIAL, &rdl);
+ − }
+ −
+ − if (mode EQ CRING_MOD_Direct)
+ − {
+ − switch (type1)
+ − {
+ − /* Voice call */
+ − case CRING_SERV_TYP_Voice:
+ − if (type2 EQ CRING_SERV_TYP_NotPresent)
+ − {
+ − in_call.type = VOICE_CALL;
+ − cm_set_call_mode(VOICE_CALL);
+ − }
+ − else
+ − {
+ − switch (type2)
+ − {
+ − case CRING_SERV_TYP_Sync:
+ − case CRING_SERV_TYP_Async:
+ − case CRING_SERV_TYP_RelSync:
+ − case CRING_SERV_TYP_RelAsync:
+ − in_call.type = VFD_VOICE;
+ − cm_bc_parameter(type2);
+ − cm_set_call_mode(VFD_VOICE);
+ − break;
+ − /*MC, SPR 1026, check for line1 and line2*/
+ − case CRING_SERV_TYP_Voice:
+ − in_call.type = VOICE_CALL;
+ − cm_set_call_mode(VOICE_CALL);
+ − break;
+ − case CRING_SERV_TYP_AuxVoice:
+ − cm_set_call_mode(AuxVOICE_CALL);
+ − in_call.type = AuxVOICE_CALL;
+ − break;
+ − /*MC, end*/
+ − default:
+ − in_call.type = VOICE_CALL;
+ − cm_set_call_mode(VOICE_CALL);
+ − break;
+ − }
+ − }
+ − break;
+ − /*MC, SPR 1026, Added case of Type1=CRING_SERV_TYP_AuxVoice*/
+ − /*assuming line 2 is handled like line 1*/
+ − case CRING_SERV_TYP_AuxVoice:
+ − if (type2 EQ CRING_SERV_TYP_NotPresent)
+ − {
+ − in_call.type = AuxVOICE_CALL;
+ − cm_set_call_mode(AuxVOICE_CALL);
+ − }
+ − else
+ − {
+ − switch (type2)
+ − {
+ − case CRING_SERV_TYP_Sync:
+ − case CRING_SERV_TYP_Async:
+ − case CRING_SERV_TYP_RelSync:
+ − case CRING_SERV_TYP_RelAsync:
+ − in_call.type = VFD_VOICE;
+ − cm_bc_parameter(type2);
+ − cm_set_call_mode(VFD_VOICE);
+ − break;
+ − case CRING_SERV_TYP_Voice:
+ − in_call.type = VOICE_CALL;
+ − cm_set_call_mode(VOICE_CALL);
+ − break;
+ − case CRING_SERV_TYP_AuxVoice:
+ − cm_set_call_mode(AuxVOICE_CALL);
+ − in_call.type = AuxVOICE_CALL;
+ − break;
+ − default:
+ − in_call.type = VOICE_CALL;
+ − cm_set_call_mode(VOICE_CALL);
+ − break;
+ − }
+ − }
+ − break;
+ − /*MC, end*/
+ − /* Data call */
+ − case CRING_SERV_TYP_Sync:
+ − case CRING_SERV_TYP_Async:
+ − case CRING_SERV_TYP_RelSync:
+ − case CRING_SERV_TYP_RelAsync:
+ − in_call.type = DATA_CALL;
+ − cm_bc_parameter(type1);
+ − cm_set_call_mode(DATA_CALL);
+ − break;
+ −
+ − case CRING_SERV_TYP_Fax:
+ − in_call.type = FAX_CALL;
+ − in_call.bc1.conn_elem = Transparent;
+ − cm_set_call_mode(FAX_CALL);
+ − break;
+ −
+ − default:
+ − in_call.result = NotPresent;
+ − break;
+ − }
+ − call_stat = INCOMING_CALL;
+ − }
+ −
+ − if (mode EQ CRING_MOD_Alternate)
+ − {
+ − cm_build_callType(type1, type2);
+ − cm_bc_parameter(type1);
+ − cm_bc_parameter(type2);
+ − cm_set_call_mode(in_call.type);
+ − }
+ − }
+ −
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT: MMI-Framework (8417) MODULE: MFW_CM |
+ − | STATE : code ROUTINE: rAT_PlusCLIP |
+ − +--------------------------------------------------------------------+
+ −
+ −
+ − PURPOSE : The calling line identification for an incomming call.
+ −
+ − */
+ −
+ − #ifdef NO_ASCIIZ
+ − void rAT_PlusCLIP(T_ACI_CLIP_STAT stat,
+ − CHAR * number,
+ − T_ACI_TOA * type,
+ − U8 validity,
+ − CHAR * subaddr,
+ − T_ACI_TOS * satype,
+ − T_ACI_PB_TEXT * alpha)
+ − {
+ − int flag;
+ −
+ − TRACE_FUNCTION ("rAT_PlusCLIP()");
+ −
+ − flag = 0;
+ −
+ − if (number != NULL)
+ − {
+ − mfwStrncpy((char *)in_call.number, (char *)number, MFW_NUM_LEN);
+ − in_call.ton = phb_cvtTon(type->ton);
+ − flag = 1;
+ − }
+ − else
+ − memset(in_call.number, '\0', MFW_NUM_LEN);
+ −
+ − if (alpha != NULL)
+ − {
+ − in_call.name.len = alpha->len;
+ − if (alpha->len)
+ − {
+ − memcpy(in_call.name.data,
+ − alpha->data,
+ − alpha->len);
+ − flag = 1;
+ − }
+ − }
+ − else
+ − in_call.name.len = 0;
+ −
+ −
+ − if (subaddr != NULL)
+ − {
+ − mfwStrncpy((char *)in_call.subaddr, (char *)subaddr, MFW_SUBADR_LEN);
+ − flag = 1;
+ − }
+ − else
+ − memset(in_call.subaddr, '\0', MFW_SUBADR_LEN);
+ −
+ − if (flag == 1)
+ − in_call.result = Present;
+ − else
+ − in_call.result = 0;
+ −
+ − cm_signal(E_CM_CW, &in_call);
+ − }
+ −
+ − #else
+ −
+ − void rAT_PlusCLIP(T_ACI_CLIP_STAT stat,
+ − CHAR * number,
+ − T_ACI_TOA * type,
+ − U8 validity,
+ − CHAR * subaddr,
+ − T_ACI_TOS * satype,
+ − CHAR * alpha)
+ − {
+ − int flag;
+ −
+ − TRACE_FUNCTION ("rAT_PlusCLIP()");
+ −
+ − flag = 0;
+ − // in_call.result = 0;
+ −
+ − if (number != NULL)
+ − {
+ − mfwStrncpy((char *)in_call.number, (char *)number, MFW_NUM_LEN);
+ − in_call.ton = phb_cvtTon(type->ton);
+ − flag = 1;
+ − }
+ − else
+ − memset(in_call.number, '\0', MFW_NUM_LEN);
+ −
+ − if (alpha != NULL)
+ − {
+ − mfwStrncpy((char *)in_call.name, (char *)alpha, MFW_TAG_LEN);
+ − flag = 1;
+ − }
+ − else
+ − memset(in_call.name, '\0', MFW_TAG_LEN);
+ −
+ − if (subaddr != NULL)
+ − {
+ − mfwStrncpy((char *)in_call.subaddr, (char *)subaddr, MFW_SUBADR_LEN);
+ − flag = 1;
+ − }
+ − else
+ − memset(in_call.subaddr, '\0', MFW_SUBADR_LEN);
+ −
+ − if (flag == 1)
+ − in_call.result = Present;
+ − else
+ − in_call.result = 0;
+ −
+ − cm_signal(E_CM_CW, &in_call);
+ − }
+ − #endif
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : GSM-MFW (8417) MODULE : MFW_CM |
+ − | STATE : code ROUTINE : rAT_PlusCOLP |
+ − +--------------------------------------------------------------------+
+ −
+ −
+ − PURPOSE : Connected line presentation indication from ACI
+ −
+ − */
+ −
+ − #ifdef NO_ASCIIZ
+ − GLOBAL void rAT_PlusCOLP ( T_ACI_COLP_STAT stat,
+ − CHAR* number,
+ − T_ACI_TOA* type,
+ − CHAR* subaddr,
+ − T_ACI_TOS* satype,
+ − T_ACI_PB_TEXT* alpha)
+ − {
+ −
+ − TRACE_FUNCTION ("rAT_PlusCOLP()");
+ −
+ − if (number != NULL)
+ − {
+ − mfwStrncpy((char *)out_call.number, (char *)number, MFW_NUM_LEN);
+ − out_call.ton = phb_cvtTon(type->ton);
+ − }
+ − else
+ − memset(out_call.number, '\0', MFW_NUM_LEN);
+ −
+ − /*NM, p001 */
+ − if(alpha != NULL)
+ − /*NM, p001 end */
+ − {
+ − out_call.name.len = MINIMUM(alpha->len, MFW_TAG_LEN);
+ − if (alpha->len)
+ − memcpy(out_call.name.data,
+ − alpha->data,
+ − alpha->len);
+ − }
+ −
+ − if (subaddr != NULL)
+ − mfwStrncpy((char *)out_call.subaddr, (char *)subaddr, MFW_SUBADR_LEN);
+ − else
+ − memset(out_call.subaddr, '\0', MFW_SUBADR_LEN);
+ −
+ − if (number != NULL)
+ − cm_signal(E_CM_COLP, &out_call);
+ − }
+ −
+ − #else
+ −
+ − GLOBAL void rAT_PlusCOLP ( T_ACI_COLP_STAT stat,
+ − CHAR* number,
+ − T_ACI_TOA* type,
+ − CHAR* subaddr,
+ − T_ACI_TOS* satype,
+ − CHAR* alpha)
+ − {
+ − TRACE_FUNCTION ("rAT_PlusCOLP()");
+ −
+ − // patch PMA 15 06 99 from Andreas
+ − // if (stat == -1)
+ − // return;
+ −
+ − if (number != NULL)
+ − {
+ − mfwStrncpy((char *)out_call.number, (char *)number, MFW_NUM_LEN);
+ − out_call.ton = phb_cvtTon(type->ton);
+ − }
+ − else
+ − memset(out_call.number, '\0', MFW_NUM_LEN);
+ −
+ − if (alpha != NULL)
+ − mfwStrncpy((char *)out_call.name, (char *)alpha, MFW_TAG_LEN);
+ − else
+ − memset(out_call.name, '\0', MFW_TAG_LEN);
+ −
+ − if (subaddr != NULL)
+ − mfwStrncpy((char *)out_call.subaddr, (char *)subaddr, MFW_SUBADR_LEN);
+ − else
+ − memset(out_call.subaddr, '\0', MFW_SUBADR_LEN);
+ −
+ − // patch PMA 15 06 99 from Andreas
+ − if (number != NULL)
+ − cm_signal(E_CM_COLP, &out_call);
+ − }
+ − #endif
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : GSM-MFW (8417) MODULE : MFW_CM |
+ − | STATE : code ROUTINE : rAT_PlusCCWA |
+ − +--------------------------------------------------------------------+
+ −
+ −
+ − PURPOSE : Connected line presentation indication from ACI
+ −
+ − */
+ −
+ − #ifdef NO_ASCIIZ
+ −
+ − GLOBAL void rAT_PlusCCWA ( T_ACI_CLSSTAT * clsStatLst,
+ − CHAR * number,
+ − T_ACI_TOA * type,
+ − U8 validity,
+ − T_ACI_CLASS call_class,
+ − T_ACI_PB_TEXT * alpha)
+ − {
+ − SHORT call_number;
+ −
+ − TRACE_FUNCTION("rAT_PlusCCWA()");
+ −
+ − in_call.result = NotPresent;
+ − if (clsStatLst == 0)
+ − {
+ − if (number != NULL)
+ − {
+ − mfwStrncpy((char *)in_call.number, (char *)number, MFW_NUM_LEN);
+ − in_call.ton = phb_cvtTon(type->ton);
+ − }
+ − else
+ − memset(in_call.number, '\0', MFW_NUM_LEN);
+ −
+ − if (alpha != NULL)
+ − in_call.name.len = alpha->len;
+ − else
+ − in_call.name.len = 0;
+ −
+ − if (in_call.name.len && alpha!=NULL) /*a0393213 lint warning removal - check for alpha done*/
+ − {
+ − memcpy(in_call.name.data,
+ − alpha->data,
+ − alpha->len);
+ − }
+ −
+ − in_call.type = cm_callTyp_cvt(call_class);
+ −
+ − if (number != 0 || in_call.name.len != 0 || in_call.type != NONE_TYPE)
+ − in_call.result = Present;
+ −
+ − cm_search_callId(CAL_STAT_Wait, &call_number);
+ − in_call.call_number = call_number;
+ −
+ − cm_signal(E_CM_CW, &in_call);
+ − }
+ − }
+ −
+ − #else
+ −
+ − GLOBAL void rAT_PlusCCWA ( T_ACI_CLSSTAT * clsStatLst,
+ − CHAR * number,
+ − T_ACI_TOA * type,
+ − U8 validity,
+ − T_ACI_CLASS call_class,
+ − CHAR * alpha)
+ − {
+ − SHORT call_number;
+ −
+ − in_call.result = NotPresent;
+ − if (clsStatLst == 0)
+ − {
+ − if (number != NULL)
+ − {
+ − mfwStrncpy((char *)in_call.number, (char *)number, MFW_NUM_LEN);
+ − in_call.ton = phb_cvtTon(type->ton);
+ − }
+ − else
+ − memset(in_call.number, '\0', MFW_NUM_LEN);
+ −
+ − if (alpha != NULL)
+ − mfwStrncpy((char *)in_call.name, (char *)alpha, MFW_TAG_LEN);
+ − else
+ − memset(in_call.name, '\0', MFW_TAG_LEN);
+ −
+ − in_call.type = cm_callTyp_cvt(call_class);
+ −
+ − if (number != 0 || alpha != 0 || in_call.type != NONE_TYPE)
+ − in_call.result = Present;
+ −
+ − cm_search_callId(CAL_STAT_Wait, &call_number);
+ − in_call.call_number = call_number;
+ −
+ − cm_signal(E_CM_CW, &in_call);
+ − }
+ − }
+ − #endif
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : MMI-Framework (8417) MODULE : MFW_CM |
+ − | STATE : code ROUTINE : cm_mt_reject |
+ − +--------------------------------------------------------------------+
+ −
+ −
+ − PURPOSE : Reject the incoming call.
+ −
+ − */
+ −
+ − void cm_mt_reject()
+ − {
+ − TRACE_FUNCTION ("cm_mt_reject()");
+ −
+ − if (currAccepting)
+ − {
+ − currAccepting = 0; /* ES!! 210999 */
+ − sAT_Abort(CMD_SRC_LCL, AT_CMD_A);
+ − return;
+ − }
+ −
+ − cmd_hold = MFW_CM_MT_REJECT;
+ − cm_search_callId(CAL_STAT_Wait, &dis_connect.call_number);
+ − sAT_PlusCHLD(CMD_SRC_LCL, CHLD_MOD_RelHldOrUdub, 0);
+ − }
+ −
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT: MMI-Framework (8417) MODULE: MFW_CM |
+ − | STATE : code ROUTINE: cm_mt_accept |
+ − +--------------------------------------------------------------------+
+ −
+ −
+ − PURPOSE : Accept the incoming call. If the active call exists,
+ − place this active call on hold and accepts the
+ − waiting call.
+ −
+ − */
+ −
+ − void cm_mt_accept()
+ − {
+ − SHORT call_number;
+ − T_MFW_CM_CALL_STAT stat; /* SPR#1983 - SH */
+ − UBYTE ton;
+ − UBYTE mode;
+ −
+ − TRACE_FUNCTION ("cm_mt_accept()");
+ −
+ − if (cm_search_callId(CAL_STAT_Active, &call_number) != CM_OK)
+ − {
+ − if (sAT_A(CMD_SRC_LCL) NEQ AT_EXCT)
+ − {
+ − TRACE_ERROR("sAT_A error");
+ − }
+ − else
+ − {
+ − currAccepting = 1; /* ES!! 210999 */
+ − }
+ − }
+ − else
+ − {
+ − cmd_hold = MFW_CM_MT_ACCEPT;
+ −
+ − /* SPR#1983 - SH - Get status of active call */
+ −
+ − cm_search_callStat(call_number, &stat, &ton, &mode);
+ − #ifdef MMI_LINT_WARNING_REMOVAL /*a0393213 lint warnings removal*/
+ − if (cm_search_callId(CAL_STAT_Wait, &call_number) EQ CM_OK)
+ − cc_id = call_number;
+ − #else
+ − cm_search_callId(CAL_STAT_Wait, &call_number);
+ − #endif
+ − /* SPR#1983 - SH - If data call is active, end it and accept other call */
+ −
+ − if (mode==DATA_CALL)
+ − {
+ − /*
+ − * Accepting a call when there is an active data call,
+ − * so drop the active call and accept the waiting call by the
+ − * equivalent of the AT+CHLD=1 command.
+ − */
+ − cm_set_cmd_status(CHLD_MOD_RelActAndAcpt, "");
+ − if (sAT_PlusCHLD(CMD_SRC_LCL, CHLD_MOD_RelActAndAcpt, 0) NEQ AT_EXCT)
+ − {
+ − TRACE_ERROR("sAT_PlusCHLD(CHLD_MOD_RelActAndAcpt) error");
+ − }
+ − }
+ −
+ − else /* SPR#1983 - SH - Important! Acts on next 'if' */
+ −
+ − /* Marcus: issue 1049: 03/09/2002: Start */
+ − if (cm_search_callId(CAL_STAT_Held, &call_number) EQ CM_OK)
+ − {
+ − /*
+ − * Accepting a call when there is already an active call and a held
+ − * call, so drop the active call and accept the waiting call by the
+ − * equivalent of the AT+CHLD=1 command.
+ − */
+ − cm_set_cmd_status(CHLD_MOD_RelActAndAcpt, "");
+ − if (sAT_PlusCHLD(CMD_SRC_LCL, CHLD_MOD_RelActAndAcpt, 0) NEQ AT_EXCT)
+ − {
+ − TRACE_ERROR("sAT_PlusCHLD(CHLD_MOD_RelActAndAcpt) error");
+ − }
+ − }
+ − else
+ − {
+ − /*
+ − * Accepting a call when there is already an active call but no held
+ − * call, so hold the active call and accept the waiting call by the
+ − * equivalent of the AT+CHLD=2 command.
+ − */
+ − cm_set_cmd_status(CHLD_MOD_HldActAndAcpt, "");
+ − if (sAT_PlusCHLD(CMD_SRC_LCL, CHLD_MOD_HldActAndAcpt, 0) NEQ AT_EXCT)
+ − {
+ − TRACE_ERROR("sAT_PlusCHLD(CHLD_MOD_HldActAndAcpt) error");
+ − }
+ − }
+ − /* Marcus: issue 1049: 03/09/2002: End */
+ − }
+ − }
+ −
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : MMI-Framework (8417) MODULE : MFW_CM |
+ − | STATE : code ROUTINE : cm_end_all |
+ − +--------------------------------------------------------------------+
+ −
+ −
+ − PURPOSE : End all calls (Held and Active)
+ −
+ − */
+ −
+ − void cm_end_all(void)
+ − {
+ − T_ACI_RETURN aci_res; // The value returned by sAT_H
+ −
+ − TRACE_EVENT("cm_end_all()");
+ −
+ − aci_res = sAT_H(CMD_SRC_LCL);
+ −
+ − if (aci_res == AT_EXCT)
+ − {
+ − TRACE_EVENT("sAT_H returned AT_EXCT");
+ − cmd_hold = MFW_CM_DISCONNECT_ALL;
+ − }
+ − else
+ − {
+ − TRACE_EVENT_P1("sAT_H returned %d", aci_res);
+ − }
+ − return;
+ − }
+ −
+ −
+ −
+ − // Apr 26 2006, a0393213 (Prabakar R), OMAPS00074886 : No option in MMI to release the held call.
+ − // This function is added to release all held calls
+ −
+ − /*******************************************************************************
+ −
+ − $Function: cm_end_held
+ −
+ − $Description: End held calls
+ −
+ − $Returns: void
+ −
+ − $Arguments: void
+ −
+ − *******************************************************************************/
+ −
+ − void cm_end_held(void)
+ − {
+ − T_ACI_RETURN aci_res; // The value returned by sAT_PlusCHLD
+ −
+ − TRACE_EVENT("cm_end_held()");
+ −
+ − aci_res = sAT_PlusCHLD(CMD_SRC_LCL,CHLD_MOD_RelHldOrUdub,NULL);
+ −
+ − if (aci_res == AT_FAIL)
+ − {
+ − TRACE_EVENT("sAT_PlusCHLD returned AT_FAIL");
+ − }
+ −
+ − return;
+ − }
+ −
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : MMI-Framework (8417) MODULE : MFW_CM |
+ − | STATE : code ROUTINE : cm_ok_connect |
+ − +--------------------------------------------------------------------+
+ −
+ −
+ − PURPOSE : The connect is successful.
+ −
+ − */
+ −
+ − void cm_ok_connect(void)
+ − {
+ − SHORT call_number;
+ −
+ − TRACE_FUNCTION ("cm_ok_connect()");
+ −
+ − currAccepting = 0; /* ES!! 210999 */
+ − currConnecting = 0; /* ES!! 290999 */
+ −
+ − if (cc_stat.type == REDIALING_CALL)
+ − {
+ − rdl.redial_mode = CM_REDIAL_SUCCESS;
+ − cm_signal(E_CM_REDIAL, &rdl);
+ − }
+ −
+ − cm_search_callId(CAL_STAT_Active, &call_number);
+ −
+ − /* allow a new outgoing */
+ − call_stat = MFW_CALL_FREE;
+ − call_type = MFW_CALL_FREE;
+ − cmd_hold = MFW_CM_NO_FLAG;
+ −
+ − cm_signal(E_CM_CONNECT_ACK, &call_number);
+ − }
+ −
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : MMI-Framework (8417) MODULE : MFW_CM |
+ − | STATE : code ROUTINE : cm_rmt_ok_connect |
+ − +--------------------------------------------------------------------+
+ −
+ −
+ − PURPOSE : The connect is successful.
+ −
+ − */
+ −
+ − void cm_rmt_ok_connect()
+ − {
+ − SHORT call_number;
+ −
+ − TRACE_FUNCTION ("cm_rmt_ok_connect()");
+ −
+ − cm_search_callId(CAL_STAT_Active, &call_number);
+ −
+ − cm_signal(E_CM_CONNECT_ACK, &call_number);
+ − }
+ −
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : MMI-Framework (8417) MODULE : MFW_CM |
+ − | STATE : code ROUTINE : cm_error_connect |
+ − +--------------------------------------------------------------------+
+ −
+ −
+ − PURPOSE : The connection is not successful
+ −
+ − */
+ −
+ − #ifdef FF_2TO1_PS
+ − void cm_error_connect(SHORT call_number)
+ − {
+ − int i;
+ − T_CAUSE_ps_cause report; /* Marcus: Extended error reporting: 12/11/2002 */
+ − USHORT extend_report; /* API - 1564 - 16-01-03 - add this variable to store the new error code */
+ −
+ − TRACE_FUNCTION ("cm_error_connect()");
+ −
+ − currAccepting = 0; /* ES!! 210999 */
+ − currConnecting = 0; /* ES!! 290999 */
+ −
+ − /* send event */
+ − dis_connect.call_number = call_number;
+ −
+ − qAT_PlusCEER( CMD_SRC_LCL, &report);
+ − /* Marcus: Extended error reporting: 12/11/2002: Start */
+ − // TRACE_EVENT_P1("qAT_PlusCEER(%04X)", report);
+ −
+ − /* API - 1564 - 16-01-03 - store the error value to the new variable & throughout this function replace 'report' with 'extend_report */
+ − extend_report = report.value.nwcc_cause;
+ −
+ − if (report.ctrl_value != CAUSE_is_from_nwcc)
+ − {
+ − /* Treat Condat defined cause values as if no cause given */
+ − dis_connect.cause = NOT_PRESENT_8BIT;
+ − }
+ − else
+ − {
+ − /* Standards defined cause value is given */
+ − dis_connect.cause = report.value.nwcc_cause;
+ − }
+ − TRACE_EVENT_P1("dis_connect.cause = %02X)", dis_connect.cause);
+ − /* Marcus: Extended error reporting: 12/11/2002: End */
+ − cm_signal(E_CM_DISCONNECT, &dis_connect);
+ − TRACE_EVENT("passed the E_CM_DISCONNECT point");
+ −
+ − if ((call_stat EQ OUTGOING_CALL)
+ − AND (call_type NEQ MFW_ECC_CALL)
+ − AND ((redial_stat EQ CM_REDIAL_AUTO) OR (redial_stat EQ CM_REDIAL_MANU)))
+ − {
+ − /* If this call is 2nd outgoing call, redial is not started */
+ − if (qAT_PercentCAL(CMD_SRC_LCL, call_tab) EQ AT_CMPL)
+ − {
+ − for (i=0; i<MAX_CALL_NR; i++)
+ − {
+ − if (call_tab[i].index == -1)
+ − break;
+ −
+ − if ((call_tab[i].status == CAL_STAT_NotPresent)
+ − OR (call_tab[i].status == CAL_STAT_DeactiveReq))
+ − continue;
+ −
+ − if (call_tab[i].calType == CAL_TYPE_MOC)
+ − {
+ − call_stat = MFW_CALL_FREE;
+ − call_type = MFW_CALL_FREE;
+ − cmd_hold = MFW_CM_NO_FLAG;
+ − return;
+ − }
+ − }
+ − }
+ −
+ − /* check blacklist whether it is full */
+ − if (black_list.count == MAX_BLACKLIST_NUM)
+ − {
+ − TRACE_EVENT ("blacklist is now full");
+ −
+ − /* Blacklist is now full and
+ − MT shall prohibit further automatic call attempts
+ − */
+ − redial_stat = CM_REDIAL_OFF;
+ −
+ −
+ − /* allow a new outgoing */
+ − call_stat = MFW_CALL_FREE;
+ − call_type = MFW_CALL_FREE;
+ − cc_stat.type = MFW_CALL_FREE;
+ −
+ − rdl.redial_mode = CM_REDIAL_BLACKLIST;
+ − cm_signal(E_CM_REDIAL, &rdl);
+ − return;
+ − }
+ −
+ − /* check the registration staus */
+ − if (nm_reg_status() == MFW_NO_SERVICE)
+ − {
+ − call_stat = MFW_CALL_FREE;
+ − call_type = MFW_CALL_FREE;
+ − cc_stat.type = MFW_CALL_FREE;
+ −
+ − rdl.redial_mode = CM_REDIAL_NO_SERVICE;
+ − cm_signal(E_CM_REDIAL, &rdl);
+ − return;
+ − }
+ −
+ − TRACE_EVENT_P1("report = %d", extend_report);
+ − switch (extend_report)
+ − {
+ − case 28:
+ − // API - 1480 - Added this code to stop redial on an incorrect number
+ − if(!redial_count)
+ − {
+ − call_stat = MFW_CALL_FREE;
+ − call_type = MFW_CALL_FREE;
+ − cc_stat.type = MFW_CALL_FREE;
+ −
+ − rdl.redial_mode = CM_REDIAL_ABORTED;
+ − cm_signal(E_CM_REDIAL, &rdl);
+ − return;
+ − }
+ − case 1: /* check whether the reason is in category 3 (GSM 02.07) */
+ − case 3:
+ − case 22:
+ − case 38:
+ − TRACE_EVENT ("category 3");
+ − if (!redial_count)
+ − {
+ − /* redial_count == 0;
+ − this is for the first outgoing call and
+ − now it is going to start the Auto-redial procedure
+ − */
+ − cc_stat.type = REDIALING_CALL;
+ − cc_stat.call_number = 0;
+ −
+ − call_stat = REDIALING_CALL;
+ − rdl.redial_mode = CM_REDIAL_STARTED;
+ − mfwStrncpy((char *)rdl.number, (char *)cc_stat.number, MFW_NUM_LEN);
+ −
+ − #ifdef NO_ASCIIZ
+ − rdl.name.len = cc_stat.name.len;
+ − memcpy(rdl.name.data,
+ − cc_stat.name.data,
+ − cc_stat.name.len);
+ − #else
+ − mfwStrncpy((char *)rdl.name, (char *)cc_stat.name, MFW_TAG_LEN);
+ − // strcpy((char *)rdl.subaddr, (char *)cc_stat.subaddr);
+ − #endif
+ − rdl.ton = cc_stat.ton;
+ − rdl.type = cc_stat.mode;
+ −
+ − /* reasons in the category 3 have
+ − a call repeat attempts of max. 1 !
+ − */
+ − redial_count = MAX_REDIAL_ATTEMPT-1;
+ − cm_signal(E_CM_REDIAL, &rdl);
+ − return;
+ − }
+ − else
+ − redial_count = MAX_REDIAL_ATTEMPT;
+ − break;
+ −
+ − case 17: /* check whether the reason is in category 1 and 2 (GSM 02.07) */
+ − case 18:
+ − case 19:
+ − case 27:
+ − case 34:
+ − case 41:
+ − case 42:
+ − case 44:
+ − case 47:
+ − TRACE_EVENT ("category 1 & 2");
+ − if (!redial_count)
+ − {
+ − /* redial_count == 0
+ − this is for the first outgoing call and
+ − now it is going to start the Auto-redial procedure
+ − */
+ − cc_stat.type = REDIALING_CALL;
+ − cc_stat.call_number = 0;
+ −
+ − call_stat = REDIALING_CALL;
+ − rdl.redial_mode = CM_REDIAL_STARTED;
+ − mfwStrncpy((char *)rdl.number, (char *)cc_stat.number, MFW_NUM_LEN);
+ − #ifdef NO_ASCIIZ
+ − rdl.name.len = cc_stat.name.len;
+ − memcpy(rdl.name.data,
+ − cc_stat.name.data,
+ − cc_stat.name.len);
+ − #else
+ − mfwStrncpy((char *)rdl.name, (char *)cc_stat.name, MFW_TAG_LEN);
+ − // strcpy((char *)rdl.subaddr, (char *)cc_stat.subaddr);
+ − #endif
+ − rdl.ton = cc_stat.ton;
+ − rdl.type = cc_stat.mode;
+ −
+ − /* reasons in the category 1 and 2 have
+ − a call repeat attempts of max. 10 !
+ − */
+ −
+ − cm_signal(E_CM_REDIAL, &rdl);
+ − return;
+ − }
+ −
+ − if (redial_count >= 1 AND redial_count <= 3)
+ − {
+ − timStart(redialTim24);
+ − call_stat = REDIALING_CALL;
+ − cc_stat.call_number = 0;
+ − return;
+ − }
+ −
+ − if (redial_count >= 4 AND redial_count < MAX_REDIAL_ATTEMPT)
+ − {
+ − timStart(redialTim5);
+ − call_stat = REDIALING_CALL;
+ − cc_stat.call_number = 0;
+ − return;
+ − }
+ − #ifdef CUSTOMER_6366
+ − // JP PATCH The MMI needs to know if the 'error disconnect' has
+ − // resulted in redial starting irrespective of whether this was a redial attempt or not
+ − rdl.redial_mode = CM_REDIAL_STARTED;
+ − cm_signal(E_CM_REDIAL, &rdl);
+ − // END JP PATCH
+ − #endif /* CUSTOMER_6366 */
+ − break;
+ −
+ − default:
+ − if (redial_count)
+ − {
+ − rdl.redial_mode = CM_REDIAL_STOP;
+ − mfwStrncpy((char *)rdl.number, (char *)cc_stat.number, MFW_NUM_LEN);
+ − #ifdef NO_ASCIIZ
+ − rdl.name.len = cc_stat.name.len;
+ − memcpy(rdl.name.data,
+ − cc_stat.name.data,
+ − cc_stat.name.len);
+ − #else
+ − mfwStrncpy((char *)rdl.name, (char *)cc_stat.name, MFW_TAG_LEN);//???
+ − // strcpy((char *)rdl.subaddr, (char *)cc_stat.subaddr);
+ − #endif
+ − rdl.ton = cc_stat.ton;
+ − rdl.type = cc_stat.mode;
+ − cm_signal(E_CM_REDIAL, &rdl);
+ − }
+ − /* allow a new outgoing */
+ − call_stat = MFW_CALL_FREE;
+ − call_type = MFW_CALL_FREE;
+ − cc_stat.type = MFW_CALL_FREE;
+ − return;
+ − }
+ −
+ − if (redial_count >= MAX_REDIAL_ATTEMPT
+ − AND black_list.count < MAX_BLACKLIST_NUM)
+ − {
+ − mfwStrncpy((char *)black_list.number[black_list.count],
+ − (char *)cc_stat.number, MFW_NUM_LEN);
+ − black_list.count++;
+ −
+ − rdl.redial_mode = CM_REDIAL_BLACKLISTED;
+ − mfwStrncpy((char *)rdl.number, (char *)cc_stat.number, MFW_NUM_LEN);
+ − #ifdef NO_ASCIIZ
+ − rdl.name.len = cc_stat.name.len;
+ − memcpy(rdl.name.data,
+ − cc_stat.name.data,
+ − cc_stat.name.len);
+ − #else
+ − mfwStrncpy((char *)rdl.name, (char *)cc_stat.name, MFW_TAG_LEN);
+ − // strcpy((char *)rdl.subaddr, (char *)cc_stat.subaddr);
+ − #endif
+ − rdl.ton = cc_stat.ton;
+ − rdl.type = cc_stat.mode;
+ − rdl.left_attempts = 0;
+ − cc_stat.call_number = 0;
+ − cm_signal(E_CM_REDIAL, &rdl);
+ − }
+ − }
+ −
+ − /* allow a new outgoing */
+ − call_stat = MFW_CALL_FREE;
+ − call_type = MFW_CALL_FREE;
+ − cc_stat.type = MFW_CALL_FREE;
+ − }
+ − #else
+ − void cm_error_connect(SHORT call_number)
+ − {
+ −
+ − int i;
+ − USHORT report; /* Marcus: Extended error reporting: 12/11/2002 */
+ − USHORT extend_report; /* API - 1564 - 16-01-03 - add this variable to store the new error code */
+ − // Apr 06 2005 REF: CRR 29989 xpradipg
+ − // local definition
+ − #ifdef FF_MMI_OPTIM
+ − T_ACI_CAL_ENTR *call_tab;//[MAX_CALL_NR];
+ − #endif
+ − // Apr 14, 2005 REF: CRR 29991 xpradipg
+ − // local definition
+ − #ifdef FF_MMI_OPTIM
+ − UBYTE count=0;
+ − UBYTE blackListNum[MFW_NUM_LEN];
+ − int32 file = 0;
+ − #endif
+ − TRACE_FUNCTION ("cm_error_connect()");
+ −
+ − currAccepting = 0; /* ES!! 210999 */
+ − currConnecting = 0; /* ES!! 290999 */
+ −
+ − /* send event */
+ − dis_connect.call_number = call_number;
+ −
+ − qAT_PlusCEER( CMD_SRC_LCL, &report);
+ − /* Marcus: Extended error reporting: 12/11/2002: Start */
+ − TRACE_EVENT_P1("qAT_PlusCEER(%04X)", report);
+ −
+ − /* API - 1564 - 16-01-03 - store the error value to the new variable & throughout this function replace 'report' with 'extend_report */
+ − extend_report = GET_CAUSE_VALUE(report);
+ −
+ − if (GET_CAUSE_DEFBY(extend_report) == DEFBY_CONDAT)
+ − {
+ − /* Treat Condat defined cause values as if no cause given */
+ − dis_connect.cause = NOT_PRESENT_8BIT;
+ − }
+ − else
+ − {
+ − /* Standards defined cause value is given */
+ − dis_connect.cause = GET_CAUSE_VALUE(extend_report);
+ − }
+ − TRACE_EVENT_P1("dis_connect.cause = %02X)", dis_connect.cause);
+ − /* Marcus: Extended error reporting: 12/11/2002: End */
+ − cm_signal(E_CM_DISCONNECT, &dis_connect);
+ − TRACE_EVENT("passed the E_CM_DISCONNECT point");
+ −
+ − if ((call_stat EQ OUTGOING_CALL)
+ − AND (call_type NEQ MFW_ECC_CALL)
+ − AND ((redial_stat EQ CM_REDIAL_AUTO) OR (redial_stat EQ CM_REDIAL_MANU)))
+ − {
+ − // Apr 06 2005 REF: CRR 29989 xpradipg
+ − // allocate memory
+ − #ifdef FF_MMI_OPTIM
+ − call_tab = (T_ACI_CAL_ENTR*)mfwAlloc(sizeof(T_ACI_CAL_ENTR)*MAX_CALL_NR);
+ − if( NULL == call_tab)
+ − return;
+ − #endif
+ − /* If this call is 2nd outgoing call, redial is not started */
+ − if (qAT_PercentCAL(CMD_SRC_LCL, call_tab) EQ AT_CMPL)
+ − {
+ − for (i=0; i<MAX_CALL_NR; i++)
+ − {
+ − if (call_tab[i].index == -1)
+ − break;
+ −
+ − if ((call_tab[i].status == CAL_STAT_NotPresent)
+ − OR (call_tab[i].status == CAL_STAT_DeactiveReq))
+ − continue;
+ −
+ − if (call_tab[i].calType == CAL_TYPE_MOC)
+ − {
+ − call_stat = MFW_CALL_FREE;
+ − call_type = MFW_CALL_FREE;
+ − cmd_hold = MFW_CM_NO_FLAG;
+ − // Apr 06 2005 REF: CRR 29989 xpradipg
+ − // deallocate memory
+ − #ifdef FF_MMI_OPTIM
+ − if(call_tab)
+ − mfwFree((U8*)call_tab, sizeof(T_ACI_CAL_ENTR)*MAX_CALL_NR);
+ − #endif
+ − return;
+ − }
+ − }
+ − }
+ − // Apr 06 2005 REF: CRR 29989 xpradipg
+ − // deallocate memory
+ − #ifdef FF_MMI_OPTIM
+ − if(call_tab)
+ − mfwFree((U8*)call_tab, sizeof(T_ACI_CAL_ENTR)*MAX_CALL_NR);
+ − #endif
+ − // Apr 14, 2005 REF: CRR 29991 xpradipg
+ − // read the list into the variable
+ − #ifdef FF_MMI_OPTIM
+ − if((file = flash_MMI_blackList_open()) >= 0 )
+ − {
+ − if(flash_MMI_blackList_read(file,(U8*)&count, 1,0) > 0)
+ − {
+ − if(count == MAX_BLACKLIST_NUM)
+ − #else
+ − /* check blacklist whether it is full */
+ − if (black_list.count == MAX_BLACKLIST_NUM)
+ − #endif
+ − {
+ − TRACE_EVENT ("blacklist is now full");
+ −
+ − /* Blacklist is now full and
+ − MT shall prohibit further automatic call attempts
+ − */
+ − redial_stat = CM_REDIAL_ABORTED;
+ −
+ −
+ − /* allow a new outgoing */
+ − call_stat = MFW_CALL_FREE;
+ − call_type = MFW_CALL_FREE;
+ − cc_stat.type = MFW_CALL_FREE;
+ −
+ − rdl.redial_mode = CM_REDIAL_BLACKLIST;
+ − cm_signal(E_CM_REDIAL, &rdl);
+ − #ifdef FF_MMI_OPTIM
+ − flash_MMI_blackList_close(file);
+ − #endif
+ − return;
+ − }
+ − #ifdef FF_MMI_OPTIM
+ − }
+ − flash_MMI_blackList_close(file);
+ − }
+ − #endif
+ −
+ − /* check the registration staus */
+ − if (nm_reg_status() == MFW_NO_SERVICE)
+ − {
+ − call_stat = MFW_CALL_FREE;
+ − call_type = MFW_CALL_FREE;
+ − cc_stat.type = MFW_CALL_FREE;
+ −
+ − rdl.redial_mode = CM_REDIAL_NO_SERVICE;
+ − cm_signal(E_CM_REDIAL, &rdl);
+ − return;
+ − }
+ −
+ − TRACE_EVENT_P1("report = %d", extend_report);
+ − switch (extend_report)
+ − {
+ − case 28:
+ − // API - 1480 - Added this code to stop redial on an incorrect number
+ − if(!redial_count)
+ − {
+ − call_stat = MFW_CALL_FREE;
+ − call_type = MFW_CALL_FREE;
+ − cc_stat.type = MFW_CALL_FREE;
+ −
+ − rdl.redial_mode = CM_REDIAL_ABORTED;
+ − cm_signal(E_CM_REDIAL, &rdl);
+ − return;
+ − }
+ − case 1: /* check whether the reason is in category 3 (GSM 02.07) */
+ − case 3:
+ − case 22:
+ − case 38:
+ − TRACE_EVENT ("category 3");
+ − if (!redial_count)
+ − {
+ − /* redial_count == 0;
+ − this is for the first outgoing call and
+ − now it is going to start the Auto-redial procedure
+ − */
+ − cc_stat.type = REDIALING_CALL;
+ − cc_stat.call_number = 0;
+ −
+ − call_stat = REDIALING_CALL;
+ − rdl.redial_mode = CM_REDIAL_STARTED;
+ − mfwStrncpy((char *)rdl.number, (char *)cc_stat.number, MFW_NUM_LEN);
+ −
+ − #ifdef NO_ASCIIZ
+ − rdl.name.len = cc_stat.name.len;
+ − memcpy(rdl.name.data,
+ − cc_stat.name.data,
+ − cc_stat.name.len);
+ − #else
+ − mfwStrncpy((char *)rdl.name, (char *)cc_stat.name, MFW_TAG_LEN);
+ − // strcpy((char *)rdl.subaddr, (char *)cc_stat.subaddr);
+ − #endif
+ − rdl.ton = cc_stat.ton;
+ − rdl.type = cc_stat.mode;
+ −
+ − /* reasons in the category 3 have
+ − a call repeat attempts of max. 1 !
+ − */
+ − redial_count = MAX_REDIAL_ATTEMPT-1;
+ − cm_signal(E_CM_REDIAL, &rdl);
+ − return;
+ − }
+ − else
+ − redial_count = MAX_REDIAL_ATTEMPT;
+ − break;
+ −
+ − case 17: /* check whether the reason is in category 1 and 2 (GSM 02.07) */
+ − case 18:
+ − case 19:
+ − case 27:
+ − case 34:
+ − case 41:
+ − case 42:
+ − case 44:
+ − case 47:
+ − TRACE_EVENT ("category 1 & 2");
+ − if (!redial_count)
+ − {
+ − /* redial_count == 0
+ − this is for the first outgoing call and
+ − now it is going to start the Auto-redial procedure
+ − */
+ − cc_stat.type = REDIALING_CALL;
+ − cc_stat.call_number = 0;
+ −
+ − call_stat = REDIALING_CALL;
+ − rdl.redial_mode = CM_REDIAL_STARTED;
+ − mfwStrncpy((char *)rdl.number, (char *)cc_stat.number, MFW_NUM_LEN);
+ − #ifdef NO_ASCIIZ
+ − rdl.name.len = cc_stat.name.len;
+ − memcpy(rdl.name.data,
+ − cc_stat.name.data,
+ − cc_stat.name.len);
+ − #else
+ − mfwStrncpy((char *)rdl.name, (char *)cc_stat.name, MFW_TAG_LEN);
+ − // strcpy((char *)rdl.subaddr, (char *)cc_stat.subaddr);
+ − #endif
+ − rdl.ton = cc_stat.ton;
+ − rdl.type = cc_stat.mode;
+ −
+ − /* reasons in the category 1 and 2 have
+ − a call repeat attempts of max. 10 !
+ − */
+ −
+ − cm_signal(E_CM_REDIAL, &rdl);
+ − return;
+ − }
+ −
+ − if (redial_count >= 1 AND redial_count <= 3)
+ − {
+ − timStart(redialTim24);
+ − call_stat = REDIALING_CALL;
+ − cc_stat.call_number = 0;
+ − return;
+ − }
+ −
+ − if (redial_count >= 4 AND redial_count < MAX_REDIAL_ATTEMPT)
+ − {
+ − timStart(redialTim5);
+ − call_stat = REDIALING_CALL;
+ − cc_stat.call_number = 0;
+ − return;
+ − }
+ − #ifdef CUSTOMER_6366
+ − // JP PATCH The MMI needs to know if the 'error disconnect' has
+ − // resulted in redial starting irrespective of whether this was a redial attempt or not
+ − rdl.redial_mode = CM_REDIAL_STARTED;
+ − cm_signal(E_CM_REDIAL, &rdl);
+ − // END JP PATCH
+ − #endif /* CUSTOMER_6366 */
+ − break;
+ −
+ − default:
+ − if (redial_count)
+ − {
+ − rdl.redial_mode = CM_REDIAL_STOP;
+ − mfwStrncpy((char *)rdl.number, (char *)cc_stat.number, MFW_NUM_LEN);
+ − #ifdef NO_ASCIIZ
+ − rdl.name.len = cc_stat.name.len;
+ − memcpy(rdl.name.data,
+ − cc_stat.name.data,
+ − cc_stat.name.len);
+ − #else
+ − mfwStrncpy((char *)rdl.name, (char *)cc_stat.name, MFW_TAG_LEN);//???
+ − // strcpy((char *)rdl.subaddr, (char *)cc_stat.subaddr);
+ − #endif
+ − rdl.ton = cc_stat.ton;
+ − rdl.type = cc_stat.mode;
+ − cm_signal(E_CM_REDIAL, &rdl);
+ − }
+ − /* allow a new outgoing */
+ − call_stat = MFW_CALL_FREE;
+ − call_type = MFW_CALL_FREE;
+ − cc_stat.type = MFW_CALL_FREE;
+ − return;
+ − }
+ − #ifdef FF_MMI_OPTIM
+ − if (redial_count >= MAX_REDIAL_ATTEMPT
+ − AND count < MAX_BLACKLIST_NUM)
+ − {
+ − mfwStrncpy((char *)blackListNum,(char *)cc_stat.number, MFW_NUM_LEN);
+ − // Apr 14, 2005 REF: CRR 29991 xpradipg
+ − // once there is new addition update it onto the file
+ − if(flash_MMI_blackList_write((U8*)blackListNum, MFW_NUM_LEN, (count*MFW_NUM_LEN)+1) < 0)
+ − TRACE_FUNCTION("ERROR OPENING the blacklist file");
+ − count++;
+ − if(flash_MMI_blackList_write((U8*)&count,1,0) < 0)
+ − TRACE_FUNCTION("ERROR OPENING the blacklist file");
+ − #else
+ − if (redial_count >= MAX_REDIAL_ATTEMPT
+ − AND black_list.count < MAX_BLACKLIST_NUM)
+ − {
+ − mfwStrncpy((char *)black_list.number[black_list.count],
+ − (char *)cc_stat.number, MFW_NUM_LEN);
+ − black_list.count++;
+ − #endif
+ − rdl.redial_mode = CM_REDIAL_BLACKLISTED;
+ − mfwStrncpy((char *)rdl.number, (char *)cc_stat.number, MFW_NUM_LEN);
+ − #ifdef NO_ASCIIZ
+ − rdl.name.len = cc_stat.name.len;
+ − memcpy(rdl.name.data,
+ − cc_stat.name.data,
+ − cc_stat.name.len);
+ − #else
+ − mfwStrncpy((char *)rdl.name, (char *)cc_stat.name, MFW_TAG_LEN);
+ − // strcpy((char *)rdl.subaddr, (char *)cc_stat.subaddr);
+ − #endif
+ − rdl.ton = cc_stat.ton;
+ − rdl.type = cc_stat.mode;
+ − rdl.left_attempts = 0;
+ − cc_stat.call_number = 0;
+ − cm_signal(E_CM_REDIAL, &rdl);
+ − }
+ − }
+ −
+ − /* allow a new outgoing */
+ − call_stat = MFW_CALL_FREE;
+ − call_type = MFW_CALL_FREE;
+ − cc_stat.type = MFW_CALL_FREE;
+ − }
+ − #endif
+ −
+ −
+ − /*
+ − +-----------------------------------------------------------------------+
+ − | PROJECT : MMI-Framework (8417) MODULE : MFW_CM |
+ − | STATE : code ROUTINE : cm_rmt_error_connect |
+ − +-----------------------------------------------------------------------+
+ −
+ −
+ − PURPOSE : The connection is not successful
+ −
+ − */
+ −
+ − #ifdef FF_2TO1_PS
+ − void cm_rmt_error_connect(SHORT call_number)
+ − {
+ − T_CAUSE_ps_cause report; /* Marcus: Extended error reporting: 12/11/2002 */
+ −
+ − TRACE_FUNCTION ("cm_error_connect()");
+ −
+ − //TISH: OMAPS00104986 if there is inband tone, it should not disconnect the call, until User reject it.
+ − if (cm_cpi.inband) return;
+ − /* send event */
+ − dis_connect.call_number = call_number;
+ −
+ − qAT_PlusCEER( CMD_SRC_LCL, &report);
+ − /* Marcus: Extended error reporting: 12/11/2002: Start */
+ − // TRACE_EVENT_P1("qAT_PlusCEER(%04X)", report);
+ −
+ − if (report.ctrl_value != CAUSE_is_from_nwcc)
+ − {
+ − /* Treat Condat defined cause values as if no cause given */
+ − dis_connect.cause = NOT_PRESENT_8BIT;
+ − }
+ − else
+ − {
+ − /* Standards defined cause value is given */
+ − dis_connect.cause = report.value.nwcc_cause;
+ − }
+ −
+ − TRACE_EVENT_P1("dis_connect.cause = %02X)", dis_connect.cause);
+ − /* Marcus: Extended error reporting: 12/11/2002: End */
+ −
+ − cm_signal(E_CM_DISCONNECT, &dis_connect);
+ − }
+ − #else
+ − void cm_rmt_error_connect(SHORT call_number)
+ − {
+ − USHORT report; /* Marcus: Extended error reporting: 12/11/2002 */
+ −
+ − TRACE_FUNCTION ("cm_error_connect()");
+ − //TISH: OMAPS00104986 if there is inband tone, it should not disconnect the call, until User reject it.
+ − if (cm_cpi.inband) return;
+ −
+ − /* send event */
+ − dis_connect.call_number = call_number;
+ −
+ − qAT_PlusCEER( CMD_SRC_LCL, &report);
+ − /* Marcus: Extended error reporting: 12/11/2002: Start */
+ − TRACE_EVENT_P1("qAT_PlusCEER(%04X)", report);
+ − if (GET_CAUSE_DEFBY(report) == DEFBY_CONDAT)
+ − {
+ − /* Treat Condat defined cause values as if no cause given */
+ − dis_connect.cause = NOT_PRESENT_8BIT;
+ − }
+ − else
+ − {
+ − /* Standards defined cause value is given */
+ − dis_connect.cause = GET_CAUSE_VALUE(report);
+ − }
+ − TRACE_EVENT_P1("dis_connect.cause = %02X)", dis_connect.cause);
+ − /* Marcus: Extended error reporting: 12/11/2002: End */
+ −
+ − cm_signal(E_CM_DISCONNECT, &dis_connect);
+ − }
+ − #endif
+ −
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT: MMI-Framework (8417) MODULE: MFW_CM |
+ − | STATE : code ROUTINE: cm_disconnect |
+ − +--------------------------------------------------------------------+
+ −
+ −
+ − PURPOSE : Disconnection for outgoing call or active call
+ −
+ − */
+ −
+ − T_MFW cm_disconnect(SHORT call_number)
+ − {
+ − CHAR callId[5];
+ − T_MFW_CM_CALL_STAT stat;
+ − UBYTE ton;
+ − UBYTE mode;
+ −
+ − TRACE_FUNCTION ("cm_disconnect()");
+ −
+ − dis_connect.call_number = call_number;
+ −
+ − /*Apr 25, 2006 OMAPS00075711 a0393213 (R.Prabakar)
+ − Description : 'End Conference' option doesn't work
+ − Solution : The ACI_CHLD_MOD is changed from CHLD_MOD_RelActSpec to CHLD_MOD_RelActAndAcpt while calling sAT_PlusCHLD().
+ − This is done since CHLD_MOD_RelActSpec with callId 0 is equivalent to sending AT+CHLD=10 which is invalid
+ − according to GSM specification. Before calling sAT_PlusCHLD command status is also set*/
+ −
+ − if (!call_number)
+ − {
+ − sprintf(callId, "%d", 0);
+ − cm_set_cmd_status(CHLD_MOD_RelActAndAcpt, callId);
+ − if (sAT_PlusCHLD(CMD_SRC_LCL, CHLD_MOD_RelActAndAcpt, callId) != AT_EXCT)
+ − return CM_ERROR;
+ − return CM_OK;
+ − }
+ −
+ − cm_search_callStat(call_number, &stat, &ton, &mode);
+ −
+ − TRACE_EVENT_P3("Status %d Ton %d Mode %d",stat,ton,mode);
+ −
+ − /* HANG UP DATA CALL (WAP)
+ − * SPR#1983 - SH - Use sAT_Abort() when call has not yet connected,
+ − * rather than sAT_H */
+ −
+ − if (mode == DATA_CALL)
+ − {
+ − T_ACI_RETURN retval;
+ −
+ − TRACE_EVENT_P1("***Disconnect data call, stat=%d", stat);
+ −
+ − if ((stat == CALL_DIAL) OR (stat == CALL_ALERT))
+ − {
+ − if (sAT_Abort(CMD_SRC_LCL, AT_CMD_D) NEQ AT_CMPL)
+ − return CM_ERROR;
+ − return CM_OK;
+ − }
+ −
+ − if (stat == CALL_DEACTIVE && currConnecting) /* ES/AK 290999 */
+ − {
+ − currConnecting = 0;
+ − if (sAT_Abort(CMD_SRC_LCL, AT_CMD_D) NEQ AT_CMPL)
+ − return CM_ERROR;
+ − return CM_OK;
+ − }
+ −
+ − retval = sAT_H(CMD_SRC_LCL);
+ −
+ − TRACE_EVENT_P1("Result of sAT_H = %d", retval);
+ − if (retval)
+ − return CM_ERROR;
+ − return CM_OK;
+ − }
+ −
+ −
+ − if ((stat == CALL_DIAL) OR (stat == CALL_ALERT))
+ − {
+ − if (sAT_Abort(CMD_SRC_LCL, AT_CMD_D) NEQ AT_CMPL)
+ − return CM_ERROR;
+ − return CM_OK;
+ − }
+ −
+ − if (stat == CALL_DEACTIVE && currConnecting) /* ES/AK 290999 */
+ − {
+ − currConnecting = 0;
+ − if (sAT_Abort(CMD_SRC_LCL, AT_CMD_D) NEQ AT_CMPL)
+ − return CM_ERROR;
+ − return CM_OK;
+ − }
+ −
+ − if ((stat == CALL_ACTIVE) OR (stat == CALL_DEACTIVE))
+ − {
+ − cmd_hold = MFW_CM_TERMINATED;
+ − sprintf(callId, "%d", call_number);
+ − if (sAT_PlusCHLD(CMD_SRC_LCL, CHLD_MOD_RelActSpec, callId) != AT_EXCT)
+ − return CM_ERROR;
+ − return CM_OK;
+ − }
+ − else if (stat == CALL_HELD)
+ − {
+ −
+ −
+ − // Apr 26, 2004 REF: CRR 16545 Ajith K P Side effect of CRR 16545.
+ − // CHLD_MOD_RelActSpec no longer releases held calls.
+ − // So now if the user wants to release a HELD call, now we are calling the
+ − // sAT_PlusCHLD(..) function with CHLD_MOD_RelAnySpec as the parameter.
+ −
+ −
+ −
+ − cmd_hold = MFW_CM_TERMINATED;
+ − sprintf(callId, "%d", call_number);
+ − // Feb 27, 2006 REF:DR OMAPS00067884 x0039928
+ − // Fix : sAT_PercentCHLD() is called if the mode > CHLD_MOD_RelDialCall
+ − if (sAT_PercentCHLD(CMD_SRC_LCL, CHLD_MOD_RelAnySpec, callId) != AT_EXCT)
+ − return CM_ERROR;
+ − return CM_OK;
+ − }
+ − return CM_ERROR;
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT: MMI-Framework (8417) MODULE: MFW_CM |
+ − | STATE : code ROUTINE: cm_force_disconnect |
+ − +--------------------------------------------------------------------+
+ −
+ −
+ − PURPOSE : Disconnection of any call existent needed for Multiparty and some structured procedures
+ − call termination in state U9
+ −
+ − */
+ −
+ − void cm_force_disconnect(void)
+ − {
+ − T_ACI_RETURN res;
+ −
+ − TRACE_FUNCTION("cm_force_disconnect()");
+ −
+ − res = sAT_H(CMD_SRC_LCL);
+ − if (res != AT_EXCT && res != AT_CMPL)
+ − TRACE_ERROR("satReject() error");
+ −
+ − return;
+ − }
+ −
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT: MMI-Framework (8417) MODULE: MFW_CM |
+ − | STATE : code ROUTINE: cm_ok_disconnect |
+ − +--------------------------------------------------------------------+
+ −
+ −
+ − PURPOSE : indicates disconnection from called party;
+ − sends E_CM_DISCONNECT to mmi
+ −
+ − */
+ −
+ − #ifdef FF_2TO1_PS
+ − void cm_ok_disconnect(T_ACI_CMD_SRC src, SHORT call_id)
+ − {
+ − T_CAUSE_ps_cause cause; /* Marcus: Extended error reporting: 12/11/2002 */
+ − T_MFW_CM_DISCONNECT_ALL disconnect_all;
+ −
+ − TRACE_FUNCTION("cm_ok_disconnect()");
+ −
+ − TRACE_EVENT_P4("dis_connect.call_number %d, cmd_hold %d, src %d, call_id %d",
+ − dis_connect.call_number, cmd_hold, src, call_id);
+ −
+ −
+ −
+ −
+ − /* Marcus: CCBS: 14/11/2002: Start */
+ − if (cmd_hold == MFW_CM_CCBS_REGISTER)
+ − {
+ − /* Rejecting the offered CCBS registration */
+ − TRACE_EVENT("cmd_hold == MFW_CM_CCBS_REGISTER");
+ − cmd_hold = 0;
+ − cm_ccbs_ok();
+ − return;
+ − }
+ − /* Marcus: CCBS: 14/11/2002: End */
+ −
+ − if (cmd_hold == MFW_CM_MPTY_TERMINATED)
+ − dis_connect.call_number = 0;
+ − //Nov 02, 2005 DR OMAPS00052132 xdeepadh
+ − //The usage of ATI enum is put under the flag FF_ATI
+ − #if defined (FF_ATI) || defined (NEPTUNE_BOARD)
+ − else if (src EQ CMD_SRC_ATI_1) /* NM Berlin/UK integration 21.09.01 */
+ − {
+ − dis_connect.call_number = call_id;
+ − }
+ − #endif
+ −
+ −
+ − /* send event */
+ − qAT_PlusCEER( CMD_SRC_LCL, &cause);
+ − /* Marcus: Extended error reporting: 12/11/2002: Start */
+ − // TRACE_EVENT_P1("qAT_PlusCEER(%04X)", cause);
+ −
+ − if (cause.ctrl_value != CAUSE_is_from_nwcc)
+ − {
+ − /* Treat Condat defined cause values as if no cause given */
+ − dis_connect.cause = NOT_PRESENT_8BIT;
+ − }
+ − else
+ − {
+ − /* Standards defined cause value is given */
+ − dis_connect.cause = cause.value.nwcc_cause;
+ − }
+ −
+ − TRACE_EVENT_P1("dis_connect.cause = %02X)", dis_connect.cause);
+ − /* Marcus: Extended error reporting: 12/11/2002: End */
+ −
+ − /* allow a new outgoing */
+ − call_stat = MFW_CALL_FREE;
+ − call_type = MFW_CALL_FREE;
+ −
+ − if (cmd_hold EQ MFW_CM_DISCONNECT_ALL)
+ − {
+ − disconnect_all.result = CM_DISCONNECT_ALL_RESULT_OK;
+ − if (cause.ctrl_value != CAUSE_is_from_nwcc)
+ − {
+ − /* Treat Condat defined cause values as if no cause given */
+ − disconnect_all.cause = NOT_PRESENT_8BIT;
+ − }
+ − else
+ − {
+ − /* Standards defined cause value is given */
+ − disconnect_all.cause = cause.value.nwcc_cause;
+ − }
+ − cm_signal(E_CM_DISCONNECT_ALL,&disconnect_all);
+ − }
+ − else
+ − cm_signal(E_CM_DISCONNECT, &dis_connect);
+ −
+ − cmd_hold = 0;
+ −
+ − }
+ − #else
+ − void cm_ok_disconnect(T_ACI_CMD_SRC src, SHORT call_id)
+ − {
+ − USHORT cause; /* Marcus: Extended error reporting: 12/11/2002 */
+ − T_MFW_CM_DISCONNECT_ALL disconnect_all;
+ −
+ − TRACE_FUNCTION("cm_ok_disconnect()");
+ −
+ − TRACE_EVENT_P4("dis_connect.call_number %d, cmd_hold %d, src %d, call_id %d",
+ − dis_connect.call_number, cmd_hold, src, call_id);
+ −
+ −
+ −
+ −
+ − /* Marcus: CCBS: 14/11/2002: Start */
+ − if (cmd_hold == MFW_CM_CCBS_REGISTER)
+ − {
+ − /* Rejecting the offered CCBS registration */
+ − TRACE_EVENT("cmd_hold == MFW_CM_CCBS_REGISTER");
+ − cmd_hold = 0;
+ − cm_ccbs_ok();
+ − return;
+ − }
+ − /* Marcus: CCBS: 14/11/2002: End */
+ −
+ − if (cmd_hold == MFW_CM_MPTY_TERMINATED)
+ − dis_connect.call_number = 0;
+ − //Nov 02, 2005 DR OMAPS00052132 xdeepadh
+ − //The usage of ATI enum is put under the flag FF_ATI
+ − #ifdef FF_ATI
+ − else if (src EQ CMD_SRC_ATI_1) //NM Berlin/UK integration 21.09.01
+ − {
+ − dis_connect.call_number = call_id;
+ − }
+ − #endif //FF_ATI
+ −
+ − /* send event */
+ − qAT_PlusCEER( CMD_SRC_LCL, &cause);
+ − /* Marcus: Extended error reporting: 12/11/2002: Start */
+ − TRACE_EVENT_P1("qAT_PlusCEER(%04X)", cause);
+ − if (GET_CAUSE_DEFBY(cause) == DEFBY_CONDAT)
+ − {
+ − /* Treat Condat defined cause values as if no cause given */
+ − dis_connect.cause = NOT_PRESENT_8BIT;
+ − }
+ − else
+ − {
+ − /* Standards defined cause value is given */
+ − dis_connect.cause = GET_CAUSE_VALUE(cause);
+ − }
+ − TRACE_EVENT_P1("dis_connect.cause = %02X)", dis_connect.cause);
+ − /* Marcus: Extended error reporting: 12/11/2002: End */
+ −
+ − /* allow a new outgoing */
+ − call_stat = MFW_CALL_FREE;
+ − call_type = MFW_CALL_FREE;
+ −
+ − if (cmd_hold EQ MFW_CM_DISCONNECT_ALL)
+ − {
+ − disconnect_all.result = CM_DISCONNECT_ALL_RESULT_OK;
+ − if (GET_CAUSE_DEFBY(cause) == DEFBY_CONDAT)
+ − {
+ − /* Treat Condat defined cause values as if no cause given */
+ − disconnect_all.cause = NOT_PRESENT_8BIT;
+ − }
+ − else
+ − {
+ − /* Standards defined cause value is given */
+ − disconnect_all.cause = GET_CAUSE_VALUE(cause);
+ − }
+ − cm_signal(E_CM_DISCONNECT_ALL,&disconnect_all);
+ − }
+ − else
+ − cm_signal(E_CM_DISCONNECT, &dis_connect);
+ −
+ − cmd_hold = 0;
+ −
+ − }
+ − #endif
+ −
+ − /* Marcus: CCBS: 14/11/2002: Start */
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT: MMI-Framework (8417) MODULE: MFW_CM |
+ − | STATE : code ROUTINE: cm_error_disconnect |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE : indicates failed disconnection
+ −
+ − */
+ − void cm_error_disconnect(void)
+ − {
+ − TRACE_FUNCTION ("cm_error_disconnect()");
+ − if (cmd_hold == MFW_CM_DISCONNECT_ALL)
+ − {
+ − TRACE_EVENT("cmd_hold == MFW_CM_DISCONNECT_ALL");
+ − cmd_hold = 0;
+ − }
+ −
+ − /* Marcus: CCBS: 14/11/2002: Start */
+ − if (cmd_hold == MFW_CM_CCBS_REGISTER)
+ − {
+ − TRACE_EVENT("cmd_hold == MFW_CM_CCBS_REGISTER");
+ − /* Rejecting the offered CCBS registration */
+ − cmd_hold = 0;
+ − cm_ccbs_error();
+ − }
+ − }
+ − /* Marcus: CCBS: 14/11/2002: End */
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT: MMI-Framework (8417) MODULE: MFW_CM |
+ − | STATE : code ROUTINE: cm_command |
+ − +--------------------------------------------------------------------+
+ −
+ −
+ − PURPOSE :
+ −
+ − */
+ −
+ − T_MFW cm_command(SHORT call_number, UBYTE command, UBYTE crss_string)
+ − {
+ − CHAR callId[5];
+ − UBYTE res;
+ − SHORT retVal, modeRetVal; // xnkulkar SPR-18262: Added "modeRetVal" to store the return value of "mfw_cbuf_put_mode ()"
+ −
+ − TRACE_FUNCTION ("cm_command()");
+ −
+ − // JP PATCH
+ − cmd_hold = 0;
+ − // END PATCH
+ −
+ − cmd.call_number = call_number;
+ − cmd.command = command;
+ −
+ − switch (command)
+ − {
+ − case CM_HOLD:
+ − case CM_SWAP:
+ − case CM_RETRIEVE:
+ − case CM_SWAP_MULTIPARTY:
+ − case CM_HOLD_MULTIPARTY:
+ − case CM_RETRIEVE_MULTIPARTY:
+ − /* place all active calls on held and accept held or waiting call */
+ − if (sAT_PlusCHLD(CMD_SRC_LCL, CHLD_MOD_HldActAndAcpt, 0) != AT_EXCT)
+ − return FALSE;
+ − break;
+ −
+ − case CM_BUILD_MULTIPARTY:
+ − if (sAT_PlusCHLD(CMD_SRC_LCL, CHLD_MOD_AddHld, 0)!= AT_EXCT)
+ − return FALSE;
+ − break;
+ −
+ − case CM_SPLIT_MULTIPARTY:
+ − if (call_number <= 0)
+ − return FALSE;
+ − sprintf(callId, "%d", call_number);
+ − if (sAT_PlusCHLD(CMD_SRC_LCL, CHLD_MOD_HldActExc, callId)!= AT_EXCT)
+ − return FALSE;
+ − break;
+ −
+ − case CM_ETC:
+ − /* connects two calls and disconnects the subsrciber from both calls */
+ − if (sAT_PlusCHLD(CMD_SRC_LCL, CHLD_MOD_Ect, 0) != AT_EXCT)
+ − return FALSE;
+ − break;
+ −
+ − case CM_CALL_DEFLECTION:
+ − break;
+ −
+ − case CM_CCBS:
+ − TRACE_EVENT("CM_CCBS");
+ − sAT_PlusCHLD(CMD_SRC_LCL, CHLD_MOD_Ccbs, 0);
+ − break;
+ −
+ − case CM_MODIFY:
+ − break;
+ −
+ − case CM_DTMF_ACTIVE:
+ − // xnkulkar SPR-18262
+ − // If there is a DTMF tone command already in the queue, add the current tone also
+ − // in the queue (with start mode). Also, start adding to the queue if we are expecting an acknowledgement
+ − // (rAT_OK) for the previous DTMF tone request sent.
+ − /*OMAPS00108192 a0393213 DTMF START-DTMF STOP properly nested*/
+ − if (mfw_cbuf_num_elements(mfw_cm_dtmf_q_id) != 0)
+ − {
+ − /*dtmf queue not empty*/
+ − if(dtmf_queued.mode==VTS_MOD_ManStop)
+ − {
+ − /*most recent element in the queue corresponds to 'stop'*/
+ − /*queue up*/
+ − modeRetVal = mfw_cbuf_put_mode(mfw_cm_dtmf_q_id, VTS_MOD_ManStart);
+ − retVal = mfw_cbuf_put(mfw_cm_dtmf_q_id, &crss_string);
+ − // If the return values are negative, attempt to Queue the DTMF request failed
+ − if (retVal < 0 || modeRetVal < 0)
+ − {
+ − TRACE_EVENT_P1("ERROR : mfw_cbuf_put failed with error %d", retVal);
+ − TRACE_EVENT_P1("ERROR : mfw_cbuf_put_mode failed with error %d", modeRetVal);
+ − /*
+ − ** Failed to Queue the DTMF request.
+ − */
+ − return(FALSE);
+ − }
+ − /*successfully queued update the internal variable*/
+ − dtmf_queued.mode=VTS_MOD_ManStart;
+ − dtmf_queued.digit=crss_string;
+ − return (TRUE);
+ − }
+ − else
+ − {
+ − /*ignore the key press*/
+ − return (TRUE);
+ − }
+ −
+ − }
+ − else
+ − {
+ − /*dtmf queue empty*/
+ − if(dtmf_sent.valid==TRUE)
+ − {
+ − /*some dtmf has already been sent to ACI and MMI is waiting for rAT_ok*/
+ − if(dtmf_sent.mode==VTS_MOD_ManStop)
+ − {
+ − /*last sent dtmf is STOP - so queue up*/
+ − modeRetVal = mfw_cbuf_put_mode(mfw_cm_dtmf_q_id, VTS_MOD_ManStart);
+ − retVal = mfw_cbuf_put(mfw_cm_dtmf_q_id, &crss_string);
+ − // If the return values are negative, attempt to Queue the DTMF request failed
+ − if (retVal < 0 || modeRetVal < 0)
+ − {
+ − TRACE_EVENT_P1("ERROR : mfw_cbuf_put failed with error %d", retVal);
+ − TRACE_EVENT_P1("ERROR : mfw_cbuf_put_mode failed with error %d", modeRetVal);
+ − /*
+ − ** Failed to Queue the DTMF request.
+ − */
+ − return(FALSE);
+ − }
+ − /*successfully queued update the internal variable*/
+ − dtmf_queued.mode=VTS_MOD_ManStart;
+ − dtmf_queued.digit=crss_string;
+ − return (TRUE);
+ − }
+ − else
+ − {
+ − return (TRUE); /*ignore the key press*/
+ − }
+ − }
+ − else
+ − {
+ − /*we are not waiting for any rAT_ok - so call sAT_PlusVTS*/
+ − if(sAT_PlusVTS(CMD_SRC_LCL, (CHAR)crss_string, VTS_MOD_ManStart) == AT_EXCT)
+ − {
+ − TRACE_EVENT("sAT_PlusVTS() successful");
+ − dtmf_sent.valid=TRUE;
+ − dtmf_sent.mode=VTS_MOD_ManStart;
+ − dtmf_sent.digit=crss_string;
+ − }
+ − else
+ − {
+ − TRACE_EVENT("sAT_PlusVTS() busy or failed");
+ − return (FALSE);
+ − }
+ − }
+ −
+ − }
+ − #ifdef MMI_LINT_WARNING_REMOVAL /*a0393213 lint warnings removal*/
+ − currCmd = AT_CMD_VTS;
+ − #endif
+ − break;
+ −
+ − case CM_DTMF_INACTIVE:
+ − // xnkulkar SPR-18262
+ − // If there is a DTMF tone command already in the queue, add the current tone also
+ − // in the queue (with stop mode). Also, start adding to the queue if we are expecting an acknowledgement
+ − // (rAT_OK) for the previous DTMF tone request sent.
+ − /*OMAPS00108192 a0393213 DTMF START-DTMF STOP properly nested*/
+ − if (mfw_cbuf_num_elements(mfw_cm_dtmf_q_id) != 0)
+ − {
+ − /*dtmf queue not empty*/
+ − if(dtmf_queued.mode==VTS_MOD_ManStart && dtmf_queued.digit==crss_string)
+ − {
+ − /*most recent element in the queue corresponds to START and are of same digit so queue up*/
+ − modeRetVal = mfw_cbuf_put_mode(mfw_cm_dtmf_q_id, VTS_MOD_ManStop);
+ − retVal = mfw_cbuf_put(mfw_cm_dtmf_q_id, &crss_string);
+ − // If the return values are negative, attempt to Queue the DTMF request failed
+ − if (retVal < 0 || modeRetVal < 0)
+ − {
+ − TRACE_EVENT_P1("ERROR : mfw_cbuf_put failed with error %d", retVal);
+ − TRACE_EVENT_P1("ERROR : mfw_cbuf_put_mode failed with error %d", modeRetVal);
+ − /*
+ − ** Failed to Queue the DTMF request.
+ − */
+ − return(FALSE);
+ − }
+ − /*successfully queued update the internal variable*/
+ − dtmf_queued.mode=VTS_MOD_ManStop;
+ − dtmf_queued.digit=crss_string;
+ − return (TRUE);
+ − }
+ − else
+ − {
+ − /*ignore the key press*/
+ − return (TRUE);
+ − }
+ −
+ − }
+ − else
+ − {
+ − /*dtmf queue empty*/
+ − if(dtmf_sent.valid==TRUE)
+ − {
+ − /*some dtmf has already been sent to ACI and MMI is waiting for rAT_ok*/
+ − if(dtmf_sent.mode==VTS_MOD_ManStart && dtmf_sent.digit==crss_string)
+ − {
+ − /*last sent dtmf corresponds to START and are of same digit - so queue up*/
+ − modeRetVal = mfw_cbuf_put_mode(mfw_cm_dtmf_q_id, VTS_MOD_ManStop);
+ − retVal = mfw_cbuf_put(mfw_cm_dtmf_q_id, &crss_string);
+ − // If the return values are negative, attempt to Queue the DTMF request failed
+ − if (retVal < 0 || modeRetVal < 0)
+ − {
+ − TRACE_EVENT_P1("ERROR : mfw_cbuf_put failed with error %d", retVal);
+ − TRACE_EVENT_P1("ERROR : mfw_cbuf_put_mode failed with error %d", modeRetVal);
+ − /*
+ − ** Failed to Queue the DTMF request.
+ − */
+ − return(FALSE);
+ − }
+ − /*successfully queued update the internal variable*/
+ − dtmf_queued.mode=VTS_MOD_ManStop;
+ − dtmf_queued.digit=crss_string;
+ − return (TRUE);
+ − }
+ − else
+ − {
+ − return (TRUE); /*ignore the key press*/
+ − }
+ − }
+ − else
+ − {
+ − /*rAT_ok is not expected. so call sAT_PlusVTS*/
+ − if(sAT_PlusVTS(CMD_SRC_LCL, (CHAR)crss_string, VTS_MOD_ManStop) == AT_EXCT)
+ − {
+ − TRACE_EVENT("sAT_PlusVTS() successful");
+ − dtmf_sent.valid=TRUE;
+ − dtmf_sent.mode=VTS_MOD_ManStop;
+ − dtmf_sent.digit=crss_string;
+ − }
+ − else
+ − {
+ − TRACE_EVENT("sAT_PlusVTS() busy or failed");
+ − return (FALSE);
+ − }
+ − }
+ −
+ − }
+ − res = TRUE;
+ − cm_signal(E_CM_DTMF, &res);
+ − break;
+ −
+ − case CM_DTMF_AUTO:
+ − /*OMAPS00108192 a0393213(R.Prabakar)
+ − As part of the issue CM_DTMF_ACTIVE and CM_DTMF_INACTIVE cases modified. But this case is not modified
+ − because this case is felt irrelavant. If required the same logic can be extended to this case also*/
+ − if (mfw_cbuf_num_elements(mfw_cm_dtmf_q_id) != 0)
+ − {
+ − /*
+ − ** There are already DTMF tones queued to be sent, so queue this request to.
+ − */
+ − modeRetVal = mfw_cbuf_put_mode(mfw_cm_dtmf_q_id, VTS_MOD_Auto);
+ − retVal = mfw_cbuf_put(mfw_cm_dtmf_q_id, &crss_string);
+ − if (retVal < 0 || modeRetVal < 0)
+ − {
+ − TRACE_EVENT_P1("ERROR : mfw_cbuf_put failed with error %d", retVal);
+ − TRACE_EVENT_P1("ERROR : mfw_cbuf_put_mode failed with error %d", modeRetVal);
+ − /*
+ − ** Failed to Queue the DTMF request.
+ − */
+ − return(FALSE);
+ − }
+ − }
+ − else
+ − {
+ − if (sAT_PlusVTS(CMD_SRC_LCL, (CHAR)crss_string, VTS_MOD_Auto) != AT_EXCT)
+ − {
+ − /*
+ − ** The attempt to send an immediate DTMF failed.
+ − ** Add the failed attempt onto the DTMF queue and wait.
+ − */
+ − modeRetVal = mfw_cbuf_put_mode(mfw_cm_dtmf_q_id, VTS_MOD_Auto);
+ − retVal = mfw_cbuf_put(mfw_cm_dtmf_q_id, &crss_string);
+ − if (retVal < 0 || modeRetVal < 0)
+ − {
+ − TRACE_EVENT_P1("ERROR : mfw_cbuf_put failed with error %d", retVal);
+ − TRACE_EVENT_P1("ERROR : mfw_cbuf_put_mode failed with error %d", modeRetVal);
+ − /*
+ − ** Failed to Queue the DTMF request.
+ − */
+ − return(FALSE);
+ − }
+ − }
+ − }
+ − break;
+ −
+ − default:
+ − break;
+ − }
+ − return TRUE;
+ − }
+ −
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : MMI-Framework (8417) MODULE : MFW_CM |
+ − | STATE : code ROUTINE : send_queued_dtmf_tone |
+ − +--------------------------------------------------------------------+
+ −
+ −
+ − PURPOSE : Check the DTMF Queue and if required send the next DTMF Tone Request.
+ −
+ − */
+ − static void send_queued_dtmf_tone(void)
+ − {
+ − SHORT retVal;
+ − UBYTE qdtmf;
+ − //xnkulkar SPR-18262: Added these variables to store the Mode
+ − T_ACI_VTS_MOD vts_mode = VTS_MOD_NotPresent;
+ −
+ − TRACE_EVENT("send_queued_dtmf_tone()");
+ − /*OMAPS00108192 a0393213*/
+ − if (mfw_cbuf_num_elements(mfw_cm_dtmf_q_id) > 0)
+ − {
+ − /*dtmf queue has some elements - so dequeue and send to ACI*/
+ − // Get the mode (Start / Stop) corresponding to the DTMF tone
+ − vts_mode = (T_ACI_VTS_MOD)mfw_cbuf_get_mode(mfw_cm_dtmf_q_id);
+ − // Get the DTMF key for which the tone is to be sent from the queue
+ − retVal = mfw_cbuf_get(mfw_cm_dtmf_q_id, &qdtmf);
+ − if (retVal > 0)
+ − {
+ − if (sAT_PlusVTS(CMD_SRC_LCL, (CHAR)qdtmf, vts_mode) == AT_EXCT)
+ − {
+ − dtmf_sent.valid=TRUE;
+ − dtmf_sent.mode=vts_mode;
+ − dtmf_sent.digit=qdtmf;
+ − }
+ −
+ − }
+ − else
+ − {
+ − TRACE_EVENT_P1("ERROR : mfw_cbuf_get failed with error value %d", retVal);
+ − dtmf_sent.valid=FALSE;
+ − }
+ −
+ − }
+ − else
+ − {
+ − dtmf_sent.valid=FALSE;
+ − }
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : MMI-Framework (8417) MODULE : MFW_CM |
+ − | STATE : code ROUTINE : resetDTMFQueue |
+ − +--------------------------------------------------------------------+
+ − PURPOSE : reset the dtmf queue
+ − */
+ − /*OMAPS00107103 (no dtmf tones for simultaneous key press) a0393213(R.Prabakar) - function added*/
+ − void resetDTMFQueue()
+ − {
+ − TRACE_EVENT("resetDTMFQueue");
+ − mfw_cbuf_reset(mfw_cm_dtmf_q_id);
+ − //expectRatOk=FALSE;
+ − dtmf_sent.valid=FALSE;
+ − }
+ −
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : MMI-Framework (8417) MODULE : MFW_CM |
+ − | STATE : code ROUTINE : cm_ok_dtmf |
+ − +--------------------------------------------------------------------+
+ −
+ −
+ − PURPOSE : DTMF activation is successful.
+ −
+ − */
+ −
+ − void cm_ok_dtmf(void)
+ − {
+ − UBYTE res;
+ − #ifdef MMI_LINT_WARNING_REMOVAL /*a0393213 lint warnings removal*/
+ − currCmd = AT_CMD_NONE;
+ − #endif
+ − res = TRUE;
+ − cm_signal(E_CM_DTMF, &res);
+ −
+ − send_queued_dtmf_tone();
+ −
+ − return;
+ − }
+ −
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : MMI-Framework (8417) MODULE : MFW_CM |
+ − | STATE : code ROUTINE : cm_error_tdmf |
+ − +--------------------------------------------------------------------+
+ −
+ −
+ − PURPOSE : DTMF activation is failed.
+ −
+ − */
+ −
+ − void cm_error_dtmf(void)
+ − {
+ − UBYTE res;
+ − #ifdef MMI_LINT_WARNING_REMOVAL /*a0393213 lint warnings removal*/
+ − currCmd = AT_CMD_NONE;
+ − #endif
+ − res = FALSE;
+ − cm_signal(E_CM_DTMF, &res);
+ −
+ − send_queued_dtmf_tone();
+ −
+ − }
+ −
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : MMI-Framework (8417) MODULE : MFW_CM |
+ − | STATE : code ROUTINE : cm_result_cmd |
+ − +--------------------------------------------------------------------+
+ −
+ −
+ − PURPOSE : Acknowledgement for the requested ss command.
+ −
+ − */
+ −
+ − void cm_result_cmd(T_ACI_CMD_SRC src, UBYTE result)
+ − {
+ − SHORT call_number;
+ −
+ − TRACE_EVENT_P1("cm_result_cmd(), cmd_hold = %d", cmd_hold);
+ −
+ − /* MC changed all the "if"s to a switch to allow default 11/04/02*/
+ − switch (cmd_hold)
+ − {
+ − case MFW_CM_MT_REJECT:
+ − break; /* CONQUEST 6040- MC- put a break in the case so no action taken*/
+ − case MFW_CM_MPTY_TERMINATED:
+ − case MFW_CM_TERMINATED:
+ −
+ − {
+ − if (result EQ Present)
+ − cm_ok_disconnect(CMD_SRC_LCL, 0);
+ − return;
+ − }
+ − // break; // RAVI
+ −
+ − case MFW_CM_MT_ACCEPT:
+ − {
+ − /*
+ − * active call on hold, accept new incoming call
+ − */
+ − cmd_hold = 0;
+ − if (result EQ Present)
+ − /*
+ − * Call on hold was successful
+ − */
+ − cm_ok_connect();
+ −
+ − else
+ − {
+ − if (cm_search_callId(CAL_STAT_Active, &call_number) != CM_OK)
+ − return;
+ − cmd.call_number = call_number;
+ − #ifdef MMI_LINT_WARNING_REMOVAL /*a0393213 lint warnings removal*/
+ − cc_id = 0; // ???
+ − #endif
+ − }
+ − }
+ − break;
+ −
+ −
+ − case MFW_CM_HOLD_AND_DIAL:
+ − {
+ − /*
+ − * active call on hold, accept new incoming call
+ − */
+ − cmd_hold = 0;
+ − if (result EQ Present)
+ − /*
+ − * Call on hold was successful
+ − */
+ − cm_ok_connect();
+ −
+ − else
+ − {
+ − if (cm_search_callId(CAL_STAT_Active, &call_number) != CM_OK)
+ − return;
+ − cmd.call_number = call_number;
+ − #ifdef MMI_LINT_WARNING_REMOVAL /*a0393213 lint warnings removal*/
+ − cc_id = 0; // ???
+ − #endif
+ − }
+ − }
+ − break;
+ −
+ − case MFW_CM_1_SEND:
+ − {
+ −
+ − cmd_hold = 0;
+ − if (result == Present)
+ − {
+ − // MMI-SPR 13873 xkundadu
+ − // Handling of 1SEND
+ − // If the user presses 1SEND, release active calls and accept
+ − // the WAITING call
+ − if (dis_connect.call_number NEQ -1)
+ − {
+ − // If there is an active call, disconnect it.
+ − cm_ok_disconnect(CMD_SRC_LCL, 0);
+ − }
+ −
+ − if (!cmd.call_number)
+ − {
+ − // If there is waiting call, accept the call
+ − cm_ok_connect();
+ − }
+ − cmd.call_number = -1;
+ − }
+ −
+ − }
+ − break;
+ −
+ − /* Marcus: CCBS: 14/11/2002: Start */
+ − case MFW_CM_CCBS_REGISTER:
+ −
+ − TRACE_EVENT("MFW_CM_CCBS_REGISTER");
+ −
+ − cmd_hold = 0;
+ −
+ − if (result == Present)
+ − {
+ − TRACE_EVENT("result == Present");
+ − cm_ccbs_ok();
+ − }
+ − else /* result is NotPresent */
+ − {
+ − TRACE_EVENT("result != Present");
+ − cm_ccbs_error();
+ − }
+ − return;
+ −
+ − case MFW_CM_CCBS_RECALL:
+ −
+ − TRACE_EVENT("MFW_CM_CCBS_RECALL");
+ −
+ − cmd_hold = 0;
+ −
+ − if (result == Present)
+ − {
+ − TRACE_EVENT("result == Present");
+ − cm_ccbs_ok();
+ − }
+ − else /* result is NotPresent */
+ − {
+ − TRACE_EVENT("result != Present");
+ − cm_ccbs_error();
+ − }
+ − return;
+ − /* Marcus: CCBS: 14/11/2002: Start */
+ −
+ − default:/*For other command types ensure correct result is passed up to BMI*/
+ − {
+ − cmd.result = result;
+ − }
+ − break;
+ − }
+ −
+ −
+ − #if defined (WIN32)
+ − {
+ − char buf[40];
+ − sprintf (buf, "Event CM_COMMAND for %d", cmd.call_number);
+ − TRACE_EVENT (buf);
+ − sprintf (buf, "Result %d Command %d",cmd.result, cmd.command);
+ − TRACE_EVENT (buf);
+ − }
+ − #endif
+ − cmd.result = result;
+ − cm_signal(E_CM_COMMAND, &cmd);
+ − }
+ −
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT: MMI-Framework (8417) MODULE: MFW_CM |
+ − | STATE : code ROUTINE: cm_cvt_speed_type |
+ − +--------------------------------------------------------------------+
+ −
+ −
+ − PURPOSE : This function is used to convert the type of data rate
+ − used by MFW to the type of data rate used by ACI.
+ −
+ − */
+ −
+ − LOCAL T_ACI_BS_SPEED cm_cvt_speed_type ( T_MFW_CM_DATA_SPEED speed )
+ − {
+ − switch ( speed )
+ − {
+ − case ( SPEED_300 ): return BS_SPEED_300_V110;
+ − case ( SPEED_1200 ): return BS_SPEED_1200_V110;
+ − case ( SPEED_2400 ): return BS_SPEED_2400_V110;
+ − case ( SPEED_4800 ): return BS_SPEED_4800_V110;
+ − case ( SPEED_9600 ): return BS_SPEED_9600_V110;
+ − case ( SPEED_14400 ): return BS_SPEED_14400_V110;
+ − default: return BS_SPEED_NotPresent;
+ − }
+ − }
+ −
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT: MMI-Framework (8417) MODULE: MFW_CM |
+ − | STATE : code ROUTINE: cm_cvt_bs_type |
+ − +--------------------------------------------------------------------+
+ −
+ −
+ − PURPOSE : This function is used to convert the type of bearer service
+ − used by MFW to the type of bearer service used by ACI.
+ −
+ − */
+ −
+ − LOCAL T_ACI_CBST_NAM cm_cvt_bs_type ( T_MFW_CM_BS bs )
+ − {
+ − switch ( bs )
+ − {
+ − case ( Asynch ): return CBST_NAM_Asynch;
+ − case ( Synch ): return CBST_NAM_Synch;
+ − default: return CBST_NAM_NotPresent;
+ − }
+ − }
+ −
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT: MMI-Framework (8417) MODULE: MFW_CM |
+ − | STATE : code ROUTINE: cm_cvt_ce_type |
+ − +--------------------------------------------------------------------+
+ −
+ −
+ − PURPOSE : This function is used to convert the data mode
+ − used by MFW to the data mode used by ACI.
+ −
+ − */
+ −
+ − LOCAL T_ACI_CBST_CE cm_cvt_ce_type ( T_MFW_CM_CE ce )
+ − {
+ − switch ( ce )
+ − {
+ − case ( Transparent ): return CBST_CE_Transparent;
+ − case ( NonTransparent ): return CBST_CE_NonTransparent;
+ − default: return CBST_CE_NotPresent;
+ − }
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT: MMI-Framework (8417) MODULE: MFW_CM |
+ − | STATE : code ROUTINE: cm_set_bc_para |
+ − +--------------------------------------------------------------------+
+ −
+ −
+ − PURPOSE : Set bearer parameter for mobile originated calls.
+ −
+ − */
+ −
+ − void cm_set_bc_para(T_MFW_CM_BC_PARA * bc, UBYTE ti)
+ − {
+ − TRACE_FUNCTION ("cm_set_bc_para()");
+ − #ifdef FAX_AND_DATA
+ − sAT_PlusCBST(CMD_SRC_LCL,
+ − cm_cvt_speed_type ((T_MFW_CM_DATA_SPEED)bc->rate),
+ − cm_cvt_bs_type ((T_MFW_CM_BS)bc->bearer_serv),
+ − cm_cvt_ce_type ((T_MFW_CM_CE)bc->conn_elem));
+ − #endif /* FAX_AND_DATA */
+ − }
+ −
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT: MMI-Framework (8417) MODULE: MFW_CM |
+ − | STATE : code ROUTINE: cm_notify |
+ − +--------------------------------------------------------------------+
+ −
+ −
+ − PURPOSE : Change of SS status from call party.
+ −
+ − */
+ − void cm_notify(T_ACI_CSSU_CODE code,
+ − SHORT index,
+ − UBYTE *number)
+ − { char debug[50];
+ − sprintf(debug,"cm_notify(), code:%d, index:%d" , code, index);
+ − TRACE_EVENT(debug);
+ − if (number)
+ − notify.call_number = index;
+ −
+ − if (code == CSSU_CODE_OnHold)
+ − notify.notification = MFW_CM_HOLD;
+ − if (code == CSSU_CODE_Retrieved)
+ − notify.notification = MFW_CM_RETRIEVED;
+ −
+ − cm_signal(E_CM_NOTIFY, ¬ify);
+ − }
+ −
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : MMI-Framework (8417) MODULE : MFW_CM |
+ − | STATE : code ROUTINE : cm_get_aoc_value |
+ − +--------------------------------------------------------------------+
+ −
+ −
+ − PURPOSE : Getting AoC (advice of charge) value.
+ −
+ − */
+ −
+ − T_MFW cm_get_aoc_value(UBYTE request_type, T_MFW_CM_AOC_INFO *aoc_info)
+ − {
+ − T_ACI_RPCT_VAL rpuct;
+ −
+ − TRACE_FUNCTION ("cm_get_aoc_value()");
+ −
+ − switch (request_type)
+ − {
+ − /* Price pro unit and currency table */
+ − case CM_AOC_PUCT:
+ − if (qAT_PlusCPUC(CMD_SRC_LCL,
+ − (CHAR *)aoc_info->cur,
+ − (CHAR *)aoc_info->ppu) == AT_CMPL)
+ − {
+ − aoc_info->requested_type = CM_AOC_PUCT;
+ − return CM_OK;
+ − }
+ − else
+ − return CM_NO_AOC;
+ − // break; // RAVI
+ −
+ − /* maximum value of accumulated Call Meter */
+ − case CM_AOC_ACMMAX:
+ − if (qAT_PlusCAMM(CMD_SRC_LCL, &aoc_info->acm_max) == AT_CMPL)
+ − {
+ − aoc_info->requested_type = CM_AOC_ACMMAX;
+ − return CM_OK;
+ − }
+ − else
+ − return CM_NO_AOC;
+ − // break; // RAVI
+ −
+ − /* Accumulated Call Meter */
+ − case CM_AOC_ACM:
+ − if (qAT_PlusCACM(CMD_SRC_LCL, &aoc_info->acm) == AT_CMPL)
+ − {
+ − aoc_info->requested_type = CM_AOC_ACM;
+ − return CM_OK;
+ − }
+ − else
+ − return CM_NO_AOC;
+ − // break; // RAVI
+ −
+ − case CM_AOC_CCM:
+ − if (qAT_PlusCAOC(CMD_SRC_LCL, &aoc_info->ccm) == AT_CMPL)
+ − {
+ − aoc_info->requested_type = CM_AOC_CCM;
+ − return CM_OK;
+ − }
+ − else
+ − return CM_NO_AOC;
+ − // break; // RAVI
+ −
+ − case CM_AOC_TIMERS:
+ − if (qAT_PercentCTV(CMD_SRC_LCL, &aoc_info->actual_call_timer) == AT_CMPL)
+ − {
+ − aoc_info->requested_type = CM_AOC_TIMERS;
+ − return CM_OK;
+ − }
+ − else
+ − return CM_NO_AOC;
+ − // break; // RAVI
+ −
+ − case CM_AOC_CCM_PUCT:
+ − if (qAT_PercentCAOC(CMD_SRC_LCL, (CHAR *)aoc_info->cur, (CHAR *)aoc_info->ccm_puct) == AT_CMPL)
+ − {
+ − aoc_info->requested_type = CM_AOC_CCM_PUCT;
+ − return CM_OK;
+ − }
+ − else
+ − return CM_NO_AOC;
+ − // break; // RAVI
+ −
+ − case CM_AOC_ACM_PUCT:
+ − if (qAT_PercentCACM(CMD_SRC_LCL, (CHAR *)aoc_info->cur, (CHAR *)aoc_info->acm_puct) == AT_CMPL)
+ − {
+ − aoc_info->requested_type = CM_AOC_ACM_PUCT;
+ − return CM_OK;
+ − }
+ − else
+ − return CM_NO_AOC;
+ − case CM_AOC_RAW_PUCT:
+ − if (qAT_PercentRPCT(CMD_SRC_LCL, &rpuct) == AT_CMPL)
+ − {
+ − aoc_info->requested_type = CM_AOC_RAW_PUCT;
+ − strncpy((char *)aoc_info->cur, (char *)rpuct.currency, MAX_CUR_LEN);
+ − aoc_info->eppu = rpuct.eppu;
+ − aoc_info->exp = rpuct.exp;
+ − aoc_info->sexp = rpuct.sexp;
+ − return CM_OK;
+ − }
+ − else
+ − return CM_NO_AOC;
+ − // break; // RAVI
+ −
+ − default:
+ − return CM_NO_AOC;
+ − }
+ − }
+ −
+ −
+ −
+ − /*
+ − +----------------------------------------------------------------------+
+ − | PROJECT : MMI-Framework (8417) MODULE : MFW_CM |
+ − | STATE : code ROUTINE : cm_reset_aoc_value |
+ − +----------------------------------------------------------------------+
+ −
+ −
+ − PURPOSE : Setting AoC (advice of charge) value.
+ −
+ − */
+ −
+ − T_MFW cm_set_aoc_value(UBYTE request_type,
+ − T_MFW_CM_AOC_INFO *aoc_info,
+ − UBYTE *pwd)
+ − {
+ − TRACE_FUNCTION ("cm_reset_aoc_value()");
+ −
+ − switch (request_type)
+ − {
+ − case CM_AOC_PUCT:
+ − if (sAT_PlusCPUC(CMD_SRC_LCL, (CHAR *)aoc_info->cur,
+ − (CHAR *)aoc_info->ppu, (CHAR *)pwd) != AT_EXCT)
+ − return CM_ERROR;
+ − break;
+ −
+ − case CM_AOC_ACMMAX:
+ − if (sAT_PlusCAMM(CMD_SRC_LCL, aoc_info->acm_max,
+ − (CHAR *)pwd) != AT_EXCT)
+ − return CM_ERROR;
+ − break;
+ −
+ − case CM_AOC_ACM:
+ − if (sAT_PlusCACM(CMD_SRC_LCL, (CHAR *)pwd) != AT_EXCT)
+ − return CM_ERROR;
+ − break;
+ −
+ − default:
+ − return CM_ERROR;
+ − }
+ −
+ − return CM_OK;
+ − }
+ −
+ −
+ − /*
+ − +----------------------------------------------------------------------+
+ − | PROJECT : MMI-Framework (8417) MODULE : MFW_CM |
+ − | STATE : code ROUTINE : cm_cvt_cmd |
+ − +----------------------------------------------------------------------+
+ −
+ −
+ − PURPOSE : Convert AoC command
+ −
+ − */
+ −
+ − UBYTE cm_cvt_cmd(T_ACI_AT_CMD cmdId)
+ − {
+ − switch (cmdId)
+ − {
+ − case AT_CMD_CACM: return CM_AOC_ACM;
+ − case AT_CMD_CAMM: return CM_AOC_ACMMAX;
+ − case AT_CMD_CPUC: return CM_AOC_PUCT;
+ − default: return CM_AOC_UNKNOWN;
+ − }
+ − }
+ −
+ −
+ − /*
+ − +----------------------------------------------------------------------+
+ − | PROJECT : MMI-Framework (8417) MODULE : MFW_CM |
+ − | STATE : code ROUTINE : cm_ok_aoc |
+ − +----------------------------------------------------------------------+
+ −
+ −
+ − PURPOSE : Setting AoC is successful.
+ −
+ − */
+ −
+ − void cm_ok_aoc(T_ACI_AT_CMD cmdId)
+ − {
+ − T_MFW_CM_AOC_CNF aoc_cnf;
+ −
+ − aoc_cnf.requested_type = cm_cvt_cmd(cmdId);
+ − aoc_cnf.result = CM_AOC_CONF_OK;
+ − cm_signal(E_CM_AOC_CNF, &aoc_cnf);
+ − }
+ −
+ −
+ − /*
+ − +----------------------------------------------------------------------+
+ − | PROJECT : MMI-Framework (8417) MODULE : MFW_CM |
+ − | STATE : code ROUTINE : cm_error_aoc |
+ − +----------------------------------------------------------------------+
+ −
+ −
+ − PURPOSE : Setting AoC is failure.
+ −
+ − */
+ −
+ − void cm_error_aoc(T_ACI_AT_CMD cmdId, T_ACI_CME_ERR reason)
+ − {
+ − T_MFW_CM_AOC_CNF aoc_cnf;
+ −
+ − aoc_cnf.requested_type = cm_cvt_cmd(cmdId);
+ − aoc_cnf.result = CM_AOC_CONF_UNKNOWN;
+ −
+ − if (reason EQ CME_ERR_SimPin2Req)
+ − aoc_cnf.result = CM_AOC_CONF_SIMPIN2REQ;
+ −
+ − if (reason EQ CME_ERR_WrongPasswd)
+ − aoc_cnf.result = CM_AOC_CONF_WRONGPASSWD;
+ −
+ − if (reason EQ CME_ERR_OpNotAllow)
+ − aoc_cnf.result = CM_AOC_CONF_OPNOTALLOW;
+ −
+ − if (reason EQ CME_ERR_AcmResetNeeded)
+ − aoc_cnf.result = CM_AOC_CONF_ACMRESETNEEDED;
+ −
+ − cm_signal(E_CM_AOC_CNF, &aoc_cnf);
+ − }
+ −
+ −
+ − /*
+ − +-----------------------------------------------------------------+
+ − | PROJECT : MMI-Framework (8417) MODULE : MFW_CM |
+ − | STATE : code ROUTINE : rAT_PercentCTV |
+ − +-----------------------------------------------------------------+
+ −
+ −
+ − PURPOSE : manage timer in every second
+ −
+ − */
+ −
+ − void rAT_PercentCTV()
+ − {
+ − TRACE_FUNCTION("rAT_PercentCTV()");
+ − cm_signal(E_CM_TIMER_EVERY_SECOND, 0);
+ − }
+ −
+ −
+ − /*
+ − +-----------------------------------------------------------------+
+ − | PROJECT : MMI-Framework (8417) MODULE : MFW_CM |
+ − | STATE : code ROUTINE : rAT_PlusCCCM |
+ − +-----------------------------------------------------------------+
+ −
+ −
+ − PURPOSE :
+ −
+ − */
+ −
+ − void rAT_PlusCCCM(LONG *ccm)
+ − {
+ − T_MFW_CM_AOC_INFO aoc_info;
+ − T_ACI_RPCT_VAL rpuct;
+ −
+ − TRACE_FUNCTION("rAT_PlusCCCM()");
+ −
+ − memset(&aoc_info, 0, sizeof(T_MFW_CM_AOC_INFO));
+ −
+ − qAT_PlusCAMM(CMD_SRC_LCL, &aoc_info.acm_max);
+ − qAT_PlusCACM(CMD_SRC_LCL, &aoc_info.acm);
+ − aoc_info.ccm = *ccm;
+ − qAT_PercentCTV(CMD_SRC_LCL, &aoc_info.actual_call_timer);
+ − qAT_PercentRPCT(CMD_SRC_LCL, &rpuct);
+ − strncpy((char *)aoc_info.cur, (char *)rpuct.currency, MAX_CUR_LEN);
+ − aoc_info.requested_type = CM_AOC_CCM;
+ − aoc_info.eppu = rpuct.eppu;
+ − aoc_info.exp = rpuct.exp;
+ − aoc_info.sexp = rpuct.sexp;
+ −
+ − cm_signal(E_CM_AOC, &aoc_info);
+ − }
+ −
+ −
+ − /*
+ − +----------------------------------------------------------------+
+ − | PROJECT : MMI-Framework (8417) MODULE : MFW_CM |
+ − | STATE : code ROUTINE : cm_set_redial |
+ − +----------------------------------------------------------------+
+ −
+ −
+ − PURPOSE : Set redial mode (automatic/manual).
+ −
+ − */
+ −
+ − void cm_set_redial(UBYTE redial_mode)
+ − {
+ − // U8 version; // RAVI
+ − // Apr 14, 2005 REF: CRR 29991 xpradipg
+ − // local definition
+ − #ifdef FF_MMI_OPTIM
+ − T_MFW_CM_BLACKLIST_LIST black_list;
+ − #endif
+ −
+ − TRACE_FUNCTION ("cm_set_redial()");
+ −
+ − if (redial_mode == CM_REDIAL_BLACKLIST)
+ − {
+ − memset(&black_list, 0, sizeof(T_MFW_CM_BLACKLIST_LIST));
+ − // Apr 14, 2005 REF: CRR 29991 xpradipg
+ − // reset the file contents
+ − #ifdef FF_MMI_OPTIM
+ − if(flash_MMI_blackList_write((U8 *)&black_list, sizeof(T_MFW_CM_BLACKLIST_LIST),0) < 0)
+ − TRACE_FUNCTION(" Error writing into file");
+ − #endif
+ − return;
+ − }
+ −
+ − if (redial_mode == CM_REDIAL_OFF
+ − || redial_mode == CM_REDIAL_AUTO
+ − || redial_mode == CM_REDIAL_MANU)
+ − {
+ − redial_stat = redial_mode;
+ −
+ − /* write redialing mode to EEPROM */
+ −
+ − FFS_flashData.redial_mode =redial_mode;
+ − flash_write();
+ −
+ − }
+ − }
+ −
+ −
+ − /*
+ − +---------------------------------------------------------------------+
+ − | PROJECT : MMI-Framework (8417) MODULE : MFW_CM |
+ − | STATE : code ROUTINE : cm_get_redial_mode |
+ − +---------------------------------------------------------------------+
+ −
+ −
+ − PURPOSE : Request the setting of redial mode (automatic/manual).
+ −
+ − */
+ −
+ − T_MFW cm_get_redial_mode(void)
+ − {
+ − return redial_stat;
+ − }
+ −
+ −
+ −
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT: MMI-Framework (8417) MODULE: MFW_CM |
+ − | STATE : code ROUTINE: cm_stop_redialTim |
+ − +--------------------------------------------------------------------+
+ −
+ −
+ − PURPOSE : Stop redialing time.
+ −
+ − */
+ −
+ − void cm_stop_redialTim(void)
+ − {
+ − if (!redial_count)
+ − timStop(redialTim1);
+ −
+ − if (redial_count >= 1 AND redial_count <= 3)
+ − timStop(redialTim24);
+ −
+ − if (redial_count >= 4 AND redial_count < MAX_REDIAL_ATTEMPT)
+ − timStop(redialTim5);
+ − redial_count = 0;
+ − rdl.left_attempts = 0;
+ −
+ − /*
+ − reset the counter
+ − */
+ −
+ − call_stat = MFW_CALL_FREE;
+ − call_type = MFW_CALL_FREE;
+ − cc_stat.type = MFW_CALL_FREE;
+ − }
+ −
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT: MMI-Framework (8417) MODULE: MFW_CM |
+ − | STATE : code ROUTINE: cm_redial_abort |
+ − +--------------------------------------------------------------------+
+ −
+ −
+ − PURPOSE : Stop redialing from MMI.
+ −
+ − */
+ −
+ − void cm_redial_abort(void)
+ − {
+ −
+ − TRACE_FUNCTION ("cm_redial_abort()");
+ −
+ − if (call_stat == REDIALING_CALL OR call_stat == OUTGOING_CALL)
+ − cm_stop_redialTim();
+ −
+ − rdl.redial_mode = CM_REDIAL_ABORTED;
+ − cm_signal(E_CM_REDIAL, &rdl);
+ − }
+ −
+ −
+ − /*
+ − +---------------------------------------------------------------------+
+ − | PROJECT: MMI-Framework (8417) MODULE: MFW_CM |
+ − | STATE : code ROUTINE: cm_autoredial_start |
+ − +---------------------------------------------------------------------+
+ −
+ −
+ − PURPOSE : start autoredial.
+ −
+ − */
+ −
+ − void cm_autoredial_start(void)
+ − {
+ − timStart(redialTim1);
+ − }
+ −
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT: MMI-Framework (8417) MODULE: MFW_CM |
+ − | STATE : code ROUTINE: cm_redial_timeout |
+ − +--------------------------------------------------------------------+
+ −
+ −
+ − PURPOSE : Call back from system clock for redialing time interval.
+ −
+ − */
+ −
+ − static int cm_redial_timeout(MfwEvt e, MfwTim *t)
+ − {
+ − CHAR number[MFW_NUM_LEN+MAX_LEN+1];
+ − int max_num_size = MFW_NUM_LEN+MAX_LEN+1;
+ −
+ − TRACE_FUNCTION ("cm_redial_timeout()");
+ −
+ − memset(number, 0, sizeof(number));
+ − mfwStrncpy(number, (CHAR *)cc_stat.prefix, max_num_size);
+ − max_num_size -= strlen((char *)cc_stat.prefix);
+ −
+ − if ((cc_stat.ton EQ MFW_TON_INTERNATIONAL) AND (cc_stat.number[0] != '+'))
+ − {
+ − strcat(number, "+");
+ − max_num_size--;
+ − }
+ −
+ − strncat(number, (CHAR *)cc_stat.number, max_num_size);
+ −
+ − switch (redial_stat)
+ − {
+ − case CM_REDIAL_AUTO:
+ − if (sAT_Dn(CMD_SRC_LCL,
+ − (CHAR *)number,
+ − D_CLIR_OVRD_Default,
+ − D_CUG_CTRL_NotPresent,
+ − D_TOC_Voice) NEQ AT_EXCT)
+ − {
+ − TRACE_ERROR("sAT_Dn error");
+ − return 0;
+ − }
+ −
+ − call_stat = OUTGOING_CALL;
+ −
+ − cm_search_callId(CAL_STAT_Dial, &cc_stat.call_number);
+ − cc_stat.type = REDIALING_CALL;
+ −
+ − rdl.redial_mode = CM_REDIAL_ATTEMPT;
+ − rdl.call_id = cc_stat.call_number;
+ − mfwStrncpy((char *)rdl.number, (char *)cc_stat.number, MFW_NUM_LEN);
+ − #ifdef NO_ASCIIZ
+ − rdl.name.len = cc_stat.name.len;
+ − memcpy(rdl.name.data,
+ − cc_stat.name.data,
+ − cc_stat.name.len);
+ − #else
+ − mfwStrncpy((char *)rdl.name, (char *)cc_stat.name, MFW_TAG_LEN);
+ − // strcpy((char *)rdl.subaddr, (char *)cc_stat.subaddr);
+ − #endif
+ − rdl.ton = cc_stat.ton;
+ − rdl.type = cc_stat.mode;
+ − redial_count++;
+ − rdl.left_attempts = MAX_REDIAL_ATTEMPT - redial_count;
+ − cm_signal(E_CM_REDIAL, &rdl);
+ − return 1;
+ −
+ − case CM_REDIAL_MANU:
+ − rdl.redial_mode = CM_REDIAL_MANU;
+ − mfwStrncpy((char *)rdl.number, (char *)cc_stat.number, MFW_NUM_LEN);
+ − #ifdef NO_ASCIIZ
+ − rdl.name.len = cc_stat.name.len;
+ − memcpy(rdl.name.data,
+ − cc_stat.name.data,
+ − cc_stat.name.len);
+ − #else
+ − mfwStrncpy((char *)rdl.name, (char *)cc_stat.name, MFW_TAG_LEN);
+ − #endif
+ − rdl.ton = cc_stat.ton;
+ − rdl.type = cc_stat.mode;
+ − rdl.left_attempts = MAX_REDIAL_ATTEMPT - redial_count;
+ −
+ − cm_signal(E_CM_REDIAL, &rdl);
+ − return 1;
+ −
+ − default:
+ − return 0;
+ − }
+ − }
+ −
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT: MMI-Framework (8417) MODULE: MFW_CM |
+ − | STATE : code ROUTINE: cm_redial |
+ − +--------------------------------------------------------------------+
+ −
+ −
+ − PURPOSE : Start the manual redialing.
+ −
+ − */
+ −
+ − void cm_redial()
+ − {
+ − char buf[80];
+ −
+ − int max_buf_size = sizeof(buf);
+ −
+ − TRACE_FUNCTION ("cm_redial()");
+ −
+ − buf[0] = '\0';
+ −
+ − mfwStrncpy(buf, (char *)cc_stat.prefix, max_buf_size);
+ − max_buf_size -= strlen((char *)cc_stat.prefix);
+ −
+ − if ((cc_stat.ton EQ MFW_TON_INTERNATIONAL) AND (cc_stat.number[0] != '+'))
+ − {
+ − strcat(buf, "+");
+ − max_buf_size--;
+ − }
+ −
+ − strncat(buf, (char *)cc_stat.number, max_buf_size);
+ −
+ − if (sAT_Dn(CMD_SRC_LCL, buf, D_CLIR_OVRD_Default, D_CUG_CTRL_NotPresent, D_TOC_Voice) NEQ AT_EXCT) /*a0393213 compiler warning removal -- -1 changed to respective enum value*/
+ − {
+ − TRACE_ERROR("sAT_Dn error");
+ − }
+ −
+ − call_stat = OUTGOING_CALL;
+ − cc_stat.type = REDIALING_CALL;
+ − redial_count++;
+ − }
+ −
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT: MMI-Framework (8417) MODULE: MFW_CM |
+ − | STATE : code ROUTINE: cm_redial_get_count |
+ − +--------------------------------------------------------------------+
+ −
+ −
+ − PURPOSE : returns the counter of call attempt
+ −
+ − */
+ − UBYTE cm_redial_get_count(void)
+ − {
+ − return redial_count;
+ − }
+ −
+ −
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT: MMI-Framework (8417) MODULE: MFW_CM |
+ − | STATE : code ROUTINE: cm_cvt_call_status |
+ − +--------------------------------------------------------------------+
+ −
+ −
+ − PURPOSE : Convert the call status.
+ −
+ − */
+ −
+ − LOCAL T_MFW_CM_CALL_STAT cm_cvt_call_status( T_ACI_CAL_STAT stat )
+ − {
+ − switch ( stat )
+ − {
+ − case ( CAL_STAT_Held ): return CALL_HELD;
+ − case ( CAL_STAT_Active ): return CALL_ACTIVE;
+ − case ( CAL_STAT_Wait ): return CALL_WAIT;
+ − case ( CAL_STAT_Dial ): return CALL_DIAL;
+ − case (CAL_STAT_Alerting): return CALL_ALERT;
+ − case (CAL_STAT_DeactiveReq): return CALL_DEACTIVE;
+ − default: return NOT_PRESENT;
+ − }
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT: MMI-Framework (8417) MODULE: MFW_CM |
+ − | STATE : code ROUTINE: cm_cvt_call_status |
+ − +--------------------------------------------------------------------+
+ −
+ −
+ − PURPOSE : Request the call status.
+ −
+ − */
+ −
+ − T_MFW_CM_CALL_TYPE cm_cvt_call_mode( T_ACI_CAL_MODE type )
+ − {
+ − TRACE_EVENT_P1("cm_cnt_call_mode %d", type);
+ − switch ( type )
+ − {
+ − case ( CAL_MODE_Voice ): return VOICE_CALL;
+ − case ( CAL_MODE_Data ): return DATA_CALL;
+ − case ( CAL_MODE_Fax ): return FAX_CALL;
+ − case (CAL_MODE_VFD_Voice): return VFD_VOICE;
+ − case (CAL_MODE_VAD_Voice): return VAD_VOICE;
+ − case (CAL_MODE_VAF_Voice): return VAF_VOICE;
+ − case (CAL_MODE_VFD_Data): return VFD_DATA;
+ − case (CAL_MODE_VAD_Data): return VAD_DATA;
+ − case (CAL_MODE_VAF_Fax): return VAF_FAX;
+ − default: return NONE_TYPE;
+ − }
+ − }
+ −
+ − T_MFW_CM_CALL_DIR cm_cvt_call_direction( T_ACI_CAL_TYPE type )
+ − {
+ − TRACE_EVENT_P1("cm_cvt_call_direction %d", type);
+ − switch ( type )
+ − {
+ − case ( CAL_TYPE_NotPresent): return MFW_CM_INV_DIR;
+ − case ( CAL_TYPE_MOC): return MFW_CM_MOC;
+ − case ( CAL_TYPE_MTC): return MFW_CM_MTC;
+ − default: return MFW_CM_INV_DIR;
+ − }
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT: MMI-Framework (8417) MODULE: MFW_CM |
+ − | STATE : code ROUTINE: cm_status |
+ − +--------------------------------------------------------------------+
+ −
+ −
+ − PURPOSE : Request the call status.
+ −
+ − */
+ −
+ − int cm_status(SHORT call_number, T_MFW_CM_STATUS *status, UBYTE num)
+ − {
+ − UBYTE cnt;
+ − int i;
+ − // Apr 06 2005 REF: CRR 29989 xpradipg
+ − // define and allocate memory
+ − #ifdef FF_MMI_OPTIM
+ − T_ACI_CAL_ENTR *call_tab;//[MAX_CALL_NR];
+ − call_tab = (T_ACI_CAL_ENTR*)mfwAlloc(sizeof(T_ACI_CAL_ENTR)*MAX_CALL_NR);
+ − if( NULL == call_tab)
+ − return 0;
+ − #endif
+ −
+ −
+ − cnt = 0;
+ − qAT_PercentCAL(CMD_SRC_LCL, call_tab);
+ −
+ − if (call_number > 0)
+ − {
+ − for (i=0; i<MAX_CALL_NR; i++)
+ − {
+ − if (call_tab[i].index == call_number)
+ − {
+ − status[0].call_number = call_tab[i].index;
+ − status[0].stat = cm_cvt_call_status(call_tab[i].status);
+ − status[0].type = cm_cvt_call_mode(call_tab[i].calMode);
+ − status[0].mtpy = (T_MFW_MTPY_MEMBER)call_tab[i].mpty;
+ − status[0].call_direction = cm_cvt_call_direction(call_tab[i].calType);
+ −
+ − if (call_tab[i].number != NULL)
+ − {
+ − mfwStrncpy((char *)status[0].number, call_tab[i].number, MFW_NUM_LEN);
+ − status[0].ton = phb_cvtTon(call_tab[i].type.ton);
+ − }
+ − else
+ − memset(status[0].number, '\0', MFW_NUM_LEN);
+ −
+ − #ifdef NO_ASCIIZ
+ − status[0].name.len = call_tab[i].alpha.len;
+ − if (call_tab[i].alpha.len)
+ − memcpy(status[0].name.data,
+ − call_tab[i].alpha.data,
+ − call_tab[i].alpha.len);
+ − else //We'll also zero the string.
+ − memset(status[0].name.data, '\0', PHB_MAX_LEN);
+ − #else
+ − if (call_tab[i].alpha != NULL)
+ − mfwStrncpy((char *)status[0].name, call_tab[i].alpha, MFW_TAG_LEN);
+ − else
+ − memset(status[0].name, '\0', MFW_TAG_LEN);
+ − #endif
+ − cnt = 1;
+ − break;
+ − }
+ − }
+ − // Apr 06 2005 REF: CRR 29989 xpradipg
+ − // deallocate memory
+ − #ifdef FF_MMI_OPTIM
+ − if(call_tab)
+ − mfwFree((U8*)call_tab, sizeof(T_ACI_CAL_ENTR)*MAX_CALL_NR);
+ − #endif
+ − return cnt;
+ − }
+ −
+ − if (!call_number)
+ − {
+ − for (i=0; i<MAX_CALL_NR; i++)
+ − {
+ − if ((call_tab[i].index EQ -1) OR cnt > num)
+ − break;
+ −
+ − if (call_tab[i].status != CAL_STAT_NotPresent)
+ − {
+ − status[cnt].call_number = call_tab[i].index;
+ − status[cnt].stat = cm_cvt_call_status(call_tab[i].status);
+ − status[cnt].type = cm_cvt_call_mode(call_tab[i].calMode);
+ − status[cnt].mtpy = (T_MFW_MTPY_MEMBER)call_tab[i].mpty;
+ − if (call_tab[i].number != NULL)
+ − {
+ − mfwStrncpy((char *)status[cnt].number, call_tab[i].number, MFW_NUM_LEN);
+ − status[cnt].ton = phb_cvtTon(call_tab[i].type.ton);
+ − }
+ − else
+ − memset(status[cnt].number, '\0', MFW_NUM_LEN);
+ −
+ − #ifdef NO_ASCIIZ
+ − status[cnt].name.len = call_tab[i].alpha.len;
+ − if (call_tab[i].alpha.len != 0)
+ − memcpy(status[cnt].name.data,
+ − call_tab[i].alpha.data,
+ − call_tab[i].alpha.len);
+ − else //We'll also zero the string.
+ − memset(status[cnt].name.data, '\0', PHB_MAX_LEN);
+ − #else
+ − if (call_tab[i].alpha != NULL)
+ − mfwStrncpy((char *)status[cnt].name, call_tab[i].alpha, MFW_TAG_LEN);
+ − else
+ − memset(status[cnt].name, '\0', MFW_TAG_LEN);
+ − #endif
+ − cnt++;
+ − }
+ − }
+ − // Apr 06 2005 REF: CRR 29989 xpradipg
+ − // deallocate memory
+ − #ifdef FF_MMI_OPTIM
+ − if(call_tab)
+ − mfwFree((U8*)call_tab, sizeof(T_ACI_CAL_ENTR)*MAX_CALL_NR);
+ − #endif
+ − return cnt;
+ − }
+ − // Apr 06 2005 REF: CRR 29989 xpradipg
+ − // deallocate memory
+ − #ifdef FF_MMI_OPTIM
+ − if(call_tab)
+ − mfwFree((U8*)call_tab, sizeof(T_ACI_CAL_ENTR)*MAX_CALL_NR);
+ − #endif
+ − return 0;
+ − }
+ −
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT: MMI-Framework (8417) MODULE: MFW_CM |
+ − | STATE : code ROUTINE: cm_AT_CHLD |
+ − +--------------------------------------------------------------------+
+ −
+ −
+ − PURPOSE : Notify the CHLD command
+ −
+ − */
+ −
+ − void cm_AT_CHLD(T_ACI_CLOG *clog_cmd)
+ − {
+ − SHORT id;
+ − #ifdef FF_ATI
+ − T_ACI_CAL_MODE call_mode;
+ − #endif
+ − T_MFW_CM_STATUS status;
+ − char buf[80];
+ −
+ − TRACE_EVENT("cm_AT_CHLD()");
+ −
+ − /*SPR#1965 - DS - Removed setting of call_number to zero. Port of 1962
+ − *dis_connect.call_number = 0;
+ − */
+ − sprintf(buf, "dis_connect.call_number %d, cmd_hold %d, cId %d, srcId %d, mode %d, act %d",
+ − dis_connect.call_number, cmd_hold, clog_cmd->cId, clog_cmd->cmdPrm.sCHLD.srcId,
+ − clog_cmd->cmdPrm.sCHLD.mode, clog_cmd->cmdPrm.sCHLD.act);
+ − TRACE_EVENT(buf);
+ −
+ − if ((clog_cmd->cmdPrm.sCHLD.act != CHLD_ACT_Retrieve) &&
+ − (clog_cmd->cmdPrm.sCHLD.act != CHLD_ACT_RetrieveMpty))
+ − {
+ − /*SPR#1962 - DS - Set call_number to call Id returned from ACI */
+ − TRACE_EVENT("Set dis_connect.call_number to clog_cmd->cId");
+ − dis_connect.call_number = clog_cmd->cId;
+ − }
+ − else
+ − {
+ − dis_connect.call_number = -1;
+ − }
+ − if (clog_cmd->cmdPrm.sCHLD.srcId == CMD_SRC_LCL)
+ − {
+ − switch(clog_cmd->cmdPrm.sCHLD.mode)
+ − {
+ − case CHLD_MOD_RelHldOrUdub:
+ −
+ − if (cm_search_callId(CAL_STAT_DeactiveReq, &id) == CM_OK)
+ − {
+ − TRACE_FUNCTION("CAL_STAT_DeactiveReq - 0SEND");
+ − if ( cmd_hold EQ MFW_CM_1_SEND )
+ − {
+ − TRACE_FUNCTION("cmd_hold EQ MFW_CM_1_SEND");
+ − cm_status(id, &status, 1);
+ − if (status.mtpy EQ MFW_MTPY_MEMBER)
+ − dis_connect.call_number = 0;
+ − else
+ − dis_connect.call_number = id;
+ − }
+ − }
+ −
+ − // Apr 26 2006, a0393213 (Prabakar R), OMAPS00074886 : No option in MMI to release the held call.
+ − // cmd_hold variable is set to MFW_CM_TERMINATED to indicate that the call has been terminated
+ − cmd_hold = MFW_CM_TERMINATED;
+ − break;
+ −
+ − case CHLD_MOD_RelActAndAcpt:
+ −
+ − // MMI-SPR 13873 xkundadu
+ − // Handling of 1+SEND - Releases all active calls (if any exist) and
+ − // accepts the other (held or waiting) call.
+ −
+ − if( (cm_search_callId(CAL_STAT_DeactiveReq, &id) == CM_OK) OR
+ − (cm_search_callId(CAL_STAT_Active, &id) == CM_OK))
+ − {
+ − // If there is an active call/active call whose disconnection
+ − // is initiated, store the index of that call.
+ − dis_connect.call_number = id;
+ − if(bIsMultpty == TRUE)
+ − {
+ − // Call is in multiparty
+ − // 1SEND for multiparty will disconnect all the active calls
+ − // To clear all calls assign the dis_connect.call_number to
+ − // zero
+ − dis_connect.call_number = 0;
+ − bIsMultpty = FALSE;
+ − }
+ − }
+ − else
+ − {
+ − // There is no active calls/active calls whose disconnection is
+ − // iniated existing
+ − dis_connect.call_number = -1;
+ − }
+ − if (cm_search_callId(CAL_STAT_Wait, &id) == CM_OK)
+ − {
+ − // Waiting call is existing.
+ − // In the function cm_result_cmd(), value of cmd.call_number
+ − // is used to determine whether to call cm_connect() or not
+ − cmd.call_number=0;
+ − }
+ − cmd_hold = MFW_CM_1_SEND;
+ − break;
+ −
+ − case CHLD_MOD_HldActAndAcpt:
+ −
+ − // MMI -SPR 13873 xkundadu
+ − // Handling of 2+SEND - Places all active calls (if any exist) on hold
+ − // and accepts the other (held or waiting) call.
+ −
+ − switch (clog_cmd->cmdPrm.sCHLD.act)
+ − {
+ −
+ − case CHLD_ACT_Accept:
+ − // Accept the incoming call
+ − cmd_hold = MFW_CM_MT_ACCEPT;
+ − break;
+ −
+ − case CHLD_ACT_Hold:
+ − // Getting the id of the call which has been put on hold by ACI
+ − cmd.command = CM_HOLD;
+ − if (cm_search_callId(CAL_STAT_Held, &id) == CM_OK)
+ − {
+ − cmd.call_number = id;
+ − }
+ − else
+ − {
+ − cmd.call_number = -1;
+ − }
+ − break;
+ −
+ − case CHLD_ACT_Swap:
+ − // Swap the call
+ − cmd.command = CM_SWAP;
+ − break;
+ −
+ − case CHLD_ACT_Retrieve:
+ − // Getting the id of the call which has been made active by ACI
+ − cmd.command = CM_RETRIEVE;
+ − if (cm_search_callId(CAL_STAT_Active, &id) == CM_OK)
+ − {
+ − cmd.call_number = id;
+ − }
+ − else
+ − {
+ − cmd.call_number = -1;
+ − }
+ − break;
+ − case CHLD_ACT_HoldMpty:
+ − // Put the calls on HOLD
+ − cmd.command = CM_HOLD_MULTIPARTY;
+ − break;
+ −
+ − case CHLD_ACT_RetrieveMpty:
+ − // Retrieve the held calls to active
+ − cmd.command = CM_RETRIEVE_MULTIPARTY;
+ − break;
+ −
+ − case CHLD_ACT_SwapMpty:
+ − // Swap muliparty calls
+ − cmd.command = CM_SWAP_MULTIPARTY;
+ − break;
+ −
+ − default:
+ − cmd.command = CM_COMMAND_UNKNOWN;
+ − break;
+ −
+ − }
+ − break;
+ − case CHLD_MOD_RelActSpec:
+ − dis_connect.call_number = (SHORT)atoi(clog_cmd->cmdPrm.sCHLD.call);
+ − break;
+ −
+ − default:
+ − break;
+ − }
+ − }
+ −
+ − // Aug 23, 2004 REF: CRR 22222 xkundadu
+ − // Bug: Runaway Call Waiting Tone.
+ − // Fix: Handle the AT-Command source id CMD_SRC_ATI_2 also for call control
+ − // callback functions.Include source Id CMD_SRC_ATI_2 also for checking.
+ −
+ − //Nov 02, 2005 DR OMAPS00052132 xdeepadh
+ − //The usage of ATI enum is put under the flag FF_ATI
+ −
+ − //Apr 21, 2006 OMAPS00070774 a0393213 (Prabakar R)
+ − //Bug : Make MO call from MS1 to MS2. Make MT call from MS3 to MS1. Type at+chld=2 in ATI.
+ − // expected behaviour : active call should be put to hold and the incoming call should be accepted
+ − // observed behaviour : happens as expected. but display shows incoming call screen only.
+ − // active screen is not shown eventhough the connection is established between MS1 and MS3
+ − //Fix : AT commands from CMD_SRC_ATI_3 was not processed. As a result, MFW was not informed of the acceptance of the call
+ − //through ATI. In precise cmd_hold variable was not set to MFW_CM_MT_ACCEPT, which is necessary for display update
+ −
+ − #ifdef FF_ATI
+ − if ((clog_cmd->cmdPrm.sCHLD.srcId == CMD_SRC_ATI_1) //NM Berlin UK integration
+ − OR (clog_cmd->cmdPrm.sCHLD.srcId == CMD_SRC_ATI_2) // Added for MMI-SPR 22222 FIX
+ − OR (clog_cmd->cmdPrm.sCHLD.srcId == CMD_SRC_ATI_3)) // Added for OMAPS00070774 FIX
+ − {
+ − switch(clog_cmd->cmdPrm.sCHLD.mode)
+ − {
+ − case CHLD_MOD_RelHldOrUdub:
+ − if (clog_cmd->cmdPrm.sCHLD.act == CHLD_ACT_Release)
+ − dis_connect.call_number = clog_cmd->cId;
+ − cmd_hold = MFW_CM_TERMINATED;
+ − break;
+ − case CHLD_MOD_RelActAndAcpt:
+ − switch (clog_cmd->cmdPrm.sCHLD.act)
+ − {
+ − case CHLD_ACT_Release:
+ − dis_connect.call_number = clog_cmd->cId;
+ − break;
+ − case CHLD_ACT_Accept:
+ − if (cm_search_callId(CAL_STAT_DeactiveReq, &id) == CM_OK)
+ − dis_connect.call_number = id;
+ − else if (cm_search_callId(CAL_STAT_Active, &id) == CM_OK)
+ − {
+ − call_mode = cm_search_callMode(id);
+ − if (call_mode EQ CAL_MODE_Data
+ − OR call_mode EQ CAL_MODE_Fax)
+ − dis_connect.call_number = id;
+ − }
+ − if (cm_search_callId(CAL_STAT_Wait, &id) == CM_OK)
+ − {
+ − #ifdef MMI_LINT_WARNING_REMOVAL /*a0393213 lint warnings removal*/
+ − cc_id = id;
+ − #endif
+ −
+ − //Apr 22, 2006 OMAPS00070762 a0393213 (Prabakar R)
+ − //Bug : Make MO call from MS1 to MS2. Make MT call from MS3 to MS1. Type at+chld=1 in ATI.
+ − //expected behaviour : active call should be released and the incoming call should be accepted
+ − //observed behaviour : happens as expected. but display shows incoming call screen only.
+ − // active screen is not shown eventhough the connection is established between MS1 and MS3
+ − //Fix : cmd.call_number was not set to 0, which is required in cm_result_cmd()
+ − // to call cm_ok_connect()which updates the display. It's set.
+ − cmd.call_number=0;
+ − }
+ −
+ − break;
+ − case CHLD_ACT_Retrieve:
+ − if (cm_search_callId(CAL_STAT_Held, &id) == CM_OK)
+ − {
+ − cmd.command = CM_RETRIEVE;
+ − cmd.call_number = id;
+ − }
+ − #ifdef MMI_LINT_WARNING_REMOVAL /*a0393213 lint warnings removal*/
+ − if (cm_search_callId(CAL_STAT_Wait, &id) == CM_OK)
+ − cc_id = id;
+ − #else
+ − cm_search_callId(CAL_STAT_Wait, &id);
+ − #endif
+ − break;
+ − }
+ − cmd_hold = MFW_CM_1_SEND;
+ − break;
+ − case CHLD_MOD_RelActSpec:
+ − dis_connect.call_number = clog_cmd->cId;
+ − if (dis_connect.call_number)
+ − cmd_hold = MFW_CM_TERMINATED;
+ − else
+ − cmd_hold = MFW_CM_MPTY_TERMINATED;
+ − break;
+ − case CHLD_MOD_HldActAndAcpt:
+ − switch (clog_cmd->cmdPrm.sCHLD.act)
+ − {
+ − case CHLD_ACT_Accept:
+ − cmd_hold = MFW_CM_MT_ACCEPT;
+ − break;
+ − case CHLD_ACT_Hold:
+ − cmd.command = CM_HOLD;
+ − if (cm_search_callId(CAL_STAT_Held, &id) == CM_OK)
+ − cmd.call_number = id;
+ − else
+ − cmd.call_number = -1;
+ − break;
+ − case CHLD_ACT_Swap:
+ − cmd.command = CM_SWAP;
+ − break;
+ − case CHLD_ACT_Retrieve:
+ − cmd.command = CM_RETRIEVE;
+ − if (cm_search_callId(CAL_STAT_Active, &id) == CM_OK)
+ − cmd.call_number = id;
+ − else
+ − cmd.call_number = -1;
+ − break;
+ − case CHLD_ACT_SwapMpty:
+ − cmd.command = CM_SWAP_MULTIPARTY;
+ − break;
+ − case CHLD_ACT_HoldMpty:
+ − cmd.command = CM_HOLD_MULTIPARTY;
+ − break;
+ − case CHLD_ACT_RetrieveMpty:
+ − cmd.command = CM_RETRIEVE_MULTIPARTY;
+ − break;
+ − default:
+ − cmd.command = CM_COMMAND_UNKNOWN;
+ − break;
+ − }
+ − break;
+ − case CHLD_MOD_HldActExc:
+ − if (clog_cmd->cmdPrm.sCHLD.act == CHLD_ACT_SplitMpty)
+ − cmd.command = CM_SPLIT_MULTIPARTY;
+ − else
+ − cmd.command = CM_COMMAND_UNKNOWN;
+ − break;
+ − case CHLD_MOD_AddHld:
+ − if (clog_cmd->cmdPrm.sCHLD.act == CHLD_ACT_BuildMpty)
+ − cmd.command = CM_RETRIEVE_MULTIPARTY;
+ − else
+ − cmd.command = CM_COMMAND_UNKNOWN;
+ − break;
+ − case CHLD_MOD_Ect:
+ − cmd.command = CM_ETC;
+ − break;
+ − case CHLD_MOD_Ccbs:
+ − TRACE_EVENT("CHLD_MOD_Ccbs");
+ − cmd.command = CM_CCBS;
+ − break;
+ − case CHLD_MOD_HldActDial:
+ − cmd_hold = MFW_CM_HOLD_AND_DIAL;
+ − cmd.command = CM_HOLD;
+ − break;
+ − default:
+ − break;
+ − }
+ − }
+ − #endif //FF_ATI
+ − }
+ −
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT: MMI-Framework (8417) MODULE: MFW_CM |
+ − | STATE : code ROUTINE: cm_AT_D |
+ − +--------------------------------------------------------------------+
+ −
+ −
+ − PURPOSE : Notify the outgoing call command.
+ −
+ − */
+ −
+ − void cm_AT_D(T_ACI_CLOG *cmd)
+ − {
+ − SHORT index;
+ − T_MFW_CM_CALL_STAT stat;
+ − UBYTE ton;
+ − UBYTE mode;
+ − // Sep 01, 2006 REF:OMAPS00090555 x0039928
+ − // Fix : Allocate the memory for entry and findText from heap instead of stack.
+ − #ifdef FF_MMI_PB_OPTIM
+ − T_MFW_PHB_ENTRY * entry = (T_MFW_PHB_ENTRY*)mfwAlloc(sizeof(T_MFW_PHB_ENTRY));
+ − T_MFW_PHB_TEXT * findText = (T_MFW_PHB_TEXT*)mfwAlloc(sizeof(T_MFW_PHB_TEXT));
+ − #else
+ − T_MFW_PHB_ENTRY entry;
+ − T_MFW_PHB_TEXT findText;
+ − #endif
+ −
+ − TRACE_FUNCTION("cm_at_d()");
+ −
+ − // Sep 01, 2006 REF:OMAPS00090555 x0039928
+ − #ifdef FF_MMI_PB_OPTIM
+ − #ifdef NO_ASCIIZ
+ − entry->name.len = 0;
+ − #else
+ − memset (entry->name, '\0', MAX_LEN);
+ − #endif
+ − memset (entry->number, '\0', MAX_LEN);
+ − entry->index = 0;
+ − entry->npi = 0;
+ − entry->ton = 0;
+ − entries.entry = entry;
+ − #else
+ − #ifdef NO_ASCIIZ
+ − entry.name.len = 0;
+ − #else
+ − memset (entry.name, '\0', MAX_LEN);
+ − #endif
+ − memset (entry.number, '\0', MAX_LEN);
+ − entry.index = 0;
+ − entry.npi = 0;
+ − entry.ton = 0;
+ − entries.entry = &entry;
+ − #endif
+ −
+ − if (cmd->cmdPrm.sD.srcId == CMD_SRC_LCL)
+ − {
+ − out_call.call_id = cmd->cId;
+ − mfwStrncpy((char *)out_call.number, cmd->cmdPrm.sD.number, MFW_NUM_LEN);
+ − if (cc_stat.type == OUTGOING_CALL)
+ − {
+ − mfwStrncpy((char *)cc_stat.number, cmd->cmdPrm.sD.number, MFW_NUM_LEN);
+ − #ifdef NO_ASCIIZ
+ − cc_stat.name.len = 0;
+ − out_call.name.len = 0;
+ − #else
+ − cc_stat.name[0] = '\0';
+ − out_call.name[0] = '\0';
+ − #endif
+ − if (cm_search_callStat(cmd->cId, &stat, &ton, &mode) == CM_OK)
+ − {
+ − out_call.type = mode;
+ − // Oct 10, 2006 DR: OMAPS00093720 x0039928
+ − // Fix: Set the cc_stat.ton info from out_call.ton
+ − cc_stat.ton = out_call.ton;
+ − cc_stat.mode = (T_MFW_CM_CALL_TYPE)mode;
+ − }
+ −
+ − // Sep 01, 2006 REF:OMAPS00090555 x0039928
+ − #ifdef NO_ASCIIZ
+ − #ifdef FF_MMI_PB_OPTIM
+ − mfwStrncpy((char *)findText->data, cmd->cmdPrm.sD.number, PHB_MAX_LEN);
+ − findText->len = strlen(cmd->cmdPrm.sD.number);
+ − #else
+ − mfwStrncpy((char *)findText.data, cmd->cmdPrm.sD.number, PHB_MAX_LEN);
+ − findText.len = strlen(cmd->cmdPrm.sD.number);
+ − #endif
+ − if (phb_find_entries (PHB_ADN,
+ − &index,
+ − MFW_PHB_NUMBER,
+ − 1,
+ − #ifdef FF_MMI_PB_OPTIM
+ − findText,
+ − #else
+ − &findText,
+ − #endif
+ − &entries) EQ MFW_PHB_OK)
+ − {
+ − if (entries.num_entries)
+ − {
+ − cc_stat.name.len = entries.entry[0].name.len;
+ − memcpy(cc_stat.name.data,
+ − entries.entry[0].name.data,
+ − entries.entry[0].name.len);
+ −
+ − out_call.name.len = entries.entry[0].name.len;
+ − memcpy(out_call.name.data,
+ − entries.entry[0].name.data,
+ − entries.entry[0].name.len);
+ − }
+ − }
+ − #else
+ − if (phb_find_entries (PHB_ADN,
+ − &index,
+ − MFW_PHB_NUMBER,
+ − 1,
+ − cmd->cmdPrm.sD.number,
+ − (T_MFW_PHB_LIST *)&entries) EQ MFW_PHB_OK)
+ − {
+ − if (entries.num_entries)
+ − {
+ − mfwStrncpy((char *)cc_stat.name, (char *)entries.entry[0].name, MFW_TAG_LEN);
+ − mfwStrncpy((char *)out_call.name, (char *)entries.entry[0].name, PHB_MAX_LEN);
+ − }
+ − }
+ − #endif
+ − }
+ −
+ − if (cc_stat.type == REDIALING_CALL)
+ − {
+ − #ifdef NO_ASCIIZ
+ − out_call.name.len = cc_stat.name.len;
+ − memcpy(out_call.name.data,
+ − cc_stat.name.data,
+ − cc_stat.name.len);
+ − #else
+ − mfwStrncpy((char *)out_call.name, (char *)cc_stat.name, MFW_TAG_LEN);
+ − #endif
+ − out_call.type = cc_stat.mode;
+ − }
+ − // Sep 01, 2006 REF:OMAPS00090555 x0039928
+ − // Fix: Free the dynamic memory allocated if flag FF_MMI_PB_OPTIM is defined
+ − #ifdef FF_MMI_PB_OPTIM
+ − mfwFree((U8*) entry, sizeof(T_MFW_PHB_ENTRY));
+ − mfwFree((U8*) findText, sizeof(T_MFW_PHB_TEXT));
+ − #endif
+ − cm_signal(E_CM_MO_RES, &out_call);
+ − }
+ − else if (cmd->cmdPrm.sD.srcId < CMD_SRC_MAX)
+ − {
+ − //x0pleela 03 Nov, 2006 DR: OMAPS00101158
+ − //set the value of uOthersrc to TRUE as the source id is not LOCAL
+ − mfw_set_OtherSrc_Value(TRUE);
+ − out_call.call_id = cmd->cId;
+ − mfwStrncpy((char *)out_call.number, (char *)cmd->cmdPrm.sD.number, MFW_NUM_LEN);
+ − #ifdef NO_ASCIIZ
+ − out_call.name.len = 0;
+ − #else
+ − out_call.name[0] = '\0';
+ − #endif
+ − if (cm_search_callStat(cmd->cId, &stat, &ton, &mode) == CM_OK)
+ − {
+ − out_call.type = mode;
+ − }
+ − //x0pleela 03 Nov, 2006 DR: OMAPS00101158
+ − //check the value of uOthersrc
+ − //If the value is not set then do the phone book search operation
+ − //Else do not perform phone book search operation
+ − //this is to avoid stack overflow probelm when the source id is not LOCAL
+ − if(!mfw_get_OtherSrc_Value())//x0pleela 3 nov 2006
+ − {
+ − // Sep 01, 2006 REF:OMAPS00090555 x0039928
+ − #ifdef NO_ASCIIZ
+ − #ifdef FF_MMI_PB_OPTIM
+ − mfwStrncpy((char *)findText->data, cmd->cmdPrm.sD.number, PHB_MAX_LEN);
+ − findText->len = strlen(cmd->cmdPrm.sD.number);
+ − #else
+ − mfwStrncpy((char *)findText.data, cmd->cmdPrm.sD.number, PHB_MAX_LEN);
+ − findText.len = strlen(cmd->cmdPrm.sD.number);
+ − #endif
+ − if (phb_find_entries (PHB_ADN,
+ − &index,
+ − MFW_PHB_NUMBER,
+ − 1,
+ − #ifdef FF_MMI_PB_OPTIM
+ − findText,
+ − #else
+ − &findText,
+ − #endif
+ − &entries) EQ MFW_PHB_OK)
+ − {
+ − if (entries.num_entries)
+ − {
+ − out_call.name.len = entries.entry[0].name.len;
+ − memcpy(out_call.name.data,
+ − entries.entry[0].name.data,
+ − entries.entry[0].name.len);
+ − }
+ − }
+ − #else
+ − if (phb_find_entries (PHB_ADN,
+ − &index,
+ − MFW_PHB_NUMBER,
+ − 1,
+ − cmd->cmdPrm.sD.number,
+ − (T_MFW_PHB_LIST *)&entries) EQ MFW_PHB_OK)
+ − {
+ − if (entries.num_entries)
+ − {
+ − mfwStrncpy((char *)out_call.name, (char *)entries.entry[0].name, MFW_TAG_LEN);
+ − }
+ − }
+ − #endif
+ − } //3
+ − // Sep 01, 2006 REF:OMAPS00090555 x0039928
+ − // Fix: Free the dynamic memory allocated if flag FF_MMI_PB_OPTIM is defined
+ − #ifdef FF_MMI_PB_OPTIM
+ − mfwFree((U8*) entry, sizeof(T_MFW_PHB_ENTRY));
+ − mfwFree((U8*) findText, sizeof(T_MFW_PHB_TEXT));
+ − #endif
+ − cm_signal(E_CM_MO_RES, &out_call);
+ − }
+ − }
+ −
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT: MMI-Framework (8417) MODULE: MFW_CM |
+ − | STATE : code ROUTINE: cm_cvtCPItype |
+ − +--------------------------------------------------------------------+
+ −
+ −
+ − PURPOSE : Convert the type of
+ −
+ − */
+ −
+ − T_MFW_CPI_TYPE cm_cvtCPItype(T_ACI_CPI_MSG msg)
+ − {
+ − switch (msg)
+ − {
+ − case CPI_MSG_Setup: return CPI_TYPE_SETUP;
+ − case CPI_MSG_Disc: return CPI_TYPE_DISC;
+ − case CPI_MSG_Alert: return CPI_TYPE_ALERT;
+ − case CPI_MSG_Proc: return CPI_TYPE_PROC;
+ − case CPI_MSG_Sync: return CPI_TYPE_SYNC;
+ − case CPI_MSG_Conn: return CPI_TYPE_CONN;
+ − /* CQ11676 Added new messages types in CPi indication. 17-02-04 MZ */
+ − #ifndef FF_2TO1_PS
+ − case CPI_MSG_Rls: return CPI_TYPE_RELEASE;
+ − case CPI_MSG_Rjct: return CPI_TYPE_REJECT;
+ − #endif
+ − default: return CPI_TYPE_UNKNOWN;
+ − }
+ − }
+ −
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT: MMI-Framework (8417) MODULE: MFW_CM |
+ − | STATE : code ROUTINE: cm_cvtIBT |
+ − +--------------------------------------------------------------------+
+ −
+ −
+ − PURPOSE : Convert in-band tones indication
+ −
+ − */
+ −
+ − T_MFW_CPI_IBT cm_cvtIBT(T_ACI_CPI_IBT ibt)
+ − {
+ − switch (ibt)
+ − {
+ − case CPI_IBT_False: return CPI_IBT_FALSE;
+ − case CPI_IBT_True: return CPI_IBT_TRUE;
+ − default: return CPI_IBT_UNKNOWN;
+ − }
+ − }
+ −
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT: MMI-Framework (8417) MODULE: MFW_CM |
+ − | STATE : code ROUTINE: cm_cvtTCH |
+ − +--------------------------------------------------------------------+
+ −
+ −
+ − PURPOSE : Convert traffic channel indication
+ −
+ − */
+ −
+ − T_MFW_CPI_TCH cm_cvtTCH(T_ACI_CPI_TCH tch)
+ − {
+ − switch (tch)
+ − {
+ − case CPI_TCH_False: return CPI_TCH_FALSE;
+ − case CPI_TCH_True: return CPI_TCH_TRUE;
+ − default: return CPI_TCH_UNKNOWN;
+ − }
+ − }
+ −
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT: MMI-Framework (8417) MODULE: MFW_CM |
+ − | STATE : code ROUTINE: rAT_PercentCPI |
+ − +--------------------------------------------------------------------+
+ −
+ −
+ − PURPOSE : Call Progress Information
+ −
+ − */
+ − // ADDED BY RAVI - FOR ACI CHANGES - 5-10-2005
+ − #if (defined(FF_2TO1_PS) && BOARD != 61)
+ − void rAT_PercentCPI(SHORT cId,
+ − T_ACI_CPI_MSG msgType,
+ − T_ACI_CPI_IBT ibt,
+ − T_ACI_CPI_TCH tch)
+ −
+ − {
+ − cm_cpi.call_number = cId;
+ − cm_cpi.type = cm_cvtCPItype(msgType);
+ − cm_cpi.inband = cm_cvtIBT(ibt);
+ − cm_cpi.tch = cm_cvtTCH(tch);
+ − // cm_cpi.cause = CPI_CAUSE_MASK & cause; /* cq11676 Add cause information to the CPI indication 17-02-04 MZ */
+ − cm_signal(E_CM_CPI, &cm_cpi);
+ − }
+ − #else
+ − void rAT_PercentCPI(SHORT cId,
+ − T_ACI_CPI_MSG msgType,
+ − T_ACI_CPI_IBT ibt,
+ − T_ACI_CPI_TCH tch,
+ − USHORT cause ) /*cq11676 Add cause parameter for cpi indication 17-02-04 MZ */
+ − {
+ − cm_cpi.call_number = cId;
+ − cm_cpi.type = cm_cvtCPItype(msgType);
+ − cm_cpi.inband = cm_cvtIBT(ibt);
+ − cm_cpi.tch = cm_cvtTCH(tch);
+ − cm_cpi.cause = CPI_CAUSE_MASK & cause; /* cq11676 Add cause information to the CPI indication 17-02-04 MZ */
+ − cm_signal(E_CM_CPI, &cm_cpi);
+ − }
+ − #endif
+ − // END OF ADDITION - RAVI - 5-10-2005.
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT: MMI-Framework (8417) MODULE: MFW_CM |
+ − | STATE : code ROUTINE: cm_error_code |
+ − +--------------------------------------------------------------------+
+ −
+ −
+ − PURPOSE :
+ −
+ − */
+ −
+ − UBYTE cm_error_code(T_ACI_AT_CMD cmd)
+ − {
+ − ULONG err;
+ −
+ − err = qAT_ErrDesc();
+ − switch (ACI_ERR_DESC_CLASS( err ))
+ − {
+ − case ACI_ERR_CLASS_Cme:
+ − break;
+ − case ACI_ERR_CLASS_Cms:
+ − break;
+ − case ACI_ERR_CLASS_Ceer:
+ − switch (ACI_ERR_DESC_NR( err ))
+ − {
+ − case CEER_ACM_Max: return CM_ACM_MAX;
+ − default: return CM_ERROR;
+ − }
+ − // break; // RAVI
+ − case ACI_ERR_CLASS_Ext:
+ − switch (ACI_ERR_DESC_NR( err ))
+ − {
+ − case EXT_ERR_FdnCheck: return CM_CFDN_ERR;
+ − case EXT_ERR_BdnCheck: return CM_CBDN_ERR;
+ − case EXT_ERR_OneCallOnHold: return CM_2CALLS_ALREADY_ERR;
+ − //xvilliva 21421 - Handling err code returned by ACI.
+ − #ifndef FF_2TO1_PS
+ − case EXT_ERR_AlsLock: return CM_ALS_ERR;
+ − #endif
+ − default: return CM_ERROR;
+ − }
+ − // break; // RAVI
+ − default:
+ − break;
+ − }
+ − return CM_ERROR;
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : MMI-Framework (8417) MODULE : MFW_CM |
+ − | STATE : code ROUTINE : cm_bc_parameter |
+ − +--------------------------------------------------------------------+
+ −
+ −
+ − PURPOSE : Notice bearer service parameter
+ −
+ − */
+ − /*a0393213 warnings removal - parameter changed as a result of ACI enum change*/
+ − void cm_bc_parameter(T_ACI_CRING_SERV_TYP type)
+ − {
+ − TRACE_FUNCTION("cm_cvt_cringType()");
+ −
+ − switch (type)
+ − {
+ − case CRING_SERV_TYP_Voice:
+ − break;
+ − case CRING_SERV_TYP_Fax:
+ − in_call.bc1.conn_elem = Transparent;
+ − break;
+ − case CRING_SERV_TYP_Sync:
+ − in_call.bc1.bearer_serv = Synch;
+ − in_call.bc1.conn_elem = Transparent;
+ − break;
+ − case CRING_SERV_TYP_Async:
+ − in_call.bc1.bearer_serv = Asynch;
+ − in_call.bc1.conn_elem = Transparent;
+ − break;
+ − case CRING_SERV_TYP_RelSync:
+ − in_call.bc1.bearer_serv = Synch;
+ − in_call.bc1.conn_elem = NonTransparent;
+ − break;
+ − case CRING_SERV_TYP_RelAsync:
+ − in_call.bc1.bearer_serv = Asynch;
+ − in_call.bc1.conn_elem = NonTransparent;
+ − break;
+ − default:
+ − break;
+ − }
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : MMI-Framework (8417) MODULE : MFW_CM |
+ − | STATE : code ROUTINE : cm_build_callType |
+ − +--------------------------------------------------------------------+
+ −
+ −
+ − PURPOSE :
+ −
+ − */
+ − /*a0393213 warnings removal - parameters type changed as a result of ACI enum change*/
+ − void cm_build_callType(T_ACI_CRING_SERV_TYP type1, T_ACI_CRING_SERV_TYP type2)
+ − {
+ − if (type1 EQ CRING_SERV_TYP_Voice)
+ − {
+ − switch (type2)
+ − {
+ − case CRING_SERV_TYP_Sync:
+ − case CRING_SERV_TYP_Async:
+ − case CRING_SERV_TYP_RelSync:
+ − case CRING_SERV_TYP_RelAsync:
+ − in_call.type = VAD_VOICE;
+ − return;
+ − case CRING_SERV_TYP_Fax:
+ − in_call.type = VAF_VOICE;
+ − return;
+ − default:
+ − break;
+ − }
+ − }
+ − if (type2 EQ CRING_SERV_TYP_Voice)
+ − {
+ − switch (type1)
+ − {
+ − case CRING_SERV_TYP_Sync:
+ − case CRING_SERV_TYP_Async:
+ − case CRING_SERV_TYP_RelSync:
+ − case CRING_SERV_TYP_RelAsync:
+ − in_call.type = VAD_DATA;
+ − return;
+ − case CRING_SERV_TYP_Fax:
+ − in_call.type = VAF_FAX;
+ − return;
+ − default:
+ − break;
+ − }
+ − }
+ − in_call.type = NONE_TYPE;
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : MMI-Framework (8417) MODULE : MFW_CM |
+ − | STATE : code ROUTINE : cmCommand |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE : handle mfw windows command
+ −
+ − */
+ −
+ − static int cmCommand (U32 cmd, void *h)
+ − {
+ − switch (cmd)
+ − {
+ − case MfwCmdDelete: /* delete me */
+ − if (!h)
+ − return 0;
+ − cm_delete(h);
+ − return 1;
+ − default:
+ − break;
+ − }
+ −
+ − return 0;
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT: MMI-Framework (8417) MODULE: MFW_CM |
+ − | STATE : code ROUTINE: cm_command_abort |
+ − +--------------------------------------------------------------------+
+ −
+ −
+ − PURPOSE :
+ −
+ − */
+ −
+ − T_MFW cm_command_abort(UBYTE command)
+ − {
+ − TRACE_FUNCTION ("cm_command()");
+ −
+ − switch (command)
+ − {
+ − case CM_HOLD:
+ − case CM_SWAP:
+ − case CM_RETRIEVE:
+ − case CM_SWAP_MULTIPARTY:
+ − case CM_HOLD_MULTIPARTY:
+ − case CM_RETRIEVE_MULTIPARTY:
+ − case CM_BUILD_MULTIPARTY:
+ − case CM_SPLIT_MULTIPARTY:
+ − case CM_ETC:
+ − case CM_CCBS:
+ − sAT_Abort(CMD_SRC_LCL, AT_CMD_CHLD);
+ − break;
+ −
+ − case CM_DTMF_ACTIVE:
+ − case CM_DTMF_INACTIVE:
+ − case CM_DTMF_AUTO:
+ − sAT_Abort(CMD_SRC_LCL, AT_CMD_VTS);
+ − break;
+ −
+ − default:
+ − return FALSE;
+ − }
+ − return TRUE;
+ − }
+ −
+ − /* Marcus: CCBS: 13/11/2002: Start */
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT: MMI-Framework (8417) MODULE: MFW_CM |
+ − | STATE : code ROUTINE: cm_ccbs_delete_all |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE : Delete all registered CCBS
+ −
+ − Returns: T_MFW: CM_OK if successful, CM_ERROR if not
+ −
+ − Arguments: None
+ − */
+ − T_MFW cm_ccbs_delete_all(void)
+ − {
+ − T_MFW res = CM_ERROR; // The value to be returned by this function
+ − T_ACI_RETURN aci_res; // The value returned by sAT_PercentCCBS
+ −
+ − TRACE_FUNCTION("cm_ccbs_delete_all()");
+ −
+ − if (ccbs_op == CM_CCBS_NONE)
+ − {
+ − TRACE_EVENT("ccbs_op == CM_CCBS_NONE");
+ − /* No CCBS operation currently in progress */
+ − #ifndef CCBS_TEST
+ − aci_res = sAT_PercentCCBS(CMD_SRC_LCL, 0);
+ − #else
+ − aci_res = AT_EXCT;
+ − #endif
+ − if (aci_res == AT_EXCT)
+ − {
+ − TRACE_EVENT("sAT_PercentCCBS returned AT_EXCT");
+ − ccbs_op = CM_CCBS_DELETE_ALL;
+ − res = CM_OK;
+ − }
+ − else
+ − {
+ − TRACE_EVENT_P1("sAT_PercentCCBS returned %d", aci_res);
+ − }
+ − }
+ − else
+ − {
+ − TRACE_EVENT_P1("ccbs_op is %d", ccbs_op);
+ − }
+ −
+ − return res;
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT: MMI-Framework (8417) MODULE: MFW_CM |
+ − | STATE : code ROUTINE: cm_ccbs_delete |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE : Delete a specific registered CCBS
+ −
+ − Returns: T_MFW: CM_OK if successful, CM_ERROR if not
+ −
+ − Arguments: SHORT idx: the index to the specific CCBS to be deleted
+ − */
+ − T_MFW cm_ccbs_delete(SHORT idx)
+ − {
+ − T_MFW res = CM_ERROR; // The value to be returned by this function
+ − T_ACI_RETURN aci_res; // The value returned by sAT_PercentCCBS
+ −
+ − TRACE_FUNCTION("cm_ccbs_delete()");
+ − TRACE_EVENT_P1("deleting CCBS %d", idx);
+ −
+ − if (ccbs_op == CM_CCBS_NONE)
+ − {
+ − TRACE_EVENT("ccbs_op == CM_CCBS_NONE");
+ − /* No CCBS operation currently in progress */
+ − #ifndef CCBS_TEST
+ − aci_res = sAT_PercentCCBS(CMD_SRC_LCL, idx);
+ − #else
+ − aci_res = AT_EXCT;
+ − #endif
+ − if (aci_res == AT_EXCT)
+ − {
+ − TRACE_EVENT("sAT_PercentCCBS returned AT_EXCT");
+ − ccbs_op = CM_CCBS_DELETE;
+ − res = CM_OK;
+ − }
+ − else
+ − {
+ − TRACE_EVENT_P1("sAT_PercentCCBS returned %d", aci_res);
+ − }
+ − }
+ − else
+ − {
+ − TRACE_EVENT_P1("ccbs_op is %d", ccbs_op);
+ − }
+ −
+ − return res;
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT: MMI-Framework (8417) MODULE: MFW_CM |
+ − | STATE : code ROUTINE: cm_ccbs_list |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE : Delete all registered CCBS
+ −
+ − Returns: T_MFW: CM_OK if successful, CM_ERROR if not
+ −
+ − Arguments: None
+ − */
+ − T_MFW cm_ccbs_list(void)
+ − {
+ − T_MFW res = CM_ERROR; // The value to be returned by this function
+ − T_ACI_RETURN aci_res; // The value returned by qAT_PercentCCBS
+ −
+ − TRACE_FUNCTION("cm_ccbs_list()");
+ −
+ − if (ccbs_op == CM_CCBS_NONE)
+ − {
+ − /* No CCBS operation currently in progress */
+ − TRACE_EVENT("ccbs_op == CM_CCBS_NONE");
+ − #ifndef CCBS_TEST
+ − aci_res = qAT_PercentCCBS(CMD_SRC_LCL);
+ − #else
+ − aci_res = AT_EXCT;
+ − #endif
+ − if (aci_res == AT_EXCT)
+ − {
+ − TRACE_EVENT("qAT_PercentCCBS returned AT_EXCT");
+ − ccbs_op = CM_CCBS_LIST;
+ − res = CM_OK;
+ − }
+ − else
+ − {
+ − TRACE_EVENT_P1("qAT_PercentCCBS returned %d", aci_res);
+ − }
+ − }
+ − else
+ − {
+ − TRACE_EVENT_P1("ccbs_op is %d", ccbs_op);
+ − }
+ −
+ − return res;
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT: MMI-Framework (8417) MODULE: MFW_CM |
+ − | STATE : code ROUTINE: cm_ccbs_accept_registration |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE : Accepts the CCBS registration being offered
+ −
+ − Returns: T_MFW: CM_OK if successful, CM_ERROR if not
+ −
+ − Arguments: None
+ − */
+ − T_MFW cm_ccbs_accept_registration(void)
+ − {
+ − T_MFW res = CM_ERROR; // The value to be returned by this function
+ − T_ACI_RETURN aci_res; // The value returned by sAT_PlusCHLD
+ −
+ − TRACE_FUNCTION("cm_ccbs_accept_registration()");
+ −
+ − if (ccbs_op == CM_CCBS_NONE)
+ − {
+ − /* No CCBS operation currently in progress */
+ − TRACE_EVENT("ccbs_op == CM_CCBS_NONE");
+ − cm_set_cmd_status(CHLD_MOD_Ccbs, "");
+ − cmd_hold = MFW_CM_CCBS_REGISTER;
+ − #ifndef CCBS_TEST
+ − aci_res = sAT_PlusCHLD(CMD_SRC_LCL, CHLD_MOD_Ccbs, NULL);
+ − #else
+ − aci_res = AT_EXCT;
+ − #endif
+ − if (aci_res == AT_EXCT)
+ − {
+ − TRACE_EVENT("sAT_PlusCHLD returned AT_EXCT");
+ − ccbs_op = CM_CCBS_ACCEPT_REGISTRATION;
+ − res = CM_OK;
+ − }
+ − else
+ − {
+ − TRACE_EVENT_P1("sAT_PlusCHLD returned %d", aci_res);
+ − }
+ − }
+ − else
+ − {
+ − TRACE_EVENT_P1("ccbs_op is %d", ccbs_op);
+ − }
+ −
+ − return res;
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT: MMI-Framework (8417) MODULE: MFW_CM |
+ − | STATE : code ROUTINE: cm_ccbs_reject_registration |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE : Rejects the CCBS registration being offered
+ −
+ − Returns: T_MFW: CM_OK if successful, CM_ERROR if not
+ −
+ − Arguments: None
+ − */
+ − T_MFW cm_ccbs_reject_registration(void)
+ − {
+ − T_MFW res = CM_ERROR; // The value to be returned by this function
+ − T_ACI_RETURN aci_res; // The value returned by sAT_H
+ −
+ − TRACE_FUNCTION("cm_ccbs_reject_registration()");
+ −
+ − if (ccbs_op == CM_CCBS_NONE)
+ − {
+ − /* No CCBS operation currently in progress */
+ − TRACE_EVENT("ccbs_op == CM_CCBS_NONE");
+ − cmd_hold = MFW_CM_CCBS_REGISTER;
+ − #ifndef CCBS_TEST
+ − aci_res = sAT_H(CMD_SRC_LCL);
+ − #else
+ − aci_res = AT_EXCT;
+ − #endif
+ − if (aci_res == AT_EXCT)
+ − {
+ − TRACE_EVENT("sAT_H returned AT_EXCT");
+ − ccbs_op = CM_CCBS_REJECT_REGISTRATION;
+ − res = CM_OK;
+ − }
+ − else
+ − {
+ − TRACE_EVENT_P1("sAT_H returned %d", aci_res);
+ − }
+ − }
+ − else
+ − {
+ − TRACE_EVENT_P1("ccbs_op is %d", ccbs_op);
+ − }
+ −
+ − return res;
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT: MMI-Framework (8417) MODULE: MFW_CM |
+ − | STATE : code ROUTINE: cm_ccbs_accept_recall |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE : Accepts the CCBS recall being offered
+ −
+ − Returns: T_MFW: CM_OK if successful, CM_BLACKIST or CM_ERROR if not
+ −
+ − Arguments: UBYTE *number - the number of the phone to call
+ − T_MFW_CM_CALL_TYPE type - the type of the call to be made
+ − */
+ − T_MFW cm_ccbs_accept_recall(UBYTE *number, T_MFW_CM_CALL_TYPE type)
+ − {
+ − T_MFW res = CM_ERROR; // The value to be returned by this function
+ − /*a0393213 compiler warnings removal -- removed def of search_res*/
+ − T_ACI_RETURN aci_res; // The value returned by sAT_PlusCHLD
+ − SHORT call_number;// The call identity of any held call
+ − UBYTE phone[MFW_NUM_LEN]; // Working copy of phone number
+ − // CHAR *rest; // Parameter for ss_decode // RAVI
+ − // T_KSD_SEQPARAM para; // Parameter for ss_decode // RAVI
+ − // T_MFW_SS_RETURN ss_res; // The value returned by ss_decode // RAVI
+ −
+ − TRACE_FUNCTION("cm_ccbs_accept_recall()");
+ −
+ − if (ccbs_op == CM_CCBS_NONE)
+ − {
+ − /* No CCBS operation currently in progress */
+ − TRACE_EVENT("ccbs_op == CM_CCBS_NONE");
+ − /* Ensure the number given is an ASCIIZ string thet is not too long */
+ − mfwStrncpy((char *)phone, (char *)number, MFW_NUM_LEN);
+ − TRACE_EVENT_P1("ccbs nr: %s", phone);
+ −
+ − /* Make sure that it is OK to call this number */
+ − if ((res = cm_check_mo_number(phone)) == CM_OK)
+ − {
+ − TRACE_EVENT("cm_check_mo_number returned CM_OK");
+ − /* Set up data as for mobile originated call */
+ − cm_set_call_mode(type);
+ − call_stat = OUTGOING_CALL;
+ − redial_count = 0;
+ − cc_stat.type = OUTGOING_CALL;
+ − currConnecting = 1;
+ −
+ − if ((cm_search_callId(CAL_STAT_Held, &call_number)) == CM_OK)
+ − {
+ − TRACE_EVENT("Held call: CHLD_MOD_RelActAndAcpt");
+ − /* There is a held call: release active call and accept callback */
+ − cm_set_cmd_status(CHLD_MOD_RelActAndAcpt, "");
+ − #ifndef CCBS_TEST
+ − aci_res = sAT_PlusCHLD(CMD_SRC_LCL, CHLD_MOD_RelActAndAcpt, NULL);
+ − #else
+ − aci_res = AT_EXCT;
+ − #endif
+ − }
+ − else
+ − {
+ − TRACE_EVENT("No held call: CHLD_MOD_HldActAndAcpt");
+ − /* There is no held call: hold any active call and accept callback */
+ − cm_set_cmd_status(CHLD_MOD_HldActAndAcpt, "");
+ − #ifndef CCBS_TEST
+ − aci_res = sAT_PlusCHLD(CMD_SRC_LCL, CHLD_MOD_HldActAndAcpt, NULL);
+ − #else
+ − aci_res = AT_EXCT;
+ − #endif
+ − }
+ −
+ − cmd_hold = MFW_CM_CCBS_RECALL;
+ −
+ − if (aci_res == AT_EXCT)
+ − {
+ − TRACE_EVENT("sAT_PlusCHLD returned AT_EXCT");
+ − ccbs_op = CM_CCBS_ACCEPT_RECALL;
+ − res = CM_OK;
+ − }
+ − else
+ − {
+ − /* The attempt to accept the callback failed */
+ − TRACE_EVENT_P1("sAT_PlusCHLD returned %d", aci_res);
+ − call_stat = MFW_CALL_FREE;
+ − }
+ − }
+ − else
+ − {
+ − /* It is not OK to call this number for some reason */
+ − TRACE_EVENT_P1("cm_check_mo_number returned %d", res);
+ − }
+ − }
+ − else
+ − {
+ − TRACE_EVENT_P1("ccbs_op is %d", ccbs_op);
+ − }
+ −
+ − return res;
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT: MMI-Framework (8417) MODULE: MFW_CM |
+ − | STATE : code ROUTINE: cm_ccbs_reject_recall |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE : Rejects the CCBS recall being offered
+ −
+ − Returns: T_MFW: CM_OK if successful, CM_ERROR if not
+ −
+ − Arguments: None
+ − */
+ − T_MFW cm_ccbs_reject_recall(void)
+ − {
+ − T_MFW res = CM_ERROR; // The value to be returned by this function
+ − T_ACI_RETURN aci_res; // The value returned by sAT_PlusCHLD
+ −
+ − TRACE_FUNCTION("cm_ccbs_reject_recall()");
+ −
+ − if (ccbs_op == CM_CCBS_NONE)
+ − {
+ − /* No CCBS operation currently in progress */
+ − TRACE_EVENT("ccbs_op == CM_CCBS_NONE");
+ − cm_set_cmd_status(CHLD_MOD_RelHldOrUdub, "");
+ − cmd_hold = MFW_CM_CCBS_RECALL;
+ −
+ − #ifndef CCBS_TEST
+ − aci_res = sAT_H(CMD_SRC_LCL);
+ − #else
+ − aci_res = AT_CMPL;
+ − #endif
+ − if (aci_res == AT_CMPL)
+ − {
+ − TRACE_EVENT("sAT_H returned AT_CMPL");
+ − ccbs_op = CM_CCBS_REJECT_RECALL;
+ − res = CM_OK;
+ − }
+ − else
+ − {
+ − TRACE_EVENT_P1("sAT_H returned %d", aci_res);
+ − }
+ − }
+ − else
+ − {
+ − TRACE_EVENT_P1("ccbs_op is %d", ccbs_op);
+ − }
+ −
+ − return res;
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT: MMI-Framework (8417) MODULE: MFW_CM |
+ − | STATE : code ROUTINE: cm_ccbs_ok |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE : Called by rAT_OK for "OK" result code for %CCBS command
+ −
+ − Returns: Nothing
+ −
+ − Arguments: None
+ − */
+ − void cm_ccbs_ok(void)
+ − {
+ − TRACE_FUNCTION("cm_ccbs_ok()");
+ −
+ − memset((void *)&ccbs_info, 0, sizeof(ccbs_info));
+ −
+ − ccbs_info.operation = ccbs_op;
+ − ccbs_op = CM_CCBS_NONE;
+ − ccbs_info.type = CM_CCBS_OK;
+ −
+ − TRACE_EVENT_P2("E_CM_CCBS: op = %d: type = %d",
+ − ccbs_info.operation, ccbs_info.type);
+ −
+ − cm_signal(E_CM_CCBS, &ccbs_info);
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT: MMI-Framework (8417) MODULE: MFW_CM |
+ − | STATE : code ROUTINE: cm_ccbs_error |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE : Called by rAT_PlusCME for "+CME error" result code for %CCBS command
+ −
+ − Returns: Nothing
+ −
+ − Arguments: None
+ − */
+ − void cm_ccbs_error(void)
+ − {
+ − TRACE_FUNCTION("cm_ccbs_error()");
+ −
+ − memset((void *)&ccbs_info, 0, sizeof(ccbs_info));
+ −
+ − ccbs_info.operation = ccbs_op;
+ − ccbs_op = CM_CCBS_NONE;
+ − ccbs_info.type = CM_CCBS_ERROR;
+ −
+ − TRACE_EVENT_P2("E_CM_CCBS: op = %d: type = %d",
+ − ccbs_info.operation, ccbs_info.type);
+ −
+ − cm_signal(E_CM_CCBS, &ccbs_info);
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT: MMI-Framework (8417) MODULE: MFW_CM |
+ − | STATE : code ROUTINE: rAT_PercentCCBS |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE : Called by ACI for "%CCBS:" result code
+ −
+ − Returns: Nothing
+ −
+ − Arguments: T_ACI_CCBS_IND indct - type of %CCBS indication
+ − T_ACI_CCBS_STAT status - status of %CCBS indication
+ − T_ACI_CCBS_SET *setting - optiona parameters of %CCBS indication
+ − */
+ − void rAT_PercentCCBS( T_ACI_CCBS_IND indct,
+ − T_ACI_CCBS_STAT status,
+ − T_ACI_CCBS_SET *setting )
+ − {
+ − TRACE_FUNCTION("rAT_PercentCCBS()");
+ − TRACE_EVENT_P3("indct = %d: status = %d: setting = %p", indct, status, setting);
+ −
+ − memset((void *)&ccbs_info, 0, sizeof(ccbs_info));
+ −
+ − /* Fill in the fields of the E_CM_CCBS event structure */
+ − switch (indct)
+ − {
+ − case CCBS_IND_Possible:
+ − case CCBS_IND_Recall:
+ − case CCBS_IND_PossibilityTimedOut:
+ − case CCBS_IND_RecallTimedOut:
+ −
+ − /* An asynchronous %CCBS, not in response to a %CCBS command */
+ − TRACE_EVENT("Unsolicited event");
+ − ccbs_info.operation = CM_CCBS_ASYNC;
+ − break;
+ −
+ − default:
+ − TRACE_EVENT("Solicited event");
+ − ccbs_info.operation = ccbs_op;
+ − break;
+ − }
+ −
+ − ccbs_info.type = CM_CCBS_INFO;
+ − ccbs_info.indct = indct;
+ − ccbs_info.status = status;
+ −
+ − TRACE_EVENT_P2("E_CM_CCBS: op = %d: type = %d",
+ − ccbs_info.operation, ccbs_info.type);
+ − TRACE_EVENT_P2(" indct = %d: status = %d",
+ − ccbs_info.indct, ccbs_info.status);
+ −
+ − if (setting == (T_ACI_CCBS_SET *) NULL)
+ − {
+ − /* No T_ACI_CCBS_SET structure given. Indicate in the idx field of ccbs_info */
+ − TRACE_EVENT("setting == NULL");
+ − ccbs_info.idx = 0;
+ − }
+ − else
+ − {
+ − /* T_ACI_CCBS_SET structure given. Fill in the remaining field of ccbs_info */
+ − TRACE_EVENT("setting != NULL");
+ − ccbs_info.idx = setting->idx;
+ − strncpy((char *) ccbs_info.number, (char *) setting->number, sizeof(ccbs_info.number)-1);
+ − ccbs_info.number[sizeof(ccbs_info.number)-1] = '\0';
+ − ccbs_info.ton = phb_cvtTon(setting->type.ton);
+ − ccbs_info.call_type = cm_callTyp_cvt(setting->class_type);
+ − strncpy((char *) ccbs_info.subaddr, (char *) setting->subaddr, sizeof(ccbs_info.subaddr)-1);
+ − ccbs_info.subaddr[sizeof(ccbs_info.subaddr)-1] = '\0';
+ − ccbs_info.alrtPtn = setting->alrtPtn;
+ − TRACE_EVENT_P3(" idx = %d: number = %s: ton = %d",
+ − ccbs_info.idx, ccbs_info.number, ccbs_info.ton);
+ − TRACE_EVENT_P3(" call_type = %d: subaddr = %s: alrtPtn = %d",
+ − ccbs_info.call_type, ccbs_info.subaddr, ccbs_info.alrtPtn);
+ − }
+ −
+ − cm_signal(E_CM_CCBS, &ccbs_info);
+ − }
+ −
+ − /* Marcus: CCBS: 13/11/2002: End */
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT: MMI-Framework (8417) MODULE: MFW_CM |
+ − | STATE : code ROUTINE: cm_error_dial |
+ − +--------------------------------------------------------------------+
+ −
+ −
+ − PURPOSE : The call setup is not successful
+ −
+ − */
+ −
+ − void cm_error_dial(T_ACI_CME_ERR err)
+ − {
+ − TRACE_FUNCTION("cm_error_dial()");
+ −
+ − switch (err)
+ − {
+ − case CME_ERR_OpNotAllow: /* the active call can not be hold */
+ − /* allow a new outgoing */
+ − call_stat = MFW_CALL_FREE;
+ − call_type = MFW_CALL_FREE;
+ − cmd.command = CM_HOLD;
+ − if (cm_search_callId(CAL_STAT_Active, &cmd.call_number) NEQ CM_OK)
+ − cmd.call_number = -1;
+ − cmd.result = NotPresent;
+ − cm_signal(E_CM_COMMAND, &cmd);
+ − break;
+ −
+ − /*SPR#2235 - DS - If handset is powered-up without a SIM and an emergency
+ − *call is attempted, the UK networks will reject the call attempt. Send a signal to
+ − *the BMI to enable it to destroy the call and show an appropriate error message.
+ − *
+ − *The ACI calls rAT_PlusCME() - then rAT_PlusCME() calls this funct - for this SIM
+ − *failure but the ACI doesn't supply the callId. Without the callId, the MFW/BMI
+ − *cannot close down the call properly. The ACI interface will need to be changed
+ − *so that it supplies the callId (if there is an active call) when this failure occurs.
+ − */
+ − case CME_ERR_SimFail:
+ − /* allow a new outgoing */
+ − call_stat = MFW_CALL_FREE;
+ − call_type = MFW_CALL_FREE;
+ −
+ − /*SPR#2235 - DS - Fake the callId. Workaround needed until the ACI interface is changed */
+ − cm_error_connect(1);
+ − break;
+ −
+ − default:
+ − TRACE_EVENT_P1("Error code: %d. No signal sent.", err);
+ − break;
+ − }
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT: MMI-Framework (8417) MODULE: MFW_CM |
+ − | STATE : code ROUTINE: cm_data_connect |
+ − +--------------------------------------------------------------------+
+ −
+ −
+ − PURPOSE : Fax/Data connect
+ −
+ − */
+ −
+ − void cm_data_connect(SHORT callId)
+ − {
+ − SHORT call_number;
+ −
+ − TRACE_FUNCTION("cm_data_connect()");
+ −
+ − call_number = callId;
+ − cm_signal(E_CM_CONNECT, &call_number);
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT: MMI-Framework (8417) MODULE: MFW_CM |
+ − | STATE : code ROUTINE: cm_data_connect |
+ − +--------------------------------------------------------------------+
+ −
+ −
+ − PURPOSE : Fax/Data connect
+ −
+ − */
+ −
+ − void cm_wap_data_connected(void)
+ − {
+ − // SHORT call_number; // RAVI
+ −
+ − TRACE_FUNCTION("cm_wap_data_connected()");
+ −
+ − cm_signal(E_CM_WAP_CALL_CONNECTED, NULL);
+ − }
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT: MMI-Framework (8417) MODULE: MFW_CM |
+ − | STATE : code ROUTINE: cm_deflect_incoming_call |
+ − +--------------------------------------------------------------------+
+ −
+ −
+ − PURPOSE : try to deflect a call using AT command CTFR
+ −
+ − */
+ − T_MFW cm_deflect_incoming_call(char* number)
+ − { T_ACI_RETURN result;
+ − T_ACI_TOA type;
+ − T_ACI_TOS subaddr_type;
+ −
+ − type.ton = TON_Unknown;
+ − type.npi = NPI_Unknown;
+ −
+ − subaddr_type.tos = TOS_NotPresent;
+ − subaddr_type.oe = OE_NotPresent;
+ −
+ − result = sAT_PlusCTFR(CMD_SRC_LCL, number, &type, NULL, &subaddr_type);
+ −
+ − if ((result == AT_BUSY) || (result == AT_FAIL))
+ − return FALSE;
+ − return TRUE;
+ −
+ − }
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT: MMI-Framework (8417) MODULE: MFW_CM |
+ − | STATE : code ROUTINE: cm_ok_CTFR |
+ − +--------------------------------------------------------------------+
+ −
+ −
+ − PURPOSE : sends call deflect OK event to MMI
+ −
+ − */
+ − void cm_ok_CTFR(void)
+ − { BOOL status = TRUE;
+ −
+ − cm_signal(E_CM_CALL_DEFLECT_STATUS, &status);
+ −
+ − }
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT: MMI-Framework (8417) MODULE: MFW_CM |
+ − | STATE : code ROUTINE: cm_error_CTFR |
+ − +--------------------------------------------------------------------+
+ −
+ −
+ − PURPOSE : Sends call deflect failed event to MMI
+ −
+ − */
+ − void cm_error_CTFR(void)
+ − {
+ − BOOL status = FALSE;
+ −
+ − cm_signal(E_CM_CALL_DEFLECT_STATUS, &status);
+ − }
+ − #ifdef CCBS_TEST
+ − /* Marcus: CCBS testing: 20/11/2002: Start */
+ − static void strlower(char *string)
+ − {
+ − while(*string)
+ − {
+ − *string = (char)tolower((int) *string);
+ − string++;
+ − }
+ − }
+ −
+ − static BOOL getCmdId(char *token, T_ACI_AT_CMD *cmdId)
+ − {
+ − BOOL cmdIdOk = FALSE;
+ − TRACE_FUNCTION("getCmdId()");
+ − if (token)
+ − {
+ − strlower(token);
+ − TRACE_EVENT_P1("token: %s", token);
+ − if (strstr(token, "ccbs"))
+ − {
+ − *cmdId = AT_CMD_CCBS;
+ − cmdIdOk = TRUE;
+ − }
+ − else if (strstr(token, "chld"))
+ − {
+ − *cmdId = AT_CMD_CHLD;
+ − cmdIdOk = TRUE;
+ − }
+ − else if (strcmp("h", token) == 0)
+ − {
+ − *cmdId = AT_CMD_H;
+ − cmdIdOk = TRUE;
+ − }
+ − else if ((*cmdId = atoi(token)))
+ − {
+ − cmdIdOk = TRUE;
+ − }
+ − }
+ − else
+ − {
+ − TRACE_EVENT("No token");
+ − }
+ −
+ − return cmdIdOk;
+ − }
+ − #endif
+ −
+ − #if defined MFW & defined TI_PS_FF_AT_P_CMD_MMITEST
+ − void rAT_PercentMMITEST(char *param)
+ − {
+ − char work[80];
+ − #ifdef CCBS_TEST /*a0393213 compiler warning removal. 'token' removed conditionally*/
+ − char *token; // Current token obtained from strtok
+ − #endif
+ − TRACE_FUNCTION("rAT_PercentMMITEST()");
+ −
+ − strncpy(work, param, sizeof(work)-1);
+ − work[sizeof(work)-1] = '\0';
+ −
+ − #ifdef CCBS_TEST
+ − if ((token = strtok(work, ",()")) != NULL)
+ − #else
+ − if (strtok(work, ",()") != NULL)
+ − #endif
+ − {
+ − #ifdef CCBS_TEST
+ − T_ACI_AT_CMD cmdId;
+ − strlower(token);
+ − TRACE_EVENT_P1("token: %s", token);
+ −
+ − if (strcmp("ok", token) == 0)
+ − {
+ − TRACE_EVENT("OK");
+ − if ((token = strtok(NULL, ",()")) != NULL)
+ − {
+ − if (getCmdId(token, &cmdId) == TRUE)
+ − {
+ − TRACE_EVENT_P1("rAT_OK(cmdId = %d", cmdId);
+ − rAT_OK(cmdId);
+ − }
+ − else
+ − {
+ − TRACE_EVENT("Unknown cmdId");
+ − }
+ − }
+ − else
+ − {
+ − TRACE_EVENT("No cmdId token");
+ − }
+ − }
+ − else if (strcmp("error", token) == 0)
+ − {
+ − TRACE_EVENT("ERROR");
+ − if ((token = strtok(NULL, ",()")) != NULL)
+ − {
+ − if (getCmdId(token, &cmdId) == TRUE)
+ − {
+ − T_ACI_CME_ERR err;
+ − if ((token = strtok(NULL, ",()")) != NULL)
+ − {
+ − err = atoi(token);
+ − rAT_PlusCME(cmdId, err);
+ − }
+ − else
+ − {
+ − TRACE_EVENT("No err token");
+ − }
+ − }
+ − }
+ − else
+ − {
+ − TRACE_EVENT("No cmdId token");
+ − }
+ − }
+ − else if (strcmp("info", token) == 0)
+ − {
+ − T_ACI_CCBS_IND indct = CCBS_IND_NotPresent;
+ − T_ACI_CCBS_STAT status = CCBS_STAT_NotPresent;
+ − T_ACI_CCBS_SET setting, *pSetting = NULL;
+ − TRACE_EVENT("INFO");
+ − if ((token = strtok(NULL, ",()")) != NULL)
+ − {
+ − strlower(token);
+ − TRACE_EVENT_P1("token: %s", token);
+ − if (strstr(token, "notpresent"))
+ − indct = CCBS_IND_NotPresent;
+ − else if (strstr(token, "possibility"))
+ − indct = CCBS_IND_PossibilityTimedOut;
+ − else if (strstr(token, "possible"))
+ − indct = CCBS_IND_Possible;
+ − else if (strstr(token, "registered"))
+ − indct = CCBS_IND_Registered;
+ − else if (strstr(token, "recallt"))
+ − indct = CCBS_IND_RecallTimedOut;
+ − else if (strstr(token, "recall"))
+ − indct = CCBS_IND_Recall;
+ − else if (strstr(token, "irgt"))
+ − indct = CCBS_IND_IrgtResult;
+ − }
+ −
+ − if ((token = strtok(NULL, ",()")) != NULL)
+ − {
+ − strlower(token);
+ − TRACE_EVENT_P1("token: %s", token);
+ − if (strstr(token, "notpresent"))
+ − status = CCBS_STAT_NotPresent;
+ − else if (strstr(token, "notprov"))
+ − status = CCBS_STAT_NotProvisioned;
+ − else if (strstr(token, "prov"))
+ − status = CCBS_STAT_Provisioned;
+ − else if (strstr(token, "active"))
+ − status = CCBS_STAT_Active;
+ − }
+ −
+ − setting.idx = 0;
+ − if ((token = strtok(NULL, ",()")) != NULL)
+ − {
+ − TRACE_EVENT_P1("token: %s", token);
+ − setting.idx = atoi(token);
+ − }
+ −
+ − if (setting.idx != 0)
+ − {
+ − pSetting = &setting;
+ − strcpy(setting.number, "01317180538");
+ − setting.type.ton = TON_National;
+ − setting.type.npi = NPI_IsdnTelephony;
+ − setting.subaddr[0] = '\0';
+ − setting.satype.tos = TOS_NotPresent;
+ − setting.satype.oe = OE_NotPresent;
+ − setting.class_type = CLASS_Vce;
+ − setting.alrtPtn = ALPT_Level_0;
+ −
+ − if ((token = strtok(NULL, ",()")) != NULL)
+ − {
+ − TRACE_EVENT_P1("token: %s", token);
+ − strncpy(setting.number, token, sizeof(setting.number)-1);
+ − setting.number[sizeof(setting.number)-1] = '\0';
+ − }
+ −
+ − if ((token = strtok(NULL, ",()")) != NULL)
+ − {
+ − TRACE_EVENT_P1("token: %s", token);
+ − setting.type.ton = TON_International;
+ − }
+ − }
+ −
+ − TRACE_EVENT_P3("rAT_PercentCCBS(%d, %d, %p)", indct, status, pSetting);
+ − if (pSetting != NULL)
+ − {
+ − TRACE_EVENT_P3("idx = %d: number = %s: ton = %d",
+ − setting.idx, setting.number, setting.type.ton);
+ − }
+ − rAT_PercentCCBS(indct, status, pSetting);
+ − }
+ − else
+ − {
+ − TRACE_EVENT("Unrecognised token");
+ − }
+ − #endif
+ − }
+ − else
+ − {
+ − TRACE_EVENT("No token");
+ − }
+ − }
+ − /* Marcus: CCBS testing: 20/11/2002: End */
+ − #endif /* defined MFW & defined TI_PS_FF_AT_P_CMD_MMITEST */
+ −
+ − /* SPR#1985 - SH - Added this function */
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT: MMI-Framework (8417) MODULE: MFW_CM |
+ − | STATE : code ROUTINE: cm_tty_enable |
+ − +--------------------------------------------------------------------+
+ −
+ −
+ − PURPOSE : Receipt of unsolicited TTY information
+ −
+ − */
+ −
+ − void rAT_PercentCTYI(T_ACI_CTTY_NEG neg, T_ACI_CTTY_TRX trx)
+ − {
+ − T_MFW_CM_CTYI res;
+ −
+ − TRACE_FUNCTION("rAT_PercentCTYI()");
+ − #ifdef MMI_LINT_WARNING_REMOVAL /*a0393213 lint warnings removal*/
+ − currCmd = AT_CMD_NONE;
+ − #endif
+ − switch(neg)
+ − {
+ − case CTTY_NEG_None:
+ − res.neg = CTYI_NONE;
+ − break;
+ − case CTTY_NEG_Request:
+ − res.neg = CTYI_REQUEST;
+ − break;
+ − case CTTY_NEG_Reject:
+ − res.neg = CTYI_REJECT;
+ − break;
+ − case CTTY_NEG_Grant:
+ − res.neg = CTYI_GRANT;
+ − break;
+ − }
+ −
+ − cm_signal(E_CM_CTYI, &res);
+ −
+ − return;
+ − }
+ −
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT: MMI-Framework (8417) MODULE: MFW_CM |
+ − | STATE : code ROUTINE: cm_tty_enable |
+ − +--------------------------------------------------------------------+
+ −
+ −
+ − PURPOSE : Request ACI to switch TTY on or off
+ −
+ − */
+ −
+ − void cm_tty_enable(UBYTE enable)
+ − {
+ − /*a0393213 compiler warnings removal -- removed ret*/
+ −
+ − /* Mar 27, 2006 REF:ER OMAPS00071798 */
+ − #ifdef NEPTUNE_BOARD
+ − U8 audioMode = AUDIO_MODE_TEXT;
+ − #endif
+ −
+ − TRACE_FUNCTION("cm_tty_enable()");
+ −
+ − /* SPR#1985 - SH - Now use proper ACI functions. */
+ −
+ − /* sAT_PercentCTTY() is changed bec the audio mode info is needed in lower layer,
+ − for now just use default value when calling the function, if we want to have
+ − the same functionality in BMI/MFW as in ATI, BMI/MFW needs to be updated */
+ − #ifdef NEPTUNE_BOARD
+ − if (flash_read() >= EFFS_OK)
+ − {
+ − audioMode = FFS_flashData.tty_audio_mode;
+ − }
+ −
+ − #endif
+ −
+ − /* Mar 27, 2006 REF:ER OMAPS00071798 */
+ − #ifdef NEPTUNE_BOARD
+ − #ifdef CTTY_AUDIO_MODE
+ − if (enable)
+ − sAT_PercentCTTY(CMD_SRC_LCL, CTTY_MOD_Enable, CTTY_REQ_On, audioMode);
+ − else
+ − sAT_PercentCTTY(CMD_SRC_LCL, CTTY_MOD_Enable, CTTY_REQ_Off, audioMode);
+ − #else
+ − if (enable)
+ − sAT_PercentCTTY(CMD_SRC_LCL, CTTY_MOD_Enable, CTTY_REQ_On );
+ − else
+ − sAT_PercentCTTY(CMD_SRC_LCL, CTTY_MOD_Enable, CTTY_REQ_Off );
+ − #endif
+ −
+ − #else
+ − if (enable)
+ − sAT_PercentCTTY(CMD_SRC_LCL, CTTY_MOD_Enable, CTTY_REQ_On );
+ − else
+ − sAT_PercentCTTY(CMD_SRC_LCL, CTTY_MOD_Enable, CTTY_REQ_Off );
+ − #endif
+ −
+ −
+ − /* SPR#1985 - SH - Check that TTY status has changed and inform MMI */
+ −
+ − cm_tty_query();
+ −
+ − return;
+ − }
+ −
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT: MMI-Framework (8417) MODULE: MFW_CM |
+ − | STATE : code ROUTINE: cm_tty_query |
+ − +--------------------------------------------------------------------+
+ −
+ −
+ − PURPOSE : Query status of TTY, inform MMI. */
+ − /*SPR#1985 - SH - Added this function */
+ −
+ − void cm_tty_query(void)
+ − {
+ − T_MFW_CM_CTYI res;
+ − // T_ACI_RETURN ret; // RAVI
+ − T_ACI_CTTY_MOD mode;
+ − T_ACI_CTTY_REQ req;
+ − T_ACI_CTTY_STAT stat;
+ − T_ACI_CTTY_TRX trx;
+ −
+ − /* Mar 27, 2006 REF:ER OMAPS00071798 */
+ − #ifdef NEPTUNE_BOARD
+ − U8 audio_mode;
+ − #endif
+ −
+ − TRACE_FUNCTION("cm_tty_query()");
+ −
+ − /* Mar 27, 2006 REF:ER OMAPS00071798 */
+ − #ifdef NEPTUNE_BOARD
+ − #ifdef CTTY_AUDIO_MODE
+ − qAT_PercentCTTY(CMD_SRC_LCL, &mode, &req, &stat, &trx, &audio_mode);
+ − #else
+ − qAT_PercentCTTY(CMD_SRC_LCL, &mode, &req, &stat, &trx);
+ − #endif
+ − #else
+ − qAT_PercentCTTY(CMD_SRC_LCL, &mode, &req, &stat, &trx);
+ − #endif
+ −
+ − res.neg = CTYI_REJECT;
+ −
+ − if (req==CTTY_REQ_On)
+ − {
+ − if (req)
+ − res.neg = CTYI_GRANT;
+ − }
+ −
+ − cm_signal(E_CM_CTYI, &res);
+ −
+ − return;
+ − }
+ −
+ − // Feb 03, 2005 REF: CRR 25960 x0012850
+ − // Description: Call Hold: While one call in Active and other in Held by swapping either of phone is not audible
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT: MMI-Framework MODULE: MFW_CM |
+ − | STATE : code ROUTINE: cm_setSpeechMode |
+ − +--------------------------------------------------------------------+
+ −
+ −
+ − PURPOSE : MFW function to call psaCC_setSpeechMode() to attach user connection.
+ −
+ − */
+ − void cm_setSpeechMode(void)
+ − {
+ − TRACE_FUNCTION("cm_setSpeechMode()");
+ − psaCC_setSpeechMode();
+ − return;
+ − }
+ −
+ −
+ − // Sep 12, 2005 REF: MMI-SMR-34085 x0021334
+ − // Description: RE: Add +CDIP command - MMI Additions
+ − // Solution: Dummy implementation of function "rAT_PlusCDIP()" is done to enable successful compilation.
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT: MMI-Framework MODULE: MFW_CM |
+ − | STATE : code ROUTINE : rAT_PlusCDIP |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE : Stub implementation
+ − */
+ −
+ − GLOBAL void rAT_PlusCDIP( CHAR * number,
+ − T_ACI_TOA * type,
+ − CHAR * subaddr,
+ − T_ACI_TOS * satype)
+ − {
+ − TRACE_FUNCTION ("rAT_PlusCDIP()");
+ − }
+ −
+ −
+ − /*June 15, 2006 DR:OMAPS00079492 x0043642 */
+ − /*******************************************************************************
+ −
+ − $Function: set_cmdHold
+ −
+ − $Description: Sets the value of the static variable cmd_hold.
+ −
+ − $Returns: void
+ −
+ − $Arguments: command
+ − *******************************************************************************/
+ − void set_cmdHold(int command)
+ − {
+ − TRACE_FUNCTION("set_cmdHold()");
+ − TRACE_EVENT_P1("Old cmd_hold= %d", cmd_hold);
+ − cmd_hold = command;
+ − TRACE_EVENT_P1("New cmd_hold= %d", cmd_hold);
+ − }
+ −
+ −
+ −
+ −
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT: MMI-Framework MODULE: MFW_CM |
+ − | STATE : code ROUTINE : mfw_get_ALS_type |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE : this function returns the type of call (voice call or data call etc...)
+ − */
+ − //x0pleela 25 May, 2006 DR: OMAPS00070657
+ − #ifdef FF_CPHS
+ − T_MFW mfw_get_ALS_type()
+ − {
+ − return in_call.type;
+ − }
+ − #endif
+ −
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT: MMI-Framework MODULE: MFW_CM |
+ − | STATE : code ROUTINE : mfw_set_OtherSrc_Value |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE : this function sets the value of uOtherSrc to either TRUE or FALSE
+ − */
+ − //x0pleela 03 Nov, 2006 DR: OMAPS00101158
+ − GLOBAL void mfw_set_OtherSrc_Value(UBYTE otherSrc)
+ − {
+ − TRACE_FUNCTION("mfw_set_OtherSrc_Value");
+ − uOtherSrc = otherSrc;
+ − }
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT: MMI-Framework MODULE: MFW_CM |
+ − | STATE : code ROUTINE : mfw_get_OtherSrc_Value |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE : this function is to get the value of uOtherSrc
+ − */
+ − //x0pleela 03 Nov, 2006 DR: OMAPS00101158
+ − GLOBAL UBYTE mfw_get_OtherSrc_Value(void)
+ − {
+ − TRACE_FUNCTION("mfw_get_OtherSrc_Value");
+ − return uOtherSrc;
+ − }
+ −