diff -r 000000000000 -r 3553901f7fa8 telephonyserverplugins/common_tsy/commontsy/inc/mmcustomtsy/CMmSIMTsy.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/telephonyserverplugins/common_tsy/commontsy/inc/mmcustomtsy/CMmSIMTsy.h Tue Feb 02 01:41:59 2010 +0200 @@ -0,0 +1,511 @@ +/* +* Copyright (c) 2006-2009 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: +* +*/ + + + +#ifndef CMMSIMTSY_H +#define CMMSIMTSY_H + +// INCLUDES +#include "CMmCustomTsy.h" +#include "cmmtsyreqhandlestore.h" +#include "CMmSubTsyBase.h" + +// CONSTANTS +const TInt KNoCbIds = -1; + +// From Viag HomeZone specification +const TInt KPhEngMaxViagHomeZones = 4; +// From Viag HomeZone specification +const TInt KPhEngMaxCacheId = 21; + +// CLASS DECLARATION + +/** +* CMmSIMTsy contains mode-independent SIM functionality. +* Extension request handles and parameters are stored as attributes. +*/ +NONSHARABLE_CLASS( CMmSIMTsy ) : public CMmSubTsyBase + { + public: + + // TSIMRequestType enumerates indexes to SIM's request handle + // table. Request handles are stored there while waiting for + // completion of the request. + enum TSIMRequestType + { + ESIMTsyReqHandleUnknown, + ESIMRequestTypeReadParams, + ESIMRequestTypeReadCache, + ESIMRequestTypeWriteCache, + ESIMRequestTypeWriteSettings, + ESIMRequestTypeStartSimCbTopicBrowsing, + ESIMRequestTypeGetNextSimCbTopic, + ESIMRequestTypeDeleteSimCbTopic, + + // Declare constant for those requests that need own request handle + // record in iTsyReqHandleStore above the following + ESIMRequestTypeMaxNumOfRequests, + + // Let the next literal be the last + ESIMRequestTypeUndefined = 0xff + }; + + public: // Constructors and destructor + + /** + * C++ default constructor. + */ + CMmSIMTsy(); + + /** + * Two-phased constructor. + */ + static CMmSIMTsy* NewL( CMmCustomTsy* mmCustomTsy ); + + /** + * Destructor. + */ + ~CMmSIMTsy(); + + public: + + /** + * Initialisation method + * + * + */ + void Init(); + + /** + * Tells whether the object supports given IPC. + * + * + * @param aIpc Request's IPC value + * @return ETrue if object supports given IPC + */ + TBool SupportingIPC( const TInt aIpc ); + + /** + * Handles extended client requests. Uses TRAP to ensure functioning on + * memory allocation failure. + * + * + * @param aTsyReqHandle Request handle + * @param aIpc Request's IPC value + * @param aPackage Reference to a data package + * @return Error value + */ + TInt DoExtFuncL( const TTsyReqHandle aTsyReqHandle, + const TInt aIpc, + const TDataPackage& aPackage ); + + /** + * Returns request mode for given IPC number. + * + * + * @param aIpc An interprocess communication command identifier + * @return The ReqMode corresponding to given IPC + */ + CTelObject::TReqMode ReqModeL( const TInt aIpc ); + + /** + * Returns number of slots to be used for given IPC. + * + * + * @param aIpc An interprocess communication command identifier + * @return The number of slots reserved for a given IPC + */ + TInt NumberOfSlotsL( const TInt aIpc ); + + /** + * Cancels request of which IPC number and request handle + * are given in parameters. + * + * + * @param aIpc An interprocess communication command identifier + * @param aTsyReqHandle Request handle + * @return Error value + */ + TInt CancelService( const TInt aIpc, + const TTsyReqHandle aTsyReqHandle ); + + /** + * Register given notification. + * + * + * @param aIpc An interprocess communication command identifier + * @return KErrNotSupported + */ + TInt RegisterNotification( const TInt aIpc ); + + /** + * Deregister given notification. + * + * + * @param aIpc An interprocess communication command identifier + * @return KErrNotSupported + */ + TInt DeregisterNotification( const TInt aIpc ); + + public: + + /** + * Sends VIAG homezone parameters read request if requested by client. + * + * + */ + void CheckViagHomezoneParamsL(); + + /** + * Completes the ReadViagHomeZoneParamsResp response message. + * + * + * @param aParams Pointer to VIAG Home Zone parameters structure + * @param aElems Pointer to VIAG Home Zone elements structure + * @param aError Error value + */ + void CompleteReadViagHomeZoneParamsResp( + RMmCustomAPI::TViagParams* aParams, + RMmCustomAPI::TViagElements* aElems, + TInt aError ); + + /** + * Completes the ReadViagHomeZoneCacheResp response message. + * + * + * @param aViagRecord Pointer to VIAG Home Zone record content + * @param aError Error value + */ + void CompleteReadViagHomeZoneCacheRespL( + RMmCustomAPI::TViagCacheRecordContent* aViagRecord, + TInt aError ); + + /** + * Completes the WriteViagHomeZoneCacheResp response message. + * + * + * @param aError Error value + */ + void CompleteWriteViagHomeZoneCacheResp( TInt aError ); + + /** + * Completes the WriteViagHomeZoneUHZIUESettings response message. + * + * @param aError Error value + */ + void CompleteWriteViagHomeZoneUHZIUESettingsResp( TInt aError ); + + /** + * Complete StartSimCbTopicBrowsing + * + * @param aTopics CB Topics from SIM + * @param aError Error value + */ + void CompleteStartSimCbTopicBrowsing( + CArrayFixFlat* aTopics, + TInt aError ); + + /** + * Completes delete SIM CB topic request + * + * + * @param aError Error value + */ + void CompleteDeleteSimCbTopic( TInt aError ); + + +#ifdef REQHANDLE_TIMER + /** + * Calls the needed complete method due the timer expiration + * + * + * @param aReqHandleType + * @param aError + */ + void Complete( TInt aReqHandleType, TInt aError ); +#endif //REQHANDLE_TIMER + + private: + + /** + * By default EPOC constructor is private. + * + * + * @param aMmCustomTsy + */ + void ConstructL( CMmCustomTsy* aMmCustomTsy ); + + /** + * Read ViagHomeZoneParams + * + * + * @param aViagParameters: Pointer to VIAG HomeZone parameters structure + * @param aViagElements Pointer to VIAG Home Zone elements structure + * @return Error value + */ + TInt ReadViagHomeZoneParamsL( RMmCustomAPI::TViagParams* aViagParameters, + RMmCustomAPI::TViagElement* aViagElements ); + + /** + * Read ViagHomeZoneCache + * + * + * @param aViagRecordId + * @param aViagRecordContent + * @return Error value + */ + TInt ReadViagHomeZoneCacheL( + RMmCustomAPI::TViagCacheRecordId* aViagRecordId, + RMmCustomAPI::TViagCacheRecordContent* aViagRecordContent ); + + /** + * Read Dynamic ViagHomeZoneCache + * + * + * @param aTsyReqHandle + * @param aViagRecordId + * @param aViagRecordContent + * @return Error value + */ + TInt ReadDynamicViagHomeZoneCacheL( + const TTsyReqHandle aTsyReqHandle, + RMmCustomAPI::TViagCacheRecordId* aViagRecordId, + RMmCustomAPI::TViagCacheRecordContent* aViagRecordContent ); + + /** + * Start dynamic caching + * + * + */ + void StartDynamicCachingL(); + + /** + * Write ViagHomeZoneCache + * + * + * @param aViagRecordId Pointer to VIAG Home Zone record id structure + * @param aViagRecordContent Pointer to VIAG Home Zone record + * content structure + * @return Error value + */ + TInt WriteViagHomeZoneCacheL( + RMmCustomAPI::TViagCacheRecordId* aViagRecordId, + RMmCustomAPI::TViagCacheRecordContent* aViagRecordContent ); + + /** + * Cancel the ReadViagHomeZoneParams request + * + * + * @return KErrNone + */ + TInt ReadViagHomeZoneParamsCancel(); + + /** + * Cancel the ReadViagHomeZoneCache request + * + * + * @return KErrNone + */ + TInt ReadViagHomeZoneCacheCancel( + const TTsyReqHandle aTsyReqHandle ); + + /** + * Cancel the WriteViagHomeZoneCache request + * + * + * @return KErrNone + */ + TInt WriteViagHomeZoneCacheCancel(); + + /** + * Writes specified VIAG Home Zone UHZIUE settings to SIM. + * + * @param aSettings Pointer to TViagUHZIUESettings + * @return Error value + */ + TInt WriteViagHomeZoneUHZIUESettingsL( + RMmCustomAPI::TViagUHZIUESettings* aSettings ); + + /** + * Cancels the VIAG Home Zone UHZIUE settings write request. + * + * @param ?arg1 ?description + * @return Error value + */ + TInt WriteViagHomeZoneUHZIUESettingsCancel(); + + /** + * Start Sim Cb Topics Browsing + * + * + * @param aTsyReqHandle Request handle + * @return Error value + */ + TInt StartSimCbTopicBrowsingL( const TTsyReqHandle aTsyReqHandle ); + + /** + * Get Next Sim Cb Topic + * + * + * @param aTsyReqHandle Request handle + * @param aSimCbTopic Pointer to TSimCbTopic structure + * @return Error value + */ + TInt GetNextSimCbTopic( TTsyReqHandle aTsyReqHandle, + RMmCustomAPI::TSimCbTopic* aSimCbTopic ); + + /** + * Delete Sim Cb Topic + * + * + * @param aTsyReqHandle Request handle + * @param aSimCbTopicNumber ID number of the sim topic + * @return Error value + */ + TInt DeleteSimCbTopicL( const TTsyReqHandle aTsyReqHandle, + TUint* aSimCbTopicNumber ); + + /** + * Reset and destroy sim cb topics + * + * + */ + void ResetAndDestroySimCbTopics(); + + +#ifdef REQHANDLE_TIMER + /** + * Chooses the type of response, automatic or common + * + * + * @param aReqHandleType + * @param aTsyReqHandle + */ + void SetTypeOfResponse( const TInt aReqHandleType, + const TTsyReqHandle aTsyReqHandle ); +#endif // REQHANDLE_TIMER + + private: + + /** + * Pointer to CMmCustomTsy class + * Not Own. + */ + CMmCustomTsy* iMmCustomTsy; + + /** + *Pointer to request handle store + * Own. + */ + CMmTsyReqHandleStore* iTsyReqHandleStore; + + /** + * SIM Custom API request handle table + * Own. + */ + TTsyReqHandle iSIMReqHandles[ESIMRequestTypeMaxNumOfRequests]; + + /** + * Saves temporarily last TSY request type + * Own. + */ + TSIMRequestType iReqHandleType; + + /** + * Pointer to VIAG Home Zone parameters structure + * Not Own. + */ + RMmCustomAPI::TViagParams* iViagParams; + + /** + * Pointer to VIAG Home Zone elements structure + * Not Own. + */ + RMmCustomAPI::TViagElement* iViagElems; + + /** + * VIAG home zone record content + * Not Own. + */ + RMmCustomAPI::TViagCacheRecordContent* iViagReadCacheRecord; + + /** + * Is VIAG home zone params requested before SIM is ready + */ + TBool iViagParamsReadRequested; + + /** + * used for handling SIM CB Topic browsing: + * a cached table of all entries + * Own. + */ + CArrayFixFlat* iSimCbTopics; + + /** + * The index of the next topic to retrieve with the GetNext-method + */ + TInt iGetNextSimCbTopicIndex; + + /** + * The index of the topic to be deleted + */ + TInt iSimCbTopicIndexToBeDeleted; + + /** + * The Dynamic cache for VIAG home zone records + * Own. + */ + CArrayFixFlat* iViagDynamicCache; + + /** + * Pointer to current cache + * Not Own. + */ + RMmCustomAPI::TViagCacheRecordId* iCurrentlyRetrievedCache; + + /** + * Is ViagHomeZone cache ready + */ + TBool iViagHomeZoneCacheReady; + + /** + * Used for queuing ReadViagHomeZoneCache requests + */ + struct TReadViagHomeZoneCacheRequest + { + /** ETel request handle */ + TTsyReqHandle iReqHandle; + /** pointer to client-side data */ + RMmCustomAPI::TViagCacheRecordId* iViagRecordId; + RMmCustomAPI::TViagCacheRecordContent* iViagRecordContent; + }; + + /** + * Array for buffering ReadViagHomeZoneCache requests + */ + RPointerArray< TReadViagHomeZoneCacheRequest > + iReadViagHomeZoneCacheRequests; + + + + + }; + +#endif // CMMSIMTSY_H + +// End of File