--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/adaptationlayer/tsy/nokiatsy_dll/inc/cmmnetmesshandler.h Fri Nov 06 17:28:23 2009 +0000
@@ -0,0 +1,669 @@
+/*
+* Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "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:
+*
+*/
+
+
+
+#ifndef CMMNETMESSHANDLER_H
+#define CMMNETMESSHANDLER_H
+
+// INCLUDES
+#include <e32base.h> // Symbian base types
+#include <etelmm.h> // Symbian Etel related types
+
+#include "mmmmesshandlerbase.h"
+#include "cmmphonetreceiver.h"
+#include "muiccoperationbase.h"
+#include "nokiatsy_internal_variation.h"
+
+// CONSTANTS
+
+// 2.8 AVKON LAF UI specification states that signal strength is
+// indicated by 0 to 7 bars
+const TInt8 KMaxSignalStrengthBars = 7;
+// GpdsRadioActivityInd / GPDS_RADIO_OFF completion delay (2000000us = 2 seconds)
+const TInt KGPDSRAICompleteDelay = 2000000;
+
+// MACROS
+ //None
+
+// DATA TYPES
+typedef TBuf<4> TOperatorCode; // Code data size is 4
+typedef TBuf<3> TCountryCode; // Code data size is 3
+
+// FUNCTION PROTOTYPES
+ //None
+
+// FORWARD DECLARATIONS
+class CMmPhoNetSender;
+class CMmDataPackage;
+class CMmNetOperatorNameHandler;
+class CMmMessageRouter;
+class TIsiReceiveC;
+class TIsiSubBlock;
+class CDelayTimer;
+class CMmUiccMessHandler;
+
+// CLASS DECLARATION
+
+/**
+* Used for creating and sending NET server's ISI messages to
+* PhoNet via PhoNetSender. It also receives NET server's
+* ISI messages from PhoNetReceiver.
+*/
+class CMmNetMessHandler
+ : public CBase, public MMmMessHandlerBase, public MMmMessageReceiver,
+ public MUiccOperationBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * Two-phased constructor.
+ * @param aPhoNetSender: pointer to the Phonet sender.
+ * @param aPhoNetReceiver: pointer to the Phonet receiver.
+ * @param aMessageRouter: Pointer to the message router.
+ * @return created message handler object.
+ */
+ static CMmNetMessHandler* NewL(
+ CMmPhoNetSender* aPhoNetSender,
+ CMmPhoNetReceiver* aPhoNetReceiver,
+ CMmMessageRouter* aMessageRouter,
+ CMmUiccMessHandler* aUiccMessHandler );
+
+ /**
+ * Destructor.
+ */
+ ~CMmNetMessHandler();
+
+ public: // Functions
+
+ /**
+ * Handle UICC response messages
+ * @param aTraId Transaction ID
+ * @param aFileData Descriptor for file data
+ * @return KErrNone or error code
+ */
+ TInt ProcessUiccMsg( TInt aTraId, TInt aStatus, const TDesC8& aFileData );
+
+ /**
+ * Entry point for request from the message manager
+ * @param aIpc
+ * @param CMmDataPackage
+ * @return TInt ret: KErrNone or error code
+ */
+ TInt ExtFuncL( TInt aIpc, const CMmDataPackage* aDataPackage );
+
+ /**
+ * Handles a received message by calling the specific
+ * message handling method.
+ * @param TIsiReceiveC, reference to the received message.
+ */
+ void ReceiveMessageL( const TIsiReceiveC& aIsiMessage );
+
+ /**
+ * Handles errors coming from PhoNetReceiver RunError
+ * @param const TIsiReceiveC& aIsiMessage: The received ISI message
+ * @param TInt aError: Error code
+ */
+ void HandleError( const TIsiReceiveC& aIsiMessage, TInt aError );
+
+ /**
+ * Returns boolean of IMS PIN verify status
+ * @return TBool: EFalse or ETrue
+ */
+ TBool GetImsPinVerifyStatus();
+
+ /**
+ * Maps the isa operator code to Symbian values
+ * @param TDesC8 aIsaOperatorAndCountryCode: Operator and country code
+ * @param TMobilePhoneNetworkIdentity aOperatorCode: Network identity
+ * @param TMobilePhoneNetworkCountryCode aCountryCode: Country code
+ * @param TInt aMNCLength: Mnc default lenght is three
+ * @return TBool networkCodeMapped: EFalse or ETrue
+ */
+ static TBool MapOperatorAndCountryCode(
+ const TDesC8& aIsaOperatorAndCountryCode,
+ RMobilePhone::TMobilePhoneNetworkIdentity& aOperatorCode,
+ RMobilePhone::TMobilePhoneNetworkCountryCode& aCountryCode,
+ TInt aMNCLength = 3 );
+
+ /**
+ * Maps the isa network status to symbian values.
+ * @param TUint8 aISANetworkStatus: Network status value.
+ * @param TMobilePhoneNetworkStatus aNWStatus: Network status value.
+ * @return None
+ */
+ static void MapNwStatus(
+ TUint8 aISANetworkStatus,
+ RMobilePhone::TMobilePhoneNetworkStatus& aNWStatus );
+
+ /**
+ * Saves GPDS radio activity information and completes
+ * NotifyCurrentNetworkChange if state changed.
+ * @param aNewPacketTrancferStatus: New radio activity state
+ */
+ void CompleteGpdsRadioActivityInd( TBool aNewPacketTrancferStatus );
+
+ /**
+ * Completes IPC EMobilePhoneNotifyCurrentNetworkChange and
+ * EMobilePhoneGetNetworkRegistrationStatus.
+ * @param aLocationAreaData includes Location Area data
+ * @param aNetworkInfoData includes Network data
+ */
+ void CompleteMobilePhoneNotifyCurrentNetworkChange(
+ const RMobilePhone::TMobilePhoneLocationAreaV1& aLocationAreaData,
+ const RMobilePhone::TMobilePhoneNetworkInfoV5& aNetworkInfoData );
+
+ /**
+ * Continue handling of queued messages if available.
+ * @return None
+ */
+ void ContinueHandlingNetModemRegStatusMessages();
+
+ /**
+ * Starts reading Operator Name String and Operator PLMN List rules
+ * when SIM is ready.
+ * @return None
+ */
+ void InitializeOnsAndOplReading();
+
+ /**
+ * Gets pointer to CMmMessageRouter class.
+ * @return Pointer to CMmMessageRouter object.
+ */
+ CMmMessageRouter* GetMessageRouter();
+
+ /**
+ * Gets pointer to CMmPhoNetSender class.
+ * @return Pointer to CMmPhoNetSender object.
+ */
+ CMmPhoNetSender* GetPhoNetSender();
+
+ /**
+ * Gets pointer to CMmNetOperatorNameHandler class.
+ * @return Pointer to CMmNetOperatorNameHandler object.
+ */
+ CMmNetOperatorNameHandler* GetNetOperatorNameHandler();
+
+ /**
+ * Extracts network registration status from NET_MODEM_REG_STATUS_IND,
+ * NET_SET_RESP or NET_MODEM_REG_STATUS_GET_RESP
+ * @param aIsiMessage ISI-message to extract data from
+ * @param aRegistrationStatus resulting registration status
+ * @return TInt KErrNone, KErrNotFound if subblock not found
+ * or system-wide error
+ */
+ TInt ExtractNetworkRegistrationStatus(
+ const TIsiReceiveC& aIsiMessage,
+ TUint8& aRegistrationStatus
+ ) const;
+
+ private: // Constructors and destructor
+
+ /**
+ * 2nd phase constructor
+ */
+ void ConstructL();
+
+ private: // Functions
+
+ /**
+ * Breaks a NET_MODEM_REG_STATUS_IND ISI-message.
+ * @param TIsiReceiveC& aIsiMessage: Received ISI message
+ * @return None
+ */
+ void NetModemRegStatusInd( const TIsiReceiveC& aIsiMessage );
+
+ /**
+ * Sends a NET_MODEM_REG_STATUS_GET_REQ ISI-message.
+ * @param TUint8 aTransactionId: Transaction id
+ * @return TInt, success/failure value
+ */
+ TInt NetModemRegStatusGetReq( TUint8 aTransactionId ) const;
+
+ /**
+ * Net modem available get request.
+ * @param TUint8 aTransactionId: Transaction id
+ * @return TInt, success/failure value
+ */
+ TInt NetModemAvailableGetReq( TUint8 aTransactionId ) const;
+
+ /**
+ * GSM specific part of NET_MODEM_AVAILABLE_GET_RESP ISI-message.
+ * @param TIsiReceiveC& aIsiMessage: Received ISI message
+ * @return None
+ */
+ void NetModemAvailableGetRespL( const TIsiReceiveC& aIsiMessage ) const;
+
+ /**
+ * Net available cancel request.
+ * @param TUint8 aTransactionId: Transaction id
+ * @return TInt, success/failure value
+ */
+ TInt NetAvailableCancelReq( TUint8 aTransactionId );
+
+ /**
+ * Net available cancel response.
+ * @param TIsiReceiveC& aIsiMessage: Received ISI message
+ * @return None
+ */
+ void NetAvailableCancelResp( const TIsiReceiveC& aIsiMessage );
+
+ /**
+ * Net set request.
+ * @param TUint8 aTransactionId: Transaction id
+ * @param TBool aIsManual: Mode of the Selection
+ * @param TOperatorCode aMnc: Pointer to MNC code
+ * @param TCountryCode aMcc: Pointer to MCC code
+ * @return TInt, success/failure value
+ */
+ TInt NetSetReq(
+ TUint8 aTransactionId,
+ TBool aIsManual,
+ const TOperatorCode& aMnc,
+ const TCountryCode& aMcc ) const;
+
+ /**
+ * Net set cancel request.
+ * @param TUint8 aTransactionId: Transaction id
+ * @return TInt, success/failure value
+ */
+ TInt NetSetCancelReq( TUint8 aTransactionId );
+
+ /**
+ * Net set cancel response
+ * @param TIsiReceiveC& aIsiMessage: Received ISI message
+ * @retrun None
+ */
+ void NetSetCancelResp( const TIsiReceiveC& aIsiMessage );
+
+ /**
+ * Request the current Radio access technology
+ * @param TUint8 aTransactionId: Transaction id
+ * @return TInt: Error code
+ */
+ TInt NetRatReq( TUint8 aTransactionId ) const;
+
+ /**
+ * Breaks a NET_RAT_RESP ISI message
+ * @param TIsiReceiveC& aIsiMessage: Received ISI message
+ * @return None
+ */
+ void NetRatResp( const TIsiReceiveC& aIsiMessage );
+
+ /**
+ * Net network select mode set req.
+ * @param TUint8 aTransactionId: Transaction id
+ * @param RMobilePhone::TMobilePhoneNetworkSelectionV1& aNetworkSelection:
+ * Network selection
+ * @return TInt, success/failure value
+ */
+ TInt NetNetworkSelectModeSetReq(
+ TUint8 aTransactionId,
+ const RMobilePhone::TMobilePhoneNetworkSelectionV1& aNetworkSelection ) const;
+
+ /**
+ * Net network select mode set response
+ * @param TIsiReceiveC& aIsiMessage: Received ISI message
+ * @return None
+ */
+ void NetNetworkSelectModeSetResp( const TIsiReceiveC& aIsiMessage ) const;
+
+ /**
+ * Network Get RSSI request.
+ * @param None
+ * @return TInt, success/failure value
+ */
+ TInt NetRssiGetReq() const;
+
+ /**
+ * Network Get RSSI response.
+ * @param TIsiReceiveC& aIsiMessage: Received ISI message
+ * @return None
+ */
+ void NetRssiGetResp( const TIsiReceiveC& aIsiMessage );
+
+ /**
+ * Network RSSI indication.
+ * @param TIsiReceiveC& aIsiMessage: Received ISI message
+ * @return None
+ */
+ void NetRssiInd( const TIsiReceiveC& aIsiMessage );
+
+ /**
+ * Handle RSSI and complete to CommonTSY.
+ * @param TUint8 aBarsIsi: bar percentage (ISI value)
+ * @return TUint8 aRSSIIsi: RSSI in dBm with inverse sign (ISI value)
+ */
+ void HandleRssi(
+ TUint8 aBarsIsi,
+ TUint8 aRSSIIsi ) const;
+
+ /**
+ * Network time indication.
+ * @param TIsiReceiveC& aIsiMessage: Received ISI message
+ * @return None
+ */
+ void NetTimeInd( const TIsiReceiveC& aIsiMessage ) const;
+
+ /**
+ * Network ciphering indication.
+ * @param TIsiReceiveC& aIsiMessage: Received ISI message
+ * @return None
+ */
+ void NetCipheringInd( const TIsiReceiveC& aIsiMessage ) const;
+
+ /**
+ * Ciphering indicator read request
+ * @return Error code
+ */
+ TInt UiccReadCiReq();
+
+ /**
+ * Ciphering indicator read response
+ * @param aStatus Status
+ * @param aFileData File data
+ * @return None
+ */
+ void UiccReadCiResp( TInt aStatus, const TDesC8& aFileData );
+
+ /**
+ * Network radio information indication.
+ * @param const TIsiReceiveC& aIsiMessage: Received ISI message
+ * @return None
+ */
+ void NetRadioInfoInd( const TIsiReceiveC& aIsiMessage );
+
+ /**
+ * Read home network
+ * @return Error code
+ */
+ TInt UiccCsReadReq();
+
+ /**
+ * Response to read EHPLMN
+ * @param aStatus Status
+ * @param aFileData File data containig EHPLMN
+ * @return None
+ */
+ void UiccCsReadEhpmlnResp( TInt aStatus, const TDesC8& aFileData );
+
+ /**
+ * Response to read HPLMN
+ * @param aStatus Status
+ * @param aFileData File data containig HPLMN
+ */
+ void UiccCsReadHpmlnResp( TInt aStatus, const TDesC8& aFileData );
+
+ /**
+ * Set network info
+ * @param None
+ * @return None
+ */
+ void SetSimNetworkInfo();
+
+ /**
+ * GPDS radio activity indication.
+ * @param const TIsiReceiveC& aIsiMessage: Received ISI message
+ * @return None
+ */
+ void GpdsRadioActivityInd( const TIsiReceiveC& aIsiMessage );
+
+ /**
+ * GPDS Context Deactivate indication.
+ * @param const TIsiReceiveC& aIsiMessage: Received ISI message
+ * @return None
+ */
+ void GpdsContextDeactivateInd( const TIsiReceiveC& aIsiMessage );
+
+ /**
+ * Completes IPC EMobilePhoneGetHomeNetwork.
+ */
+ void CompleteMobilePhoneGetHomeNetwork();
+
+ /**
+ * Queue functionality for NET_MODEM_REG_STATUS_IND,
+ * NET_MODEM_REG_STATUS_GET_RESP and NET_SET_RESP ISI-messages.
+ * @param TIsiReceiveC& aIsiMessage: Received ISI message
+ * @return None
+ */
+ void QueueNetModemRegStatusMessagesL( const TIsiReceiveC& aIsiMessage );
+
+ /**
+ * Start handling queued messages.
+ * @return None
+ */
+ void StartHandlingNetModemRegStatusMessages();
+
+ /**
+ * Finds offset to NET_GSM_REG_INFO or NET_CURRENT_CELL_INFO
+ * in NET_REG_STATUS_IND, NET_SET_RESP or NET_REG_STATUS_GET_RESP
+ * @param aIsiMessage ISI-message to process
+ * @param aSbOffset resulting offset to the subblock
+ * @return TInt KErrNone or system-wide error
+ */
+ TInt FindOperatorInfoSubBlock(
+ const TIsiReceiveC& aIsiMessage,
+ TUint& aSbOffset
+ ) const;
+
+ /**
+ * Extracts network registration status from NET_REG_INFO_COMMON
+ * subblock of NET_REG_STATUS_IND, NET_SET_RESP or
+ * NET_REG_STATUS_GET_RESP.
+ * @param aIsiMessage ISI-message to process
+ * @param aOperatorCode BCD-string containing operator code
+ * @param aRegistrationStatus resulting registration status
+ * @param aSbStartOffset NET_REG_INFO_COMMON subblock offset
+ * @return TInt KErrNone or system-wide error
+ */
+ TInt ExtractNetworkRegistrationStatus(
+ const TIsiReceiveC& aIsiMessage,
+ const TDesC8& aOperatorCode,
+ TUint8& aRegistrationStatus,
+ TUint& aSbStartOffset
+ ) const;
+
+ protected: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+ CMmNetMessHandler();
+
+ protected: // Functions
+
+ /**
+ * Breaks a NET_RAT_IND ISI-message.
+ * @param const TIsiReceiveC& aIsiMessage: Received ISI message
+ * @return None
+ */
+ void NetRatInd( const TIsiReceiveC& aIsiMessage );
+
+ // NETWORK UTILITY FUNCTIONS
+ /**
+ * Maps the isa network registration status to Symbian values.
+ * @param TUint8 aISARegistrationStatus: Network registration status.
+ * @param TMobilePhoneRegistrationStatus aRegStatus: Phone registration
+ * status.
+ * @param TMobilePhoneNetworkStatus aNWStatus: Phone network status.
+ * @return None
+ */
+ static void MapNWAndRegStatus(
+ TUint8 aISARegistrationStatus,
+ RMobilePhone::TMobilePhoneRegistrationStatus& aRegStatus,
+ RMobilePhone::TMobilePhoneNetworkStatus& aNWStatus );
+
+ /**
+ * Maps the isa network selection mode to Symbian values.
+ * @param TUInt8 aISASelectionMode: Network selection mode.
+ * @param TMobilePhoneNetworkSelectionV1 aSelectionMode:
+ * Network selection mode.
+ * @return None
+ */
+ static void MapNWSelectionMode(
+ TUint8 aISASelectionMode,
+ RMobilePhone::TMobilePhoneNetworkSelectionV1& aSelectionMode );
+
+ private: // Data
+
+ // Pointer to the NetOperatorNameHandler.
+ CMmNetOperatorNameHandler* iNetOperatorNameHandler;
+
+ // Pointer to the Message Router
+ CMmMessageRouter* iMessageRouter;
+
+ // Cached network selection method
+ TUint8 iSelectionMethod;
+
+ // Wether the network selection cancel has been issued or not
+ TBool iSelectNetworkCancelIssued;
+
+ // Wether the network search cancel has been issued or not
+ TBool iSearchNetworkCancelIssued;
+
+ // Network mode: ENetworkModeGsm, ENetworkModeWcdma or
+ // ENetworkModeUnknown
+ RMobilePhone::TMobilePhoneNetworkMode iNetworkMode;
+
+ // If PIN code needs to be verified before IMSI can be used.
+ TBool iImsPinVerifyRequired;
+
+ // If ISIM application is used
+ TBool iIsimUsed;
+
+ // MNC lenght
+ TUint8 iMNClength;
+
+ // Home PLMN
+ TBuf8<4> iHplmn;
+
+ // Network access technology
+ RMobilePhone::TMobilePhoneNetworkAccess iNetworkAccess;
+
+ // Radio Resource Control (RRC) is in Cell_DCH state (there is
+ // no cell/location info available while in this state)
+ TBool iCell_DCH;
+
+ // Packet transfer state (there is
+ // no cell/location info available while in this state)
+ TBool iPacketTransfer;
+
+ // Delay timer for completion of Packet transfer state
+ CDelayTimer* iDelayTimer;
+
+ // Network and location information have to be saved while RRC is
+ // (temporarily) in Cell_DCH state
+ RMobilePhone::TMobilePhoneNetworkInfoV5 iLastNWInfo;
+ RMobilePhone::TMobilePhoneLocationAreaV1 iLastLocInfo;
+
+ // Home network information have to be saved while operator name
+ // is requested from the NET Server.
+ RMobilePhone::TMobilePhoneNetworkInfoV5 iHomeInfo;
+
+ // Is NET_MODEM_REG_STATUS_IND, NET_MODEM_REG_STATUS_GET_RESP or
+ // NET_SET_RESP message handling ongoing.
+ TBool iNetMessageHandlingOngoing;
+
+ // Array for queueing NET_MODEM_REG_STATUS_IND,
+ // NET_MODEM_REG_STATUS_GET_RESP and NET_SET_RESP messages.
+ RPointerArray<HBufC8> iNetMessageQueue;
+
+ protected: // Data
+
+ // Pointer to the PhonetSender
+ CMmPhoNetSender* iPhoNetSender;
+
+ // Pointer to UICC message handler
+ CMmUiccMessHandler* iMmUiccMessHandler;
+ };
+
+/**
+* CDelayTimer: Used for delaying for completion of Packet transfer state
+* from GPDS_RADIO_AVTIVITY_IND.
+*/
+class CDelayTimer : public CTimer
+ {
+
+ public: // Constructors and destructors
+
+ /**
+ * Two-phased constructor.
+ * @param aNetMessHandler: Pointer to the net message handler
+ * @return CDelayTimer object
+ */
+ static CDelayTimer* NewL( CMmNetMessHandler* aNetMessHandler );
+
+ /**
+ * ~CDelayTimer.
+ * Destructor.
+ */
+ ~CDelayTimer();
+
+ private: // Constructors and destructors
+
+ /**
+ * C++ default constructor.
+ */
+ CDelayTimer();
+
+ /**
+ * 2nd phase constructor.
+ */
+ void ConstructL();
+
+ private: // Functions from base classes
+
+ /**
+ * From CActive.
+ * Called when operation completes.
+ */
+ void RunL();
+
+ /**
+ * From CActive.
+ * Called when operation is cancelled.
+ */
+ void DoCancel();
+
+ public: // New functions
+
+ /**
+ * Start delay timer.
+ * @param aNewPacketTransferState: New packet transfer state
+ * @param aTimeOut: Time out in ms
+ */
+ void StartDelayTimer(
+ TBool aNewPacketTransferState,
+ TInt aTimeOut );
+
+ private: // Data
+
+ /**
+ * pointer to the net message handler
+ */
+ CMmNetMessHandler* iNetMessHandler;
+
+ /**
+ * new packet transfer state
+ */
+ TBool iNewPacketTransferState;
+
+ };
+
+#endif // CMMNETMESSHANDLER_H
+
+// End of File