phoneengine/phonemodel/inc/pevirtualengine.h
changeset 0 5f000ab63145
child 1 838b0a10d15b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneengine/phonemodel/inc/pevirtualengine.h	Mon Jan 18 20:18:27 2010 +0200
@@ -0,0 +1,941 @@
+/*
+* Copyright (c) 2005-2008 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  This file defines the protocol independent interface of the Phone Engine.
+*
+*/
+
+#ifndef PEVIRTUALENGINE_H
+#define PEVIRTUALENGINE_H
+
+// INCLUDES
+#include <badesca.h>
+#include <bldvariant.hrh>   //protocol definition, component configuration definitions
+#include <cphcntcontactid.h>
+#include <ctsydomainpskeys.h>
+#include <etelmm.h>
+#include <exterror.h>
+#include <fbs.h>
+#include <mccecall.h>
+#include <mmtsy_names.h>
+#include <NetworkHandlingDomainPSKeys.h>
+#include <PhCltTypes.h>
+#include <Profile.hrh>
+#include <rmmcustomapi.h>
+#include <RSSSettings.h>
+#include <sysutil.h>
+
+
+// CONSTANTS
+
+//Call origin types
+enum TPECallOrigin
+    {
+    EPECallOriginPhone,
+    EPECallOriginClient,
+    EPECallOriginSAT
+    };
+
+//Output types
+enum TPEAudioOutput
+    {
+    EPENotActive,
+    EPEHandset,
+    EPELoudspeaker,
+    EPEWiredAudioAccessory,
+    EPEBTAudioAccessory,
+    EPETTY
+    };
+
+//Error types
+enum TPEErrorType
+    {
+    EPECcp = 0,
+    EPECch
+    };
+
+// PhoneEngine Errors
+const TInt KErrPhoneEngineErrorBase = -30000;
+const TInt KErrPhoneEngineNoWcdmaNetwork = KErrPhoneEngineErrorBase - 1;
+const TInt KErrPhoneEngineVideoCallNotAllowedDuringRestore = KErrPhoneEngineErrorBase - 2;
+const TInt KErrPhoneEngineVideoCallSetupFailed = KErrPhoneEngineErrorBase - 3;
+
+// Phone Engine dll uid
+const TUid KUidPhoneEngine = { 0x1000A86C };
+
+// Maximum length of phone number 
+const TInt KPEPhoneNumberMaxLength = 100;
+//Phone number type defined using the custom maximum length
+typedef TBuf<KPEPhoneNumberMaxLength> TPEPhoneNumber;
+//Maximum length of dtmf string        
+const TInt KPEDtmfMaxLength = KPEPhoneNumberMaxLength;
+
+//Maximum number of the SS service groups
+const TInt KPEMaxServiceGroup = 53; // Maximum value taken from etelmm.h(TMobileService)    
+
+const TInt KPEAutomaticAnswerTimeout = 5000000; // 5 seconds;
+
+// Enumerations for variant messages
+// For enumeration TPEMessagesToPhoneEngine
+const TInt KPEMessagesToPhoneEngineGsmFirst = 11000;
+const TInt KPEMessagesToPhoneEngineGsmLast = 12999;
+const TInt KPEMessagesToPhoneEngineVariantFirst = KPEMessagesToPhoneEngineGsmFirst;
+
+// For enumeration TPEMessagesFromPhoneEngine
+const TInt KPEMessagesFromPhoneEngineGsmFirst = 11000;
+const TInt KPEMessagesFromPhoneEngineGsmLast = 12999;
+const TInt KPEMessagesFromPhoneEngineVariantFirst = KPEMessagesFromPhoneEngineGsmFirst;
+
+// Lifetimer data in hours and minutes
+NONSHARABLE_STRUCT( TPELifeTimeData )                      
+    {
+	TUint32 iHours;                         //range 0-999999 
+	TUint8 iMinutes;                        //range 0-59
+    };
+
+// Used when initializing number variables with non negative value range.
+const TInt KPENumberInitValue = -1; 
+//CallId not used in SendErrorMessageL
+const TInt KPECallIdNotUsed = -1;            
+//ErrorCode not used in SendErrorMessageL
+const TInt KPEErrorCodeNotUsed = -1;        
+// Informs to phone engine that dont send message to the phone application
+const TInt KPEDontSendMessage = 1;
+ 
+// Maximum lenght of timer
+const TInt KPESsTimerMaxLength = 2;
+
+// Audio player repeats tone forever
+const TInt KPEAudioPlayerRepeatForever = -2;
+// Default Audio volume value
+const TInt KPEDefaultAudioVolume = 7;
+// Default volume value for accessory
+const TInt KPEDefaultAccessoryVolume = 5;
+// Default keypad volume
+const TProfileKeypadVolume KPEDefaultKeypadVolume = EProfileKeypadVolumeLevel2;
+
+// Dtmf stop character, PE handles internally DTMF characters as lowercase.
+const TUint KPEDtmfStopCharLowercase = 'w';
+const TUint KPEDtmfStopCharUppercase = 'W';
+const TUint KPEDtmfPauseCharLowercase = 'p';
+const TUint KPEDtmfPauseCharUppercase = 'P';
+const TUint KPEDtmfPlusChar = '+';
+
+enum TPELoggingIndicator
+    {
+    EPENormalLogging = 0,
+    EPEContinuousLogging 
+    };
+
+// Maximum Length of profile name
+const TInt KPEProfileNameLength = 64;
+// Profile is alerting all incoming calls.
+_LIT( KPEAlertForAllCalls, "1");
+// Informs how many profiles there are
+const TInt KPEProfileGroups = 3;
+// Informs how much time it take's to change ringing tone volume from minimum to maximum(Ascending)
+const TInt KPERingingToneRampDuration = 5000000;
+// Informs how many ringing tone volume levels there are in the profile db
+const TInt KPEProfileRingingToneLevels = 10;
+// Includes default tone volume
+const TInt KPEDefaultToneVolume = 30000;
+// Contact group id string length
+const TInt KPEContactGroupString = 100;
+
+//The length of a pause created during dialling by the comma character (',') measured in seconds.  
+const TUint KPEDefaultInterval = 2;
+
+// CommDB constants for Data calls
+// Internet Access Point service type
+_LIT( KPEIAPServiceTypeName, "IAP\\IAPServiceType" );
+// Dial Out Internet Serivce Provider Table name
+_LIT( KPEIAPDialOutISPTableName, "DialOutISP" );
+// Dial In Internet Service Provider Table name
+_LIT( KPEIAPDialInISPTableName, "DialInISP" );
+// Access Point Name column on IAP table
+_LIT( KPEIAPAccessPointName, "IAP\\NAME" );
+
+const TInt KPEMaxAudioOutputs = EPETTY + 1; // enum count
+
+// DATA TYPES
+
+// Contact name definition
+typedef TBuf<KCntMaxTextFieldLength> TPEContactName;
+// Contact company definition
+typedef TBuf<KCntMaxTextFieldLength> TPEContactCompany;
+// Contact group definition
+typedef TBuf<KCntMaxTextFieldLength> TPEContactGroup;
+// Contact filename definition
+typedef TBuf<KMaxFileName>         TPEContactFileName;
+// Contact group ids sting
+typedef TBuf<KPEContactGroupString> TPEContactGroupId;
+//Dtmf-string definition
+typedef TBuf<KPEDtmfMaxLength> TPEDtmfString;
+//Profile name definition
+typedef TBuf<KPEProfileNameLength> TPEProfileName;
+//Call control caps
+typedef TUint32 TPECallControlCaps;
+//User to user info
+typedef TBuf<KPhCltUUILength> TPEUserToUserInfo;
+
+// Phone identity parameters type.
+typedef TBuf<RMobilePhone::KPhoneManufacturerIdSize> TPEManufacturer;
+typedef TBuf<RMobilePhone::KPhoneModelIdSize> TPEModel;
+typedef TBuf<KSysUtilVersionTextLength> TPERevision;
+typedef TBuf<RMobilePhone::KPhoneSerialNumberSize> TPESerialNumber;
+
+//Call States
+typedef TUint TPEState;
+
+enum
+    {
+    // Call states                        0 - 499
+    EPEStateUnknown                     = 0,
+    EPEStateIdle,
+    EPEStateDialing,
+    EPEStateEmergencyDialing,
+    EPEStateRinging,
+    EPEStateConnecting,
+    EPEStateConnected,
+    EPEStateHangingUp,
+    EPEStateHeld,
+    EPEStateAnswering,
+    EPEStateRejecting,
+    EPEStateDisconnecting,
+    // conference call states
+    EPEStateConferenceIdle,
+    EPEStateConnectedConference,
+    EPEStateHeldConference,
+    EPEStateCreatingConference,
+    EPEStateHangingUpConference,
+    EPEStateSwappingConference,
+    EPEStateResumeHoldConference,        
+    EPEStateGoingOneToOne,
+    EPEStateAddingConferenceMember,
+    EPEStateAddedConferenceMember,
+    EPEStateDroppingConferenceMember,
+    EPEStateDroppedConferenceMember,
+    // maximum value for boundary checks
+    EPEStateMaximumState                = 1000
+    };
+
+NONSHARABLE_STRUCT( TPEErrorInfo )
+    {
+	//Symbian OS error code
+	TInt iErrorCode;
+	//Call Id number, equals KPECallIdNotUsed if call id is not available or is
+	//invalid for this error condition
+	TInt iCallId;
+	// Error type( Cch or Ccp )
+	TPEErrorType iErrorType;
+    };
+    
+enum TPECallType
+    { // maintain compatibility with P&S type enum
+    // Used to initialize call type information
+    EPECallTypeUninitialized    = EPSCTsyCallTypeUninitialized,
+    // Circuit switched voice call
+    EPECallTypeCSVoice          = EPSCTsyCallTypeCSVoice,
+    // Circuit switched multimedia call
+    EPECallTypeVideo            = EPSCTsyCallTypeH324Multimedia,
+    // Packet switched voice call
+    EPECallTypeVoIP             = EPSCTsyCallTypeVoIP
+    };
+
+enum TPEPinCode 
+    {
+    EPEPinCode,
+    EPEPin2Code
+    };
+
+enum TPEPhoneCommandType
+    {
+    EPESendingFlash
+    };
+
+// Enumeration which defines the search keys with which
+// contact information is searched
+enum TPEFindContactKey
+    {
+    //Search keys
+    EPEFindWithPhoneNumber = 0,
+    EPEFindWithContactId,
+    EPEFindKeyNotDefined
+    };
+
+enum TPESecurityCommand 
+    {
+    EPESecurityCommandUnknown,
+    EPESecurityCommandChangePinCode,
+    EPESecurityCommandUnblockPinCode,
+    EPESecurityCommandChangeBarringPassword,
+    EPESecurityCommandChangeSimLock
+    };
+
+enum TPEPhoneNumberIdType
+    {
+    EPEUnknownNumber,
+    EPEMobileNumber,
+    EPEPager,
+    EPETelephoneNumber,
+    EPEVmbxNumberLine1,
+    EPEVmbxNumberLine2,
+    EPEPrivateNumber,
+    EPEEmergencyNumber,
+    EPEFaxNumber,
+    EPEVoipNumber,
+    EPEVideoNumber,
+    EPEAssistantNumber,
+    EPECarNumber,
+    EPEHomeNumber,
+    EPEWorkNumber
+    };
+
+enum TPERxTimeSlots
+    {
+    EPERxSlots1 = 1,
+    EPERxSlots2 = 2,
+    EPERxSlots3 = 3
+    };
+
+//VoiceMailBoxNumbers
+NONSHARABLE_STRUCT( TPEVoiceMailBoxNumberInfo )
+    {
+    TPEPhoneNumber iVMBXL1; // Line 1 VoiceMailBoxNumber
+	TPEPhoneNumber iVMBXL2; // Line 2 VoiceMailBoxNumber
+	TPEPhoneNumber iDTMFVMBXL1; // Line 1 DTMFVoiceMailBoxNumber
+	TPEPhoneNumber iDTMFVMBXL2; // Line 2 DTMFVoiceMailBoxNumber
+    };
+
+
+// Contains information of PhoneIdentity paramteres
+NONSHARABLE_STRUCT( TPEPhoneIdentityParameters )
+    {
+	TPEManufacturer iManufacturer;
+	TPEModel iModel;
+	TPERevision iRevision;
+	TPESerialNumber iSerialNumber;
+    };
+
+// Contains information of call audio route parameters
+NONSHARABLE_STRUCT( TPEPhoneAudioRouteParameters )
+    {
+	TPEAudioOutput iAudioOutput;
+	TPEAudioOutput iPreviousOutput;
+	TBool iShowNote;
+    };
+
+// Enumerate definitions for MMI Service Codes from MMETel API:
+
+// FUNCTION PROTOTYPES
+// None.
+
+// FORWARD DECLARATIONS
+
+class MPEEngineInfo;
+
+// CLASS DECLARATION
+
+/**
+*  Offers message interface from phone engine to phone application.
+*  
+*  @lib phonenegine.lib
+*  @since S60 v.4.0
+*/
+NONSHARABLE_CLASS( MEngineMonitor )
+    {
+
+    public:
+
+        enum TPEMessagesFromPhoneEngine
+        {
+        // Audio messages                     1000 - 1999
+        EPEMessageAudioDtmfEvent            = 1000,
+        EPEMessageAudioDTMFPlayComplete,
+        EPEMessageAudioMuteChanged,
+        EPEMessageAudioOutputChanged,
+        EPEMessageAudioOutputPreferenceChanged,
+        EPEMessageAudioPlayStopped,
+        EPEMessageAudioVolumeChanged,
+        EPEMessageAvailableAudioOutputsChanged,
+
+        // Call messages                      2000 - 2999
+        EPEMessageAnswer                    = 2000,
+        EPEMessageAnswering,
+        EPEMessageCallAdded,
+        EPEMessageCallControlCapsChanged,
+        EPEMessageCallWaiting,
+        EPEMessageCallWaitingAnswered,
+        EPEMessageChangedCallDuration,
+        EPEMessageConferenceCapsChange,        
+        EPEMessageConferenceIdle,
+        EPEMessageConnected,
+        EPEMessageConnectedConference,                
+        EPEMessageConnecting,
+        EPEMessageContinuingDTMFSending,
+        EPEMessageDialing,
+        EPEMessageDialingError,
+        EPEMessageDisconnecting,
+        EPEMessageDisconnectingConference,        
+        EPEMessageDisconnectingWithInband,  //UI doesn't get this message, it is mapped as EPEMessageDisconnecting
+        EPEMessageDTMFSendingAborted,
+        EPEMessageHeld,
+        EPEMessageHeldConference,        
+        EPEMessageIdle,
+        EPEMessageIncoming,
+        EPEMessageInitiatedEmergencyCall,
+        EPEMessageInitiatedEmergencyWhileActiveVideo,
+        EPEMessageInvalidSpeedDial,
+        EPEMessageIssuingUSSDRequest,
+        EPEMessageIssuedUSSDRequest,
+        EPEMessagePacketNetworkDetached,   
+        EPEMessagePromptSpeedDial,
+        EPEMessageRemoteBusy,
+        EPEMessageRemoteTerminated,               
+        EPEMessageSendingDTMF,
+        EPEMessageSentDTMF,
+        EPEMessageSentSSString,
+        EPEMessageSpeedDialNotAssigned,
+        EPEMessageStoppedDTMF,
+        EPEMessageSwapped,
+        EPEMessageTransferDone,
+        EPEMessageTransferring,
+        EPEMessageUnknown,
+        EPEMessageWentOneToOne,        
+        EPEMessageRemotePartyInfoChanged,
+        EPEMessageConnectingWithInband, //UI doesn't get this message, it is mapped as EPEMessageConnecting
+
+        EPEMessageUnattendedTransferRequest,
+
+        EPEMessageRemoteForwarding,
+        EPEMessageMovedPermanently,        
+        EPEMessageMultipleChoices,        
+
+        // Contact messages                   3000 - 3999
+        EPEMessageThumbnailLoadingCompleted  = 3000,
+
+        // Error messages                     4000 - 4999
+        EPEMessageError                     = 4000,
+        EPEMessageAudioHandlingError,
+        EPEMessageCallHandlingError,
+        EPEMessageConferenceErrorAddCall,
+        EPEMessageConferenceErrorRemoveCall,
+        EPEMessageConferenceErrorSwap,
+        EPEMessageConferenceErrorHold,
+        EPEMessageConferenceErrorResume,
+        EPEMessageConferenceErrorGoOneToOne,
+        EPEMessageConferenceErrorCurrentCallsToConference,
+        EPEMessageConferenceErrorHangUp,
+        EPEMessageContactHandlingError,
+        EPEMessageLogHandlingError,
+        EPEMessageServiceHandlingError,
+
+        // Network messages                   5000 - 5999
+        EPEMessageCallSecureStatusChanged= 5000,
+        EPEMessageNetworkRegistrationStatusChange,
+
+        // Parser messages                    6000 - 6999
+        EPEMessageActivateRfsDeep           = 6000,
+        EPEMessageActivateRfsNormal,
+        EPEMessageActivateWarrantyMode,
+        EPEMessageShowBTDeviceAddress,
+        EPEMessageShowBTLoopback,
+        EPEMessageShowIMEI,
+        EPEMessageShowVersion,
+        EPEMessageShowWlanMacAddress,
+        EPEMessageSSRequestFailed,
+        EPEMessageBTDebugMode,
+
+        // Security messages                  7000 - 7999
+        EPEMessageBadBarringPasswordChange  = 7000,
+        EPEMessageBadPin1Change,
+        EPEMessageBadPin1Unblock,
+        EPEMessageBadPin2Change,
+        EPEMessageBadPin2Unblock,
+        EPEMessageBarringPasswordChanged,
+        EPEMessageChangedSimLock,
+        EPEMessageFailedChangeSimLock,
+        EPEMessageFailedNewPin1AndPin2NotEqual,         // Error message, NewPin1 and NewPin2 are not equal
+        EPEMessageFailedSecurityCommandAlreadyActive,   // Error message, SecurityCommand is already active
+        EPEMessagePin1Changed,
+        EPEMessagePin1Unblocked,
+        EPEMessagePin2Changed,
+        EPEMessagePin2Unblocked,
+        EPEMessageSIMChanged,
+        EPEMessageSIMStateChanged,
+
+        // Settings and Shared Data messages  8000 - 8999
+        EPEMessageProfileChanged            = 8000,
+
+        // Startup messages                   9000 - 9999
+        EPEMessagePEConstructionReady       = 9000,     // Phone Engine is initialized and fully operational
+        EPEMessagePEConstructionFailed,
+        EPEMessagePEConstructionTwoPhaseReady,
+        // Miscellaneous messages             10000 - 10999
+        EPEMessageDoNotSendMe               = 10000,
+        EPEMessageInValidEmergencyNumber,
+        EPEMessageLogEventSaved, 
+        EPEMessagePhoneIdentityReady,
+        EPEMessageStartATDialing,
+        EPEMessageValidEmergencyNumber,
+        EPEMessageMuteRingingTone,
+
+        // Audio messages                         11000 - 11199
+
+        // Call messages                          11200 - 11399
+        EPEMessageActiveBarring                 = KPEMessagesFromPhoneEngineGsmFirst + 200,
+        EPEMessageActiveCallForwarding,
+        EPEMessageAddedConferenceMember,
+        EPEMessageALSLineChanged,
+        EPEMessageCallBarred,
+        EPEMessageIncCallIsForw,
+        EPEMessageIncCallForwToC,
+        EPEMessageOutCallForwToC,
+        EPEMessageForwardUnconditionalModeActive,
+        EPEMessageForwardConditionallyModeActive,
+        EPEMessageDroppedConferenceMember,
+        EPEMessageGoingOneToOne,
+        EPEMessageRemoteCreatedConference,
+        EPEMessageRemoteHeld,
+        EPEMessageRemoteResumed,
+        EPEMessageTempClirSuppressUnsuccessful,
+        EPEMessageTempClirActivationUnsuccessful,
+        EPEMessageShowIncCallGroupIndex,
+        EPEMessageDataPortLoaned,
+        // Contact messages                       11400 - 11599
+
+        // Error messages                         11600 - 11799
+
+        // VoIP service messages                       11800 - 12999
+        EPEMessageServiceEnabled               = KPEMessagesFromPhoneEngineGsmFirst + 800,
+        EPEMessageServiceEnabling,
+        EPEMessageNoService,
+        EPEMessageServiceDisabled,
+
+        // Parser messages                        12000 - 12199
+        EPEMessageIssuedSSRequest               = KPEMessagesFromPhoneEngineGsmFirst + 1000,
+        EPEMessageIssuingSSRequest,
+
+        // Security messages                      12200 - 12399
+        EPEMessageSecureNotSpecified,
+
+        // Settings and Shared Data messages      12400 - 12599
+        EPEMessageAlsStatusChanged              = KPEMessagesFromPhoneEngineGsmFirst + 1400,
+        EPEMessageBarringNotification,
+        EPEMessageClipStatusNotification,
+        EPEMessageClirStatusNotification,
+        EPEMessageCnapStatusNotification,
+        EPEMessageColpStatusNotification,
+        EPEMessageColrStatusNotification,
+        EPEMessageForwardingNotification,
+        EPEMessageVmbxNumberLine1Changed,
+        EPEMessageVmbxNumberLine2Changed,
+        EPEMessageWaitingNotification,
+
+
+        // Miscellaneous messages                 12600 - 12799
+
+        // Last                                   12999
+        // Exposing this allows the compiler to detect the overlapping enumerations.
+        EPEMessageLastVariantItem               = KPEMessagesFromPhoneEngineGsmLast
+        };
+        
+        /**
+        * HandleError
+        * Phone Application implements this callback method to provide a framework
+        * for proceeding in an error condition.
+        * @param aErrorInfo is the call id number.
+        */
+        virtual void HandleError( const TPEErrorInfo& aErrorInfo ) = 0;
+
+        /**
+        * HandleMessage
+        * Phone Application implements this callback method to provide a response
+        * for an event message sent by the Phone Engine.
+        * @param aMessage specifies the event that has taken place
+        * @param aCallId is the call id number.
+        */
+        virtual void HandleMessage( const TInt aMessage, const TInt aCallId ) = 0;
+        
+    }; // MEngineMonitor
+
+
+// Maximum number of the conference members.
+const TInt KPEMaximumNumberOfConferenceMembers = 5;
+// Maximum number of voice calls
+const TInt KPEMaximumNumberOfVoiceCalls = 8; // Phone engine user can change this value if needed.
+// Maximum number of data calls
+const TInt KPEMaximumNumberOfDataCalls = 2; 
+// Maximum number of conference calls
+const TInt KPEMaximumNumberOfConferenceCalls = 1;    
+// Maximum number of all calls
+const TInt KPEMaximumNumberOfCalls = KPEMaximumNumberOfVoiceCalls + 
+    KPEMaximumNumberOfDataCalls + KPEMaximumNumberOfConferenceCalls;
+
+// Emergency CallId
+const TInt KPEEmergencyCallId = KPEMaximumNumberOfVoiceCalls - 1;
+// Conference Call ID
+const TInt KPEConferenceCallID = KPEMaximumNumberOfVoiceCalls;
+
+// Invalid call index, note not the same as call id
+const TInt KPEInvalidCallIndex = -1;
+// These two are needed in TPECallInfo's conference field
+// Indicates, that this is Conference Master
+const TInt KPEConferenceMaster = -1;
+// Indicates, that this is Normal voice call
+const TInt KPENormalVoiceCall = -2;
+
+// All MMI Service Codes are defined in standard 3GPP TS 02.30 V7.1.1, Annex C.
+// MMI Service Codes: No service code was specified
+_LIT( KPENoServiceCode, "" );
+// MMI Service Codes: All teleservices
+_LIT( KPEAllTeleservices, "10" );
+// MMI Service Codes: Voice teleservices
+_LIT( KPETelephony, "11" );
+// MMI Service Codes: All Data Services
+_LIT( KPEAllDataServices, "12" );
+// MMI Service Codes: Fax Services
+_LIT( KPEFacsimileServices, "13" );
+// MMI Service Codes: SMS Services
+_LIT( KPEShortMessageServices, "16" );
+// MMI Service Codes: Voice Group Call Service
+_LIT( KPEVoiceGroupCallService, "17" );
+// MMI Service Codes: Voice Broadcast Service
+_LIT( KPEVoiceBroadcastService, "18" );
+// MMI Service Codes: All teleservices except SMS
+_LIT( KPEAllTeleservicesExceptSMS, "19" );
+// MMI Service Codes: All Bearer Service
+_LIT( KPEAllBearerServices, "20" );
+// MMI Service Codes: All Async Services
+_LIT( KPEAllAsyncServices, "21" );
+// MMI Service Codes: All Sync Services
+_LIT( KPEAllSyncServices, "22" );
+// MMI Service Codes: All Data Circuit Sync
+_LIT( KPEAllDataCircuitSync, "24" );
+// MMI Service Codes: All Data Circuit Async
+_LIT( KPEAllDataCircuitAsync, "25" );
+// MMI Service Codes: All Dedicated Packet Access
+_LIT( KPEAllDedicatedPacketAccess, "26" );
+// MMI Service Codes: All Dedicated Pad Access
+_LIT( KPEAllDedicatedPadAccess, "27" );
+// MMI Service Codes: All Gprs Beares Services
+_LIT( KPEAllGprsBearerServices, "99" );
+// MMI Service Codess: PLMN specific teleservices
+_LIT( KPEAllPlmnSpecificTeleservices, "50" );
+_LIT( KPEPlmnSpecificTeleservice1, "51" );
+_LIT( KPEPlmnSpecificTeleservice2, "52" );
+_LIT( KPEPlmnSpecificTeleservice3, "53" );
+_LIT( KPEPlmnSpecificTeleservice4, "54" );
+_LIT( KPEPlmnSpecificTeleservice5, "55" );
+_LIT( KPEPlmnSpecificTeleservice6, "56" );
+_LIT( KPEPlmnSpecificTeleservice7, "57" );
+_LIT( KPEPlmnSpecificTeleservice8, "58" );
+_LIT( KPEPlmnSpecificTeleservice9, "59" );
+_LIT( KPEPlmnSpecificTeleservice10, "60" );
+_LIT( KPEPlmnSpecificTeleservice11, "61" );
+_LIT( KPEPlmnSpecificTeleservice12, "62" );
+_LIT( KPEPlmnSpecificTeleservice13, "63" );
+_LIT( KPEPlmnSpecificTeleservice14, "64" );
+_LIT( KPEPlmnSpecificTeleservice15, "65" );
+// MMI Service Codess: PLMN specific bearer services
+_LIT( KPEAllPlmnSpecificBearerServices, "70" );
+_LIT( KPEPlmnSpecificBearerService1, "71" );
+_LIT( KPEPlmnSpecificBearerService2, "72" );
+_LIT( KPEPlmnSpecificBearerService3, "73" );
+_LIT( KPEPlmnSpecificBearerService4, "74" );
+_LIT( KPEPlmnSpecificBearerService5, "75" );
+_LIT( KPEPlmnSpecificBearerService6, "76" );
+_LIT( KPEPlmnSpecificBearerService7, "77" );
+_LIT( KPEPlmnSpecificBearerService8, "78" );
+_LIT( KPEPlmnSpecificBearerService9, "79" );
+_LIT( KPEPlmnSpecificBearerService10, "80" );
+_LIT( KPEPlmnSpecificBearerService11, "81" );
+_LIT( KPEPlmnSpecificBearerService12, "82" );
+_LIT( KPEPlmnSpecificBearerService13, "83" );
+_LIT( KPEPlmnSpecificBearerService14, "84" );
+_LIT( KPEPlmnSpecificBearerService15, "85" );
+// ALS
+_LIT( KPEAuxVoiceService, "89" );
+
+//Fax Modem UI application UID
+const TInt KPEFaxModemUIUid = 0x1000594E;
+// TPESimState fisrt value
+const TInt KPEStartupEnumerationFirstValue = 100;
+
+// Indicates that dtmf sending is possible with this call. 
+const TUint KPECapsDtmf = 0x00080000;
+
+// SIM states
+enum TPESimState
+    {
+    EPESimStatusUninitialized = KPEStartupEnumerationFirstValue,
+    EPESimUsable,       // The Sim card is fully usable.    
+    EPESimReadable,     // The SIM card is not fully usable, but the emergency number can be read.
+    EPESimNotReady,     // The Sim card is present but not ready or usable.
+    EPESimNotPresent,   // The Sim card is not present.
+    EPESimNotSupported  // SIM/RUIM is not supported. Some CDMA phones do not support a SIM/RUIM at all.
+    };
+    
+// Supplementary Services action type
+enum TPESSAction
+    {
+    EPESSActionUnspecified = 0,
+    EPESSActivation,
+    EPESSDeactivation,
+    EPESSInterrogation,
+    EPESSRegistration,
+    EPESSErasure,
+    EPEPasswordOperation
+    };
+
+// Supplementary Services type
+enum TPESSType
+    {
+    EPESSTypeUnspecified = 0,
+    EPECallForwardingNotReachable,
+    EPECallForwardingNoReply,
+    EPECallForwardingBusy,
+    EPECallForwardingUnconditional,
+    EPECallForwardingAll,
+    EPECallForwardingAllConditional,
+    EPECallBarringAllOutgoing,
+    EPECallBarringAllOutgoingInternational,
+    EPECallBarringAllOutgoingInternationalExcHome,
+    EPECallBarringAllIncoming,
+    EPECallBarringAllIncomingWhenRoaming,
+    EPECallBarringAllServices,
+    EPECallBarringAllOutgoingServices,
+    EPECallBarringAllIncomingServices,
+    EPECallBarringPassword,
+    EPECallWaiting,
+    EPEClip,
+    EPEClir,
+    EPECnap,
+    EPEColp,
+    EPEColr,
+    EPEEmlpp,
+    EPEMsp,
+    EPESpnp,
+    EPEPin,
+    EPEUnblockPin,
+    EPESimLock
+    };
+
+//Forwarded information definition
+NONSHARABLE_STRUCT( TPEForwardedInfo )
+    {
+    RMobilePhone::TMobilePhoneCFCondition iCondition;
+    RMobilePhone::TMobileService iServiceGroup;
+    RMobilePhone::TMobilePhoneCFStatus iStatus; 
+    TPEPhoneNumber iPhoneNumber;
+    TInt iTimeout;
+    };
+
+// Forwarding information definition
+NONSHARABLE_STRUCT( TPEForwardingInfo )
+    {
+    TInt iGroupCount;
+    TFixedArray<TPEForwardedInfo, KPEMaxServiceGroup> iForwardedInfo;
+    };
+
+NONSHARABLE_STRUCT( TPEActiveForwardInfo )
+    {
+    RMobilePhone::TMobilePhoneCFActive iActiveType;
+    RMobilePhone::TMobileService  iServiceGroup;
+    };
+
+//Wait information definition
+NONSHARABLE_STRUCT( TPEWaitInfo )
+    {
+    RMobilePhone::TMobileService iServiceGroup;
+    RMobilePhone::TMobilePhoneCWStatus iStatus; 
+    };
+
+// Waiting information definition
+NONSHARABLE_STRUCT( TPEWaitingInfo )
+    {
+    TInt iGroupCount;
+    TFixedArray<TPEWaitInfo, KPEMaxServiceGroup> iWaitInfo;
+    };
+
+//Barred information definition
+NONSHARABLE_STRUCT( TPEBarredInfo )
+    {
+    RMobilePhone::TMobilePhoneCBCondition iCondition;
+    RMobilePhone::TMobileService iServiceGroup;
+    RMobilePhone::TMobilePhoneCBStatus iStatus; 
+    };
+
+// Barring information definition
+NONSHARABLE_STRUCT( TPEBarringInfo )
+    {
+    TInt iGroupCount;
+    TFixedArray<TPEBarredInfo, KPEMaxServiceGroup> iBarredInfo;
+    };
+
+// Contains information of the Suplementary Services command.
+NONSHARABLE_STRUCT( TPESSCommandInfo )                   // For SS Commands.
+    {
+    TPESSAction action;     // SS Action
+    /*RMobilePhone::TMobileService*/ TInt group;       // MMI Service Code
+    TPESSType type;         // Supplementary Services type
+    };
+
+NONSHARABLE_STRUCT( TPEConferenceMemberInfo )
+    {
+    TName iConferenceMemberName;
+    TInt iConferenceMemberId;
+    };
+
+/**
+ *  Offers message interface from phone application to phone engine.
+ *
+ *  ?more_complete_description
+ *
+ *  @lib phoneengine
+ *  @since S60 v4.0 
+ */
+NONSHARABLE_CLASS( MPEPhoneModel ) 
+    {
+public:
+
+    typedef TInt TPEMessagesToPhoneEngine;
+
+    enum
+        {
+        // Audio messages                     1000 - 1999
+        EPEMessageSetAudioMute              = 1000,
+        EPEMessageSetAudioVolume,
+        EPEMessageSetAudioOutput,
+
+        // Call messages                      2000 - 2999
+        EPEMessageAnswer                    = 2000,
+        EPEMessageClientDial,
+        EPEMessageContinueDTMFSending,
+        EPEMessageDial,
+        EPEMessagePlayDTMF,
+        EPEMessageEndDTMF,
+        EPEMessagePhoneNumberEdited,
+        EPEMessageRelease,
+        EPEMessageReleaseAll,
+        EPEMessageReject,
+        EPEMessageSendDTMF,
+        EPEMessageStopDTMFSending,
+        EPEMessageStopTonePlay,
+        EPEMessageAutomaticAnswerOff,       //UI sends when soft reject is needed
+        EPEMessageTerminateAllConnections,
+        EPEMessageSetSwitchToCallFlag,
+        EPEMessageSwitchToVideoOrVoice,
+        EPEMessageSatCallRequestCompleted,
+        EPEMessageClientDialEmergency,
+        EPEMessageReplaceActive,
+        EPEMessageContinueEmergencyCallInitialization,
+        EPEMessageAcceptUnattendedTransfer,
+        EPEMessageRejectUnattendedTransfer,
+
+        EPEMessageDoUnattendedTransfer,
+        EPEMessageForwardCallToAddress,
+
+        // Contact messages                   3000 - 3999
+
+        // Error messages                     4000 - 4999
+
+        // Network messages                   5000 - 5999
+
+        // Parser messages                    6000 - 6999
+
+        // Security messages                  7000 - 7999
+
+        // Service messages                   8000 - 8999
+        EPEMessageDisableService            = 8000,
+
+        // Startup messages                   9000 - 9999
+        EPEMessagePEConstructionReady       = 9000,
+
+        // Miscellaneous messages             10000 - 10999
+        EPEMessageCheckEmergencyNumber      = 10000 // Request engine to check is entered number emergency.
+
+        // Variant messages                   11000 - 12999
+        // From KPEMessagesToPhoneEngineGsmFirst
+        // to KPEMessagesToPhoneEngineGsmLast
+        };
+
+     virtual ~MPEPhoneModel() {};
+
+    /**
+     * Returns pointer to information object (CPEEngineInfo) 
+     *
+     * @since S60 v4.0
+     * @return Return pointer to CPEEngineInfo object
+     */
+     virtual MPEEngineInfo* EngineInfo() = 0;
+     
+    /**
+     * Reroutes messages from the phone application to the message handler
+     *
+     * @since S60 v4.0
+     * @param aMessage is the message code
+     */
+     virtual void HandleMessage( const TInt aMessage ) = 0;
+     
+    /**
+     * Returns the name of the specified message to PhoneEngine
+     *
+     * @since S60 v4.0
+     * @param aMessage is the message code
+     * @return String containing the name of the message
+     */
+     virtual TPtrC NameByMessageToPhoneEngine( const TInt aMessage ) const = 0;
+
+    /**
+     * Returns the name of the specified message from PhoneEngine
+     *
+     * @param aMessage is the message code
+     * @return String containing the name of the message
+     */
+     virtual TPtrC NameByMessageFromPhoneEngine( const TInt aMessage ) const = 0;
+     
+    }; // MPEPhoneModel 
+
+/**
+* Utility class for call id.
+*
+*  @lib PhoneEngine.lib
+*/
+NONSHARABLE_CLASS( CallIdCheck )
+    {
+    public:
+        static inline TBool IsValid( TInt aCallId ) 
+            {
+            return aCallId >= 0 && aCallId < KPEMaximumNumberOfCalls;
+            }
+        static inline TBool IsVoice( TInt aCallId )
+            {
+            return aCallId >= 0 && aCallId < KPEMaximumNumberOfVoiceCalls;
+            }
+        static inline TBool IsConference( TInt aCallId )
+            {
+            return aCallId >= KPEMaximumNumberOfVoiceCalls && 
+                   aCallId < ( KPEMaximumNumberOfVoiceCalls + KPEMaximumNumberOfConferenceCalls );
+            }
+        static inline TBool IsVideo( TInt aCallId )
+            {
+            return aCallId >= ( KPEMaximumNumberOfVoiceCalls + KPEMaximumNumberOfConferenceCalls ) 
+                && aCallId < ( KPEMaximumNumberOfVoiceCalls + KPEMaximumNumberOfConferenceCalls + 
+                KPEMaximumNumberOfDataCalls );
+            }            
+    };
+
+#endif // PEVIRTUALENGINE_H
+
+//End of file