phoneengine/phonemodel/src/cpephonemodel.cpp
branchRCL_3
changeset 61 41a7f70b3818
parent 44 3c221667e687
child 62 5266b1f337bd
equal deleted inserted replaced
58:40a3f856b14d 61:41a7f70b3818
    18 
    18 
    19 
    19 
    20 //  INCLUDE FILES
    20 //  INCLUDE FILES
    21 #include "cpeactivestarter.h"
    21 #include "cpeactivestarter.h"
    22 #include "cpeexternaldatahandler.h"
    22 #include "cpeexternaldatahandler.h"
    23 #include "cpeidlestatusmonitor.h"
       
    24 #include "cpemessagehandler.h"
    23 #include "cpemessagehandler.h"
    25 #include "cpephonemodel.h"
    24 #include "cpephonemodel.h"
    26 #include "cpeservicehandling.h"
    25 #include "cpeservicehandling.h"
    27 #include "cpesimstatemonitor.h"
    26 #include "cpesimstatemonitor.h"
    28 #include "pepanic.pan"
    27 #include "pepanic.pan"
    37 #include <cpeloghandlingproxy.h>
    36 #include <cpeloghandlingproxy.h>
    38 #include <featmgr.h>
    37 #include <featmgr.h>
    39 #include <mccedtmfinterface.h>
    38 #include <mccedtmfinterface.h>
    40 #include <mpecontacthandling.h>
    39 #include <mpecontacthandling.h>
    41 #include <mpeloghandling.h>
    40 #include <mpeloghandling.h>
       
    41 #include <xqservicerequest.h>
       
    42 #include <xqappmgr.h>
       
    43 #include "phoneservices.h"
    42 
    44 
    43 // CONSTANTS
    45 // CONSTANTS
    44 const TInt KDriveProfile ( 6 );
    46 const TInt KDriveProfile ( 6 );
    45 const TInt KPECallTimerOff = 0;
    47 const TInt KPECallTimerOff = 0;
       
    48 const TInt KTimesToSplitValue = 16;
    46 
    49 
    47 // ==================== LOCAL FUNCTIONS ====================
    50 // ==================== LOCAL FUNCTIONS ====================
    48 
    51 
    49 // ================= MEMBER FUNCTIONS =======================
    52 // ================= MEMBER FUNCTIONS =======================
    50 
    53 
    94     TEFLOGSTRING( KTAOBJECT, "CPEPhoneModel::ConstructL: 4" );
    97     TEFLOGSTRING( KTAOBJECT, "CPEPhoneModel::ConstructL: 4" );
    95     iActiveStarter = CPEActiveStarter::NewL( this );
    98     iActiveStarter = CPEActiveStarter::NewL( this );
    96     TEFLOGSTRING( KTAOBJECT, "CPEPhoneModel::ConstructL: 5" );
    99     TEFLOGSTRING( KTAOBJECT, "CPEPhoneModel::ConstructL: 5" );
    97     iActiveStarter->StartUp();
   100     iActiveStarter->StartUp();
    98     TEFLOGSTRING( KTAOBJECT, "CPEPhoneModel::ConstructL: 6" );
   101     TEFLOGSTRING( KTAOBJECT, "CPEPhoneModel::ConstructL: 6" );
       
   102     // Reserve needed callinfo and remoteinfo from heap.
       
   103     iCallInfo = new ( ELeave ) RMobileCall::TMobileCallInfoV3;
    99     }// ConstructL
   104     }// ConstructL
   100 
   105 
   101 // -----------------------------------------------------------------------------
   106 // -----------------------------------------------------------------------------
   102 // CPEPhoneModel::NewL
   107 // CPEPhoneModel::NewL
   103 // Two-phased constructor.
   108 // Two-phased constructor.
   143     delete iLogHandling;
   148     delete iLogHandling;
   144     delete iAudioData;
   149     delete iAudioData;
   145     delete iCallHandling;
   150     delete iCallHandling;
   146     delete iExternalDataHandler;
   151     delete iExternalDataHandler;
   147     delete iCallStackCutter;
   152     delete iCallStackCutter;
       
   153     delete iCallInfo;
   148 
   154 
   149     if ( iActiveStarter )
   155     if ( iActiveStarter )
   150         {
   156         {
   151         delete iActiveStarter;
   157         delete iActiveStarter;
   152         }
   158         }
   153 
   159 
   154     FeatureManager::UnInitializeLib();
   160     FeatureManager::UnInitializeLib();
   155     iFsSession.Close();
   161     iFsSession.Close();
   156     delete iEngineInfo;
   162     delete iEngineInfo;
   157     delete iConvergedCallEngine;
   163     delete iConvergedCallEngine;
   158     if ( iIdleStatusMonitor )
   164     delete iPhoneServices;
   159         {
       
   160         delete iIdleStatusMonitor;
       
   161         } 
       
   162     }// ~CPEPhoneModel
   165     }// ~CPEPhoneModel
   163 
   166 
   164 // -----------------------------------------------------------------------------
   167 // -----------------------------------------------------------------------------
   165 // CPEPhoneModel::EngineInfo
   168 // CPEPhoneModel::EngineInfo
   166 // Returns the pointer of the CPEEngineInfo object.
   169 // Returns the pointer of the CPEEngineInfo object.
   227             return MESSAGE("EPEMessageAnswer");
   230             return MESSAGE("EPEMessageAnswer");
   228         case MPEPhoneModel::EPEMessageClientDial:
   231         case MPEPhoneModel::EPEMessageClientDial:
   229             return MESSAGE("EPEMessageClientDial");
   232             return MESSAGE("EPEMessageClientDial");
   230         case MPEPhoneModel::EPEMessageClientDialEmergency:
   233         case MPEPhoneModel::EPEMessageClientDialEmergency:
   231             return MESSAGE("EPEMessageClientDialEmergency");
   234             return MESSAGE("EPEMessageClientDialEmergency");
       
   235         case MPEPhoneModel::EPEMessageDialServiceCall:
       
   236             return MESSAGE("EPEMessageDialServiceCall");
   232         case MPEPhoneModel::EPEMessageContinueEmergencyCallInitialization:
   237         case MPEPhoneModel::EPEMessageContinueEmergencyCallInitialization:
   233             return MESSAGE("EPEMessageContinueEmergencyCallInitialization");
   238             return MESSAGE("EPEMessageContinueEmergencyCallInitialization");
   234         case MPEPhoneModel::EPEMessageContinueDTMFSending:
   239         case MPEPhoneModel::EPEMessageContinueDTMFSending:
   235             return MESSAGE("EPEMessageContinueDTMFSending");
   240             return MESSAGE("EPEMessageContinueDTMFSending");
   236         case MPEPhoneModel::EPEMessageDial:
   241         case MPEPhoneModel::EPEMessageDial:
   426             return MESSAGE("EPEMessageIncoming");
   431             return MESSAGE("EPEMessageIncoming");
   427         case MEngineMonitor::EPEMessageInitiatedEmergencyCall:
   432         case MEngineMonitor::EPEMessageInitiatedEmergencyCall:
   428             return MESSAGE("EPEMessageInitiatedEmergencyCall");
   433             return MESSAGE("EPEMessageInitiatedEmergencyCall");
   429         case MEngineMonitor::EPEMessageInitiatedEmergencyWhileActiveVideo:
   434         case MEngineMonitor::EPEMessageInitiatedEmergencyWhileActiveVideo:
   430             return MESSAGE("EPEMessageInitiatedEmergencyWhileActiveVideo");
   435             return MESSAGE("EPEMessageInitiatedEmergencyWhileActiveVideo");
   431         case MEngineMonitor::EPEMessageInitiatedMoCall:
       
   432             return MESSAGE("EPEMessageInitiatedMoCall");
       
   433         case MEngineMonitor::EPEMessagePacketNetworkDetached:
   436         case MEngineMonitor::EPEMessagePacketNetworkDetached:
   434             return MESSAGE("EPEMessagePacketNetworkDetached");
   437             return MESSAGE("EPEMessagePacketNetworkDetached");
   435         case MEngineMonitor::EPEMessageRemoteBusy:
   438         case MEngineMonitor::EPEMessageRemoteBusy:
   436             return MESSAGE("EPEMessageRemoteBusy");            
   439             return MESSAGE("EPEMessageRemoteBusy");            
   437         case MEngineMonitor::EPEMessageSendingDTMF:
   440         case MEngineMonitor::EPEMessageSendingDTMF:
   454             return MESSAGE("EPEMessageContinuingDTMFSending");
   457             return MESSAGE("EPEMessageContinuingDTMFSending");
   455         case MEngineMonitor::EPEMessageCallAdded:
   458         case MEngineMonitor::EPEMessageCallAdded:
   456             return MESSAGE("EPEMessageCallAdded");
   459             return MESSAGE("EPEMessageCallAdded");
   457         case MEngineMonitor::EPEMessageRemoteTerminated:
   460         case MEngineMonitor::EPEMessageRemoteTerminated:
   458             return MESSAGE("EPEMessageRemoteTerminated");
   461             return MESSAGE("EPEMessageRemoteTerminated");
   459         case MEngineMonitor::EPEMessageShowIMEI:
       
   460             return MESSAGE("EPEMessageShowIMEI");
       
   461         case MEngineMonitor::EPEMessageUnknown:
   462         case MEngineMonitor::EPEMessageUnknown:
   462             return MESSAGE("EPEMessageUnknown");
   463             return MESSAGE("EPEMessageUnknown");
   463         case MEngineMonitor::EPEMessagePromptSpeedDial:
       
   464             return MESSAGE("EPEMessagePromptSpeedDial");
       
   465         case MEngineMonitor::EPEMessageSpeedDialNotAssigned:
       
   466             return MESSAGE("EPEMessageSpeedDialNotAssigned");
       
   467         case MEngineMonitor::EPEMessageInvalidSpeedDial:
       
   468             return MESSAGE("EPEMessageInvalidSpeedDial"); 
       
   469         case MEngineMonitor::EPEMessageDataPortLoaned:
   464         case MEngineMonitor::EPEMessageDataPortLoaned:
   470             return MESSAGE("EPEMessageDataPortLoaned");
   465             return MESSAGE("EPEMessageDataPortLoaned");
   471             
   466             
   472         case MEngineMonitor::EPEMessageUnattendedTransferRequest:
   467         case MEngineMonitor::EPEMessageUnattendedTransferRequest:
   473             return MESSAGE("EPEMessageUnattendedTransferRequest");
   468             return MESSAGE("EPEMessageUnattendedTransferRequest");
   478         case MEngineMonitor::EPEMessageMultipleChoices:
   473         case MEngineMonitor::EPEMessageMultipleChoices:
   479             return MESSAGE("EPEMessageMultipleChoices");
   474             return MESSAGE("EPEMessageMultipleChoices");
   480         case MEngineMonitor::EPEMessageRemotePartyInfoChanged:
   475         case MEngineMonitor::EPEMessageRemotePartyInfoChanged:
   481             return MESSAGE("EPEMessageRemotePartyInfoChanged");
   476             return MESSAGE("EPEMessageRemotePartyInfoChanged");
   482         case MEngineMonitor::EPEMessageConnectingWithInband:
   477         case MEngineMonitor::EPEMessageConnectingWithInband:
   483             return MESSAGE("EPEMessageConnectingWithInband");            
   478             return MESSAGE("EPEMessageConnectingWithInband");
   484         case MEngineMonitor::EPEMessageColpNumberAvailable:
   479 
   485             return MESSAGE("EPEMessageColpNumberAvailable");
       
   486         case MEngineMonitor::EPEMessageTransferCallBackRequest:
       
   487             return MESSAGE("EPEMessageTransferCallBackRequest");
       
   488       
       
   489         // Contact messages                   3000 - 3999
   480         // Contact messages                   3000 - 3999
   490         case MEngineMonitor::EPEMessageThumbnailLoadingCompleted:
   481         case MEngineMonitor::EPEMessageThumbnailLoadingCompleted:
   491             return MESSAGE("EPEMessageThumbnailLoadingCompleted");
   482             return MESSAGE("EPEMessageThumbnailLoadingCompleted");
   492 
   483 
   493         // Error messages                     4000 - 4999
   484         // Error messages                     4000 - 4999
   559         // Miscellaneous messages             10000 - 10999
   550         // Miscellaneous messages             10000 - 10999
   560         case MEngineMonitor::EPEMessageInValidEmergencyNumber:
   551         case MEngineMonitor::EPEMessageInValidEmergencyNumber:
   561             return MESSAGE("EPEMessageInValidEmergencyNumber");
   552             return MESSAGE("EPEMessageInValidEmergencyNumber");
   562         case MEngineMonitor::EPEMessageValidEmergencyNumber:
   553         case MEngineMonitor::EPEMessageValidEmergencyNumber:
   563             return MESSAGE("EPEMessageValidEmergencyNumber");
   554             return MESSAGE("EPEMessageValidEmergencyNumber");
   564         case MEngineMonitor::EPEMessagePhoneIdentityReady:
       
   565             return MESSAGE("EPEMessagePhoneIdentityReady");
       
   566         case MEngineMonitor::EPEMessageStartATDialing:
   555         case MEngineMonitor::EPEMessageStartATDialing:
   567             return MESSAGE("EPEMessageStartATDialing");
   556             return MESSAGE("EPEMessageStartATDialing");
   568         case MEngineMonitor::EPEMessageLogEventSaved:
   557         case MEngineMonitor::EPEMessageLogEventSaved:
   569             return MESSAGE("EPEMessageLogEventSaved");
   558             return MESSAGE("EPEMessageLogEventSaved");
   570         case MEngineMonitor::EPEMessageDoNotSendMe:
   559         case MEngineMonitor::EPEMessageDoNotSendMe:
   584         case MEngineMonitor::EPEMessageALSLineChanged:
   573         case MEngineMonitor::EPEMessageALSLineChanged:
   585             return MESSAGE("EPEMessageALSLineChanged");
   574             return MESSAGE("EPEMessageALSLineChanged");
   586         case MEngineMonitor::EPEMessageCallBarred:
   575         case MEngineMonitor::EPEMessageCallBarred:
   587             return MESSAGE("EPEMessageCallBarred");
   576             return MESSAGE("EPEMessageCallBarred");
   588         case MEngineMonitor::EPEMessageIncCallIsForw:
   577         case MEngineMonitor::EPEMessageIncCallIsForw:
   589         	return MESSAGE("EPEMessageIncCallIsForw");
   578             return MESSAGE("EPEMessageIncCallIsForw");
   590         case MEngineMonitor::EPEMessageIncCallForwToC:
   579         case MEngineMonitor::EPEMessageIncCallForwToC:
   591         	return MESSAGE("EPEMessageIncCallForwToC");
   580             return MESSAGE("EPEMessageIncCallForwToC");
   592         case MEngineMonitor::EPEMessageOutCallForwToC:
   581         case MEngineMonitor::EPEMessageOutCallForwToC:
   593         	return MESSAGE("EPEMessageOutCallForwToC");
   582             return MESSAGE("EPEMessageOutCallForwToC");
   594         case MEngineMonitor::EPEMessageForwardUnconditionalModeActive:
   583         case MEngineMonitor::EPEMessageForwardUnconditionalModeActive:
   595         	return MESSAGE( "EPEMessageForwardUnconditionalModeActive" );
   584             return MESSAGE( "EPEMessageForwardUnconditionalModeActive" );
   596         case MEngineMonitor::EPEMessageForwardConditionallyModeActive:
   585         case MEngineMonitor::EPEMessageForwardConditionallyModeActive:
   597         	return MESSAGE( "EPEMessageForwardConditionallyModeActive" );
   586             return MESSAGE( "EPEMessageForwardConditionallyModeActive" );
   598         case MEngineMonitor::EPEMessageDroppedConferenceMember:
   587         case MEngineMonitor::EPEMessageDroppedConferenceMember:
   599             return MESSAGE("EPEMessageDroppedConferenceMember");
   588             return MESSAGE("EPEMessageDroppedConferenceMember");
   600         case MEngineMonitor::EPEMessageGoingOneToOne:
   589         case MEngineMonitor::EPEMessageGoingOneToOne:
   601             return MESSAGE("EPEMessageGoingOneToOne");
   590             return MESSAGE("EPEMessageGoingOneToOne");
   602         case MEngineMonitor::EPEMessageIssuedUSSDRequest:
   591         case MEngineMonitor::EPEMessageIssuedUSSDRequest:
   605             return MESSAGE("EPEMessageRemoteCreatedConference");
   594             return MESSAGE("EPEMessageRemoteCreatedConference");
   606         case MEngineMonitor::EPEMessageRemoteHeld:
   595         case MEngineMonitor::EPEMessageRemoteHeld:
   607             return MESSAGE("EPEMessageRemoteHeld");
   596             return MESSAGE("EPEMessageRemoteHeld");
   608         case MEngineMonitor::EPEMessageRemoteResumed:
   597         case MEngineMonitor::EPEMessageRemoteResumed:
   609             return MESSAGE("EPEMessageRemoteResumed");
   598             return MESSAGE("EPEMessageRemoteResumed");
   610         case MEngineMonitor::EPEMessageShowVersion:
       
   611             return MESSAGE("EPEMessageShowVersion");
       
   612         case MEngineMonitor::EPEMessageTempClirSuppressUnsuccessful:
   599         case MEngineMonitor::EPEMessageTempClirSuppressUnsuccessful:
   613             return MESSAGE("EPEMessageTempClirSuppressUnsuccessful");
   600             return MESSAGE("EPEMessageTempClirSuppressUnsuccessful");
   614         case MEngineMonitor::EPEMessageTempClirActivationUnsuccessful:
   601         case MEngineMonitor::EPEMessageTempClirActivationUnsuccessful:
   615             return MESSAGE("EPEMessageTempClirActivationUnsuccessful");
   602             return MESSAGE("EPEMessageTempClirActivationUnsuccessful");
   616 
   603         case MEngineMonitor::EPEMessageOutgoingCallBarred:
       
   604             return MESSAGE("EPEMessageOutgoingCallBarred");
       
   605             
   617         // Contact messages                       11400 - 11599
   606         // Contact messages                       11400 - 11599
   618 
   607 
   619         // Error messages                         11600 - 11799
   608         // Error messages                         11600 - 11799
   620 
   609 
   621         // Network messages                       11800 - 12999
   610         // Network messages                       11800 - 12999
   631         // Parser messages                        12000 - 12199
   620         // Parser messages                        12000 - 12199
   632         case MEngineMonitor::EPEMessageActivateRfsDeep:
   621         case MEngineMonitor::EPEMessageActivateRfsDeep:
   633             return MESSAGE("EPEMessageActivateRfsDeep");
   622             return MESSAGE("EPEMessageActivateRfsDeep");
   634         case MEngineMonitor::EPEMessageActivateRfsNormal:
   623         case MEngineMonitor::EPEMessageActivateRfsNormal:
   635             return MESSAGE("EPEMessageActivateRfsNormal");
   624             return MESSAGE("EPEMessageActivateRfsNormal");
   636         case MEngineMonitor::EPEMessageActivateWarrantyMode:
       
   637             return MESSAGE("EPEMessageActivateWarrantyMode");
       
   638         case MEngineMonitor::EPEMessageIssuedSSRequest:
   625         case MEngineMonitor::EPEMessageIssuedSSRequest:
   639             return MESSAGE("EPEMessageIssuedSSRequest");
   626             return MESSAGE("EPEMessageIssuedSSRequest");
   640         case MEngineMonitor::EPEMessageIssuingSSRequest:
   627         case MEngineMonitor::EPEMessageIssuingSSRequest:
   641             return MESSAGE("EPEMessageIssuingSSRequest");
   628             return MESSAGE("EPEMessageIssuingSSRequest");
   642 
   629 
   713         {
   700         {
   714         case MPEPhoneModel::EPEMessageTerminateAllConnections:
   701         case MPEPhoneModel::EPEMessageTerminateAllConnections:
   715             errorCode = iMessageHandler->HandleTerminateAllConnections( );
   702             errorCode = iMessageHandler->HandleTerminateAllConnections( );
   716             break;
   703             break;
   717         case MPEPhoneModel::EPEMessageDial:
   704         case MPEPhoneModel::EPEMessageDial:
   718         	//Make a dial request
   705             //Make a dial request
   719             errorCode = iMessageHandler->HandleDialCall( EFalse );
   706             errorCode = iMessageHandler->HandleDialCall( EFalse );
   720             break;
   707             break;
   721         case MPEPhoneModel::EPEMessageReleaseAll: //Make HangUp requests to all calls
   708         case MPEPhoneModel::EPEMessageReleaseAll: //Make HangUp requests to all calls
   722             errorCode = iMessageHandler->HandleReleaseAll( );            
   709             errorCode = iMessageHandler->HandleReleaseAll( );            
   723             break;
   710             break;
   724         case MPEPhoneModel::EPEMessageRelease:     //Make HangUp request
   711         case MPEPhoneModel::EPEMessageRelease:     //Make HangUp request
   725             errorCode = iMessageHandler->HandleReleaseCall( );
       
   726             break;
       
   727         case CPEPhoneModelIF::EPEMessageHangUpConference:
   712         case CPEPhoneModelIF::EPEMessageHangUpConference:
   728             errorCode = iMessageHandler->HandleReleaseConference();
   713             errorCode = iMessageHandler->HandleReleaseCall( );            
   729             break;
   714             break;
   730         case MPEPhoneModel::EPEMessageAnswer:                        //Make Answer request
   715         case MPEPhoneModel::EPEMessageAnswer:                        //Make Answer request
   731             errorCode = iMessageHandler->HandleAnswerCall( EFalse );
   716             errorCode = iMessageHandler->HandleAnswerCall( EFalse );
   732             break;
   717             break;
   733         case MPEPhoneModel::EPEMessageReject:                        //Make Reject request
   718         case MPEPhoneModel::EPEMessageReject:                        //Make Reject request
   839             errorCode = iMessageHandler->ForwardCallToAddress();
   824             errorCode = iMessageHandler->ForwardCallToAddress();
   840             break;
   825             break;
   841         case MPEPhoneModel::EPEMessageDisableService:
   826         case MPEPhoneModel::EPEMessageDisableService:
   842             iMessageHandler->HandleDisableService();
   827             iMessageHandler->HandleDisableService();
   843             break;
   828             break;
   844 
   829         case MPEPhoneModel::EPEMessageDialServiceCall:  //Make Dial request
       
   830             errorCode = iMessageHandler->HandleDialCall( EFalse );
       
   831             break;
   845         default:
   832         default:
   846             errorCode = ECCPErrorNotFound;
   833             errorCode = ECCPErrorNotFound;
   847             break;
   834             break;
   848         } 
   835         } 
   849 
   836 
   850     if( errorCode )
   837     if( errorCode )
   851 	    {
   838         {
   852 	    TPEErrorInfo errorInfo;
   839         TPEErrorInfo errorInfo;
   853 	    errorInfo.iErrorCode = errorCode;
   840         errorInfo.iErrorCode = errorCode;
   854 	    errorInfo.iCallId = KPECallIdNotUsed;
   841         errorInfo.iCallId = KPECallIdNotUsed;
   855 	    errorInfo.iErrorType = EPECcp;
   842         errorInfo.iErrorType = EPECcp;
   856  	    iEngineMonitor.HandleError( errorInfo );
   843         iEngineMonitor.HandleError( errorInfo );
   857 	    }
   844         }
   858     }// HandleMessage
   845     }// HandleMessage
   859 
   846 
   860 // -----------------------------------------------------------------------------
   847 // -----------------------------------------------------------------------------
   861 // CPEPhoneModel::SendMessage
   848 // CPEPhoneModel::SendMessage
   862 // Reroutes messages to the over loaded SendMessage( TInt aMessage, TInt aCallId ) method.
   849 // Reroutes messages to the over loaded SendMessage( TInt aMessage, TInt aCallId ) method.
   928             {
   915             {
   929             iEngineInfo->SetCallState( EPEStateUnknown, aCallId );
   916             iEngineInfo->SetCallState( EPEStateUnknown, aCallId );
   930             }
   917             }
   931         }
   918         }
   932 
   919 
       
   920     if ( message == MEngineMonitor::EPEMessageOutgoingCallBarred )
       
   921         {
       
   922         iEngineInfo->SetOutgoingCallBarringActivated( ETrue );
       
   923         message = KPEDontSendMessage;
       
   924         }
       
   925     
   933     if ( ( message == MEngineMonitor::EPEMessageIncoming ) )
   926     if ( ( message == MEngineMonitor::EPEMessageIncoming ) )
   934         {
   927         {
   935         if ( FeatureManager::FeatureSupported( KFeatureIdDriveMode ) )
   928         if ( FeatureManager::FeatureSupported( KFeatureIdDriveMode ) )
   936             {
   929             {
   937             //Check for Drive mode
   930             //Check for Drive mode
   942                 }
   935                 }
   943             }
   936             }
   944         }
   937         }
   945 
   938 
   946     if ( message == MEngineMonitor::EPEMessageChangedCallDuration )    
   939     if ( message == MEngineMonitor::EPEMessageChangedCallDuration )    
   947 	    {   
   940         {   
   948 	    TInt callTimerSetting( EFalse );
   941         TInt callTimerSetting( EFalse );
   949         // safe to ignore error code here, duration display equals to zero == off if it fails
   942         // safe to ignore error code here, duration display equals to zero == off if it fails
   950         iExternalDataHandler->Get( EPECallDurationDisplaySetting, callTimerSetting );
   943         iExternalDataHandler->Get( EPECallDurationDisplaySetting, callTimerSetting );
   951         // Message EPEMessageChangedCallDuration send supressed, if duration display is OFF
   944         // Message EPEMessageChangedCallDuration send supressed, if duration display is OFF
   952         if ( callTimerSetting == KPECallTimerOff )
   945         if ( callTimerSetting == KPECallTimerOff )
   953             {
   946             {
   954             message = KPEDontSendMessage;
   947             message = KPEDontSendMessage;
   955             }
   948             }
   956 	    }
   949         }
   957 
   950 
   958     //MessageHandler may return error code
   951     //MessageHandler may return error code
   959     if ( errorCode != ECCPErrorNone && errorCode != KPEDontSendMessage )
   952     if ( errorCode != ECCPErrorNone && errorCode != KPEDontSendMessage )
   960         {
   953         {
   961         #ifdef TEF_LOGGING_ENABLED
   954         #ifdef TEF_LOGGING_ENABLED
   965         TEFLOGSTRING3( 
   958         TEFLOGSTRING3( 
   966             KTAERROR,
   959             KTAERROR,
   967             "PE cpephonemodel::sendmessage > iEngineMonitor.HandleError: messageName=%s, CallId=%d",
   960             "PE cpephonemodel::sendmessage > iEngineMonitor.HandleError: messageName=%s, CallId=%d",
   968         messageName2.Ptr( ), aCallId );
   961         messageName2.Ptr( ), aCallId );
   969         #endif
   962         #endif
       
   963         SetCallError( aCallId );
   970         TPEErrorInfo errorInfo;
   964         TPEErrorInfo errorInfo;
   971     	errorInfo.iErrorCode = errorCode;
   965         errorInfo.iErrorCode = errorCode;
   972     	errorInfo.iCallId = aCallId;
   966         errorInfo.iCallId = aCallId;
   973         errorInfo.iErrorType = EPECcp;
   967         errorInfo.iErrorType = EPECcp;
   974         iEngineMonitor.HandleError( errorInfo );
   968         iEngineMonitor.HandleError( errorInfo );
   975         }
   969         }
   976     else if ( message == MEngineMonitor::EPEMessageCallHandlingError )
   970     else if ( message == MEngineMonitor::EPEMessageCallHandlingError )
   977 	    {
   971         {
   978         TEFLOGSTRING2( 
   972         TEFLOGSTRING2( 
   979             KTAERROR, 
   973             KTAERROR, 
   980             "PE cpephonemodel::sendmessage > iEngineMonitor.HandleError: messageName=EPEMessageCallHandlingError, CallId=%d"
   974             "PE cpephonemodel::sendmessage > iEngineMonitor.HandleError: messageName=EPEMessageCallHandlingError, CallId=%d"
   981         , aCallId );
   975         , aCallId );
       
   976         SetCallError( aCallId );
   982 	    TPEErrorInfo errorInfo = iEngineInfo->ErrorInfo();
   977 	    TPEErrorInfo errorInfo = iEngineInfo->ErrorInfo();
   983     	errorInfo.iCallId = aCallId;
   978     	errorInfo.iCallId = aCallId;
   984     	errorInfo.iErrorType = EPECcp;
   979     	errorInfo.iErrorType = EPECcp;
   985 
   980 
   986         if ( ECCPErrorCCCallRejected == errorInfo.iErrorCode )
   981         if ( ECCPErrorCCCallRejected == errorInfo.iErrorCode )
   988             // Call direction is not set if the call was rejected before Dialing-state
   983             // Call direction is not set if the call was rejected before Dialing-state
   989             iEngineInfo->SetCallDirection( RMobileCall::EMobileOriginated, aCallId );
   984             iEngineInfo->SetCallDirection( RMobileCall::EMobileOriginated, aCallId );
   990             iMessageHandler->AddSIMRejectedMoCsCallToLog( aCallId );
   985             iMessageHandler->AddSIMRejectedMoCsCallToLog( aCallId );
   991             }
   986             }
   992     	iEngineMonitor.HandleError( errorInfo );
   987     	iEngineMonitor.HandleError( errorInfo );
   993   	    }
   988         }
   994     else if ( message == MEngineMonitor::EPEMessageServiceHandlingError )
   989     else if ( message == MEngineMonitor::EPEMessageServiceHandlingError )
   995         {
   990         {
   996         TEFLOGSTRING( 
   991         TEFLOGSTRING( 
   997             KTAERROR, 
   992             KTAERROR, 
   998             "PE cpephonemodel::sendmessage > iEngineMonitor.HandleError: messageName=EPEMessageServiceHandlingError" );
   993             "PE cpephonemodel::sendmessage > iEngineMonitor.HandleError: messageName=EPEMessageServiceHandlingError" );
       
   994         SetCallError( aCallId );
   999         TPEErrorInfo errorInfo = iEngineInfo->ErrorInfo();
   995         TPEErrorInfo errorInfo = iEngineInfo->ErrorInfo();
  1000         errorInfo.iCallId = aCallId;
   996         errorInfo.iCallId = aCallId;
  1001         errorInfo.iErrorType = EPECch;
   997         errorInfo.iErrorType = EPECch;
  1002         iEngineMonitor.HandleError( errorInfo );
   998         iEngineMonitor.HandleError( errorInfo );
  1003 	    }
   999         }
  1004     else if ( message != KPEDontSendMessage && errorCode != KPEDontSendMessage )
  1000     else if ( message != KPEDontSendMessage && errorCode != KPEDontSendMessage )
  1005         {
  1001         {
  1006         // Map message for PhoneApplication, since it doesn't use 
  1002         // Map message for PhoneApplication, since it doesn't use 
  1007         // EPEMessageDisconnectingWithInband message
  1003         // EPEMessageDisconnectingWithInband message
  1008         if( message == MEngineMonitor::EPEMessageDisconnectingWithInband )
  1004         if( message == MEngineMonitor::EPEMessageDisconnectingWithInband )
  1109                 }
  1105                 }
  1110             if ( errorCode == ECCPErrorNone && iEngineInfo->IsSwitchToOperationOngoing() )
  1106             if ( errorCode == ECCPErrorNone && iEngineInfo->IsSwitchToOperationOngoing() )
  1111                 {
  1107                 {
  1112                 errorCode = iMessageHandler->ContinueSwitchToCall( aCallId );
  1108                 errorCode = iMessageHandler->ContinueSwitchToCall( aCallId );
  1113                 }
  1109                 }
       
  1110             
       
  1111             iEngineInfo->SetOutgoingCallBarringActivated( EFalse );
  1114             break;
  1112             break;
  1115 
  1113 
  1116         case MEngineMonitor::EPEMessageRemoteBusy:
  1114         case MEngineMonitor::EPEMessageRemoteBusy:
  1117             if ( CallIdCheck::IsVoice( aCallId ))
  1115             if ( CallIdCheck::IsVoice( aCallId ))
  1118                 {                
  1116                 {                
  1166 
  1164 
  1167         case MEngineMonitor::EPEMessageSentDTMF:
  1165         case MEngineMonitor::EPEMessageSentDTMF:
  1168             errorCode = iMessageHandler->HandleDtmfSent();
  1166             errorCode = iMessageHandler->HandleDtmfSent();
  1169             break;
  1167             break;
  1170 
  1168 
  1171         case MEngineMonitor::EPEMessageActivateWarrantyMode:
       
  1172             errorCode = iMessageHandler->HandleGetLifeTimerData( );
       
  1173             break;
       
  1174           
       
  1175         case MEngineMonitor::EPEMessageStartATDialing:
  1169         case MEngineMonitor::EPEMessageStartATDialing:
  1176             errorCode = iMessageHandler->HandleDialCall( EFalse );
  1170             errorCode = iMessageHandler->HandleDialCall( EFalse );
  1177             iMessageHandler->HandleATDialingStarted( errorCode ? EFalse : ETrue );
  1171             iMessageHandler->HandleATDialingStarted( errorCode ? EFalse : ETrue );
  1178             break;
  1172             break;
  1179 
  1173 
  1248         case MEngineMonitor::EPEMessageColpNumberAvailable:
  1242         case MEngineMonitor::EPEMessageColpNumberAvailable:
  1249             {              
  1243             {              
  1250             sendingDelayed = ETrue;            
  1244             sendingDelayed = ETrue;            
  1251             }
  1245             }
  1252             break;
  1246             break;
  1253         case MEngineMonitor::EPEMessageTransferCallBackRequest:
       
  1254             {
       
  1255             sendingDelayed = ETrue;
       
  1256             }
       
  1257             break;
       
  1258         default:
  1247         default:
  1259             // Other messages cause no action.
  1248             // Other messages cause no action.
  1260             break;
  1249             break;
  1261         }
  1250         }
  1262     
  1251     
  1420             break;
  1409             break;
  1421             }
  1410             }
  1422         case CPEPhoneModel::EPEContactHandlingPhaseTwo:
  1411         case CPEPhoneModel::EPEContactHandlingPhaseTwo:
  1423             {
  1412             {
  1424             TEFLOGSTRING( KTAOBJECT, "CPEPhoneModel::StepL: 15.1" );
  1413             TEFLOGSTRING( KTAOBJECT, "CPEPhoneModel::StepL: 15.1" );
  1425             // Start Idle State monitor to finalize ContactHandling contruction
  1414             static_cast< CPEContactHandlingProxy* >( iContactHandling )->
  1426             iIdleStatusMonitor = CPEIdleStatusMonitor::NewL (*this );     
  1415                    CreateSecondPhaseL( *this, iFsSession );
  1427             TEFLOGSTRING( KTAOBJECT, "CPEPhoneModel::StepL: 15.2" );
  1416             TEFLOGSTRING( KTAOBJECT, "CPEPhoneModel::StepL: 15.2" );
  1428 
       
  1429             
       
  1430             break; 
  1417             break; 
  1431             }
  1418             }
  1432         case CPEPhoneModel::EPEMediatorCommandHandler:
  1419         case CPEPhoneModel::EPEMediatorCommandHandler:
  1433             {
  1420             {
  1434             TEFLOGSTRING( KTAOBJECT, "CPEPhoneModel::StepL: 16.1" );
  1421             TEFLOGSTRING( KTAOBJECT, "CPEPhoneModel::StepL: 16.1" );
  1435             // Start Mediator command listener
  1422             // Start Mediator command listener
  1436             iMediatorCommunicationHandler = CPERemotePartyInfoMediator::NewL( *this );
  1423             iMediatorCommunicationHandler = CPERemotePartyInfoMediator::NewL( *this );
       
  1424             break; 
       
  1425             }
       
  1426         case CPEPhoneModel::EPEPhoneServices:
       
  1427             {
       
  1428             TEFLOGSTRING( KTAOBJECT, "CPEPhoneModel::StepL: 16.1" );
       
  1429             __ASSERT_DEBUG( iMessageHandler, Panic( EPEPanicNullPointer ) );
       
  1430             __ASSERT_DEBUG( iEngineInfo, Panic( EPEPanicNullPointer ) );
       
  1431             iPhoneServices = new PhoneServices(*iMessageHandler, *iEngineInfo);
       
  1432             TEFLOGSTRING( KTAOBJECT, "CPEPhoneModel::StepL: 16.2" );
       
  1433             break;
       
  1434             }
       
  1435 
       
  1436         case CPEPhoneModel::EPENetworkHandling:
       
  1437             {
       
  1438             TEFLOGSTRING( KTAOBJECT, "CPEPhoneModel::StepL: 18.1" );
       
  1439             continueStepping = EFalse;
       
  1440             QString service("networkhandlingstarter");
       
  1441             QString interface("com.nokia.symbian.IStart");
       
  1442             QString operation("start()");
       
  1443             XQApplicationManager appManager;
  1437             
  1444             
  1438             // This should be set after the last case
  1445             QScopedPointer<XQAiwRequest> request(
  1439             continueStepping = EFalse;
  1446                     appManager.create(service, interface, operation, false));
  1440             break; 
  1447             if (request == NULL) {
  1441             }
  1448                 TEFLOGSTRING(KTAOBJECT, 
       
  1449                         "CPEPhoneModel::StepL 18.2 error, service not found");
       
  1450                 break;
       
  1451             }
       
  1452             XQRequestInfo info;
       
  1453             info.setForeground(false);
       
  1454             request->setInfo(info);
       
  1455             request->setSynchronous(false);
       
  1456             if (!request->send()) {
       
  1457                 int error = request->lastError();
       
  1458                 TEFLOGSTRING2(KTAOBJECT, 
       
  1459                         "CPEPhoneModel::StepL 18.3 error %d", error);
       
  1460                 break;
       
  1461             }
       
  1462             TEFLOGSTRING(KTAOBJECT, "CPEPhoneModel::StepL: 18.4");
       
  1463             break;
       
  1464             }
       
  1465 
  1442         default:
  1466         default:
  1443             {
  1467             {
  1444             Panic( EPEPanicIndexOutOfRange );
  1468             Panic( EPEPanicIndexOutOfRange );
  1445             break;
  1469             break;
  1446             }
  1470             }
  1482     static_cast< CPEContactHandlingProxy* >( iContactHandling )->
  1506     static_cast< CPEContactHandlingProxy* >( iContactHandling )->
  1483         CreateSecondPhaseL( *this, iFsSession );
  1507         CreateSecondPhaseL( *this, iFsSession );
  1484     TEFLOGSTRING( KTAOBJECT, 
  1508     TEFLOGSTRING( KTAOBJECT, 
  1485         "PE CPEPhoneModel::ConstructContactHandlingPhaseTwo, complete" );
  1509         "PE CPEPhoneModel::ConstructContactHandlingPhaseTwo, complete" );
  1486     SendMessage( MEngineMonitor::EPEMessagePEConstructionTwoPhaseReady );   
  1510     SendMessage( MEngineMonitor::EPEMessagePEConstructionTwoPhaseReady );   
  1487     // not need any more
       
  1488     delete iIdleStatusMonitor; 
       
  1489     iIdleStatusMonitor = NULL; 
       
  1490     }
  1511     }
  1491 
  1512 
  1492 // -----------------------------------------------------------------------------
  1513 // -----------------------------------------------------------------------------
  1493 // CallBackSendMessage
  1514 // CallBackSendMessage
  1494 // -----------------------------------------------------------------------------
  1515 // -----------------------------------------------------------------------------
  1503     self->iEngineMonitor.HandleMessage( self->iCallBackMessage, self->iCallBackCallId );
  1524     self->iEngineMonitor.HandleMessage( self->iCallBackMessage, self->iCallBackCallId );
  1504    
  1525    
  1505     return KErrNone;
  1526     return KErrNone;
  1506     }
  1527     }
  1507 
  1528 
       
  1529 // -----------------------------------------------------------------------------
       
  1530 // SetCallError
       
  1531 // -----------------------------------------------------------------------------
       
  1532 //
       
  1533 void CPEPhoneModel::SetCallError( TInt aCallId )
       
  1534     {
       
  1535     TInt callError = KErrNone;
       
  1536     if ( iCallHandling )
       
  1537         {
       
  1538         TInt err = iCallHandling->GetCallInfo( *iCallInfo, aCallId );
       
  1539         
       
  1540         if ( err == KErrNone && ( iCallInfo->iExitCode & 0xFFFF0000 ) ) 
       
  1541             {
       
  1542             callError = ( iCallInfo->iExitCode >> KTimesToSplitValue ); 
       
  1543             //Set protocol spesific error code to TPEErrorInfo
       
  1544             EngineInfo()->SetProtocolError( callError, aCallId );
       
  1545             }
       
  1546         }
       
  1547     }
  1508 // End of File
  1548 // End of File