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