--- a/adaptationlayer/tsy/nokiatsy_dll/src/cmmphonebookoperationread3g_adn.cpp Wed Feb 17 13:58:55 2010 +0200
+++ b/adaptationlayer/tsy/nokiatsy_dll/src/cmmphonebookoperationread3g_adn.cpp Wed Apr 21 14:29:55 2010 +0300
@@ -1,5 +1,5 @@
/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2010 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"
@@ -21,6 +21,7 @@
#include <pn_const.h>
#include <ctsy/serviceapi/mmtsy_ipcdefs.h>
#include "tsylogger.h"
+#include "cmmmessagerouter.h"
#include "cmmphonebookoperationread3g_adn.h"
#include "OstTraceDefinitions.h"
#ifdef OST_TRACE_COMPILER_IN_USE
@@ -37,7 +38,10 @@
// None
// CONSTANTS
-//const TUint16 KSimPbLocationMBDN = 0x0100;
+const TUint8 KAnrOffsetNumLength = 1; // refer from 3GPP TS 31.102 document
+const TUint8 KAnrOffsetNumber = 2;
+const TUint8 KMinLengthEfAnr = 15;
+const TUint8 KMaxEmptyPatternBuf = 243;
// MACROS
// None
@@ -67,8 +71,6 @@
{
TFLOGSTRING("TSY: CMmPhoneBookOperationRead3g_adn::CMmPhoneBookOperationRead3g_adn");
OstTrace0( TRACE_NORMAL, CMMPHONEBOOKOPERATIONREAD3G_ADN_CMMPHONEBOOKOPERATIONREAD3G_ADN, "CMmPhoneBookOperationRead3g_adn::CMmPhoneBookOperationRead3g_adn" );
-
-
}
// -----------------------------------------------------------------------------
@@ -82,7 +84,6 @@
{
TFLOGSTRING("TSY: CMmPhoneBookOperationRead3g_adn::~CMmPhoneBookOperationRead3g_adn");
OstTrace0( TRACE_NORMAL, DUP1_CMMPHONEBOOKOPERATIONREAD3G_ADN_CMMPHONEBOOKOPERATIONREAD3G_ADN, "CMmPhoneBookOperationRead3g_adn::~CMmPhoneBookOperationRead3g_adn" );
-
}
// -----------------------------------------------------------------------------
@@ -93,20 +94,39 @@
//
CMmPhoneBookOperationRead3g_adn* CMmPhoneBookOperationRead3g_adn::NewL
(
- CMmPhoneBookStoreMessHandler* /*aMmPhoneBookStoreMessHandler*/,
- CMmUiccMessHandler* /*aUiccMessHandler*/,
- const CMmDataPackage* /*aDataPackage*/ // Data
+ CMmPhoneBookStoreMessHandler* aMmPhoneBookStoreMessHandler,
+ CMmUiccMessHandler* aUiccMessHandler,
+ const CMmDataPackage* aDataPackage,
+ TInt aIpc
)
{
TFLOGSTRING("TSY: CMmPhoneBookOperationRead3g_adn::NewL");
OstTrace0( TRACE_NORMAL, CMMPHONEBOOKOPERATIONREAD3G_ADN_NEWL, "CMmPhoneBookOperationRead3g_adn::NewL" );
- TName phonebookTypeName;
-
CMmPhoneBookOperationRead3g_adn* mmPhoneBookOperationRead3g_adn =
new( ELeave ) CMmPhoneBookOperationRead3g_adn();
+ if( ( EMmTsyONStoreReadSizeIPC != aIpc )&&
+ ( EMmTsyONStoreWriteSizeIPC != aIpc ) )
+ {
+ TName phonebookTypeName;
+
+ const CPhoneBookDataPackage* phoneBookData =
+ static_cast<const CPhoneBookDataPackage*>( aDataPackage );
+
+ phoneBookData->GetPhoneBookName( phonebookTypeName );
+
+ // Store phoneBook name
+ mmPhoneBookOperationRead3g_adn->iPhoneBookTypeName = phonebookTypeName;
+ }
+
+ mmPhoneBookOperationRead3g_adn->iMmPhoneBookStoreMessHandler =
+ aMmPhoneBookStoreMessHandler;
+ mmPhoneBookOperationRead3g_adn->iMmUiccMessHandler = aUiccMessHandler;
+
+ mmPhoneBookOperationRead3g_adn->ConstructL();
+
return mmPhoneBookOperationRead3g_adn;
}
@@ -122,10 +142,109 @@
{
TFLOGSTRING("TSY: CMmPhoneBookOperationRead3g_adn::ConstructL");
OstTrace0( TRACE_NORMAL, CMMPHONEBOOKOPERATIONREAD3G_ADN_CONSTRUCTL, "CMmPhoneBookOperationRead3g_adn::ConstructL" );
+
+ iLocationSearch = EFalse;
+ iCurrentType1Ef = 0;
+ iCurrentType2Ef = 0;
+ iLocationSearch = EFalse;
+ iNumOfEntriesFilled = 0;
+ iNumOfEntriesToRead = 0;
+ iIndexToRead = 0;
}
+
+// -----------------------------------------------------------------------------
+// CMmPhoneBookOperationRead3g_adn::UICCCreateReq
+// Create request to read Entry
+// -----------------------------------------------------------------------------
+//
+TInt CMmPhoneBookOperationRead3g_adn::UICCCreateReq
+ (
+ TInt aIpc,
+ const CMmDataPackage* aDataPackage,
+ TUint8 aTransId
+ )
+ {
+TFLOGSTRING("TSY: CMmPhoneBookOperationRead3g_adn::UICCCreateReq");
+OstTrace0( TRACE_NORMAL, CMMPHONEBOOKOPERATIONREAD3G_ADN_UICCCREATEREQ, "CMmPhoneBookOperationRead3g_adn::UICCCreateReq" );
+
+ TInt ret( KErrNotSupported );
+
+ const CPhoneBookDataPackage* phoneBookData =
+ static_cast<const CPhoneBookDataPackage*>( aDataPackage );
+
+ iSavedIPCForComplete = aIpc;
+
+ // Convert Phone Book name to file id
+ iExtFileId = UICC_ILLEGAL_FILE_ID;
+ iFileId = ConvertToPBfileId(
+ iPhoneBookTypeName,
+ iExtFileId,
+ iMmUiccMessHandler->GetCardType() );
+ iArrayIndex = ConvertToConfArrayIndex( iFileId );
+
+
+ switch( aIpc )
+ {
+ case EMmTsyONStoreReadIPC:
+ case EMmTsyONStoreReadEntryIPC:
+ {
+ iFileId = PB_MSISDN_FID;
+ iExtFileId = PB_EXT5_FID;
+ iArrayIndex = EPhonebookTypeMSISDN;
+ // Unpack index to be read
+ aDataPackage->UnPackData( iIndexToRead );
+ ret = USimPbReqRead( iIndexToRead, aTransId );
+ break;
+ }
+ case EMmTsyPhoneBookStoreReadIPC:
+ {
+ CArrayPtrSeg<CPhoneBookStoreEntry>* prtToReadEntriesArray;
+ RMobilePhoneBookStore::TPBIndexAndNumEntries* ptrToIndexAndEntries;
+ phoneBookData->UnPackData(
+ ptrToIndexAndEntries,
+ prtToReadEntriesArray );
+
+ if ( prtToReadEntriesArray && ptrToIndexAndEntries )
+ {
+ iPhoneBookStoreCacheArray = prtToReadEntriesArray;
+ iNumOfEntriesToRead = ptrToIndexAndEntries->iNumSlots;
+ iNumOfEntriesFilled = 0;
+ iIndexToRead = ptrToIndexAndEntries->iIndex;
+
+ if( PB_ADN_FID == iFileId )
+ {
+ // handle for ADN 3g phoneBook
+ ret = UICCHandleData3gADNReadReq( aDataPackage,
+ aTransId );
+ }
+ else
+ {
+ ret = USimPbReqRead( iIndexToRead, aTransId );
+ }
+ }
+ break;
+ }
+ case EMmTsyONStoreReadSizeIPC:
+ case EMmTsyONStoreWriteSizeIPC:
+ {
+ ret = USimReadWriteSizeReq( aTransId );
+ break;
+ }
+ default:
+ {
+ // Nothing to do here
+TFLOGSTRING2("TSY: CMmPhoneBookOperationRead3g_adn::UICCCreateReq - Unknown IPC: %d", aIpc);
+OstTrace1( TRACE_NORMAL, DUP2_CMMPHONEBOOKOPERATIONREAD3G_ADN_UICCCREATEREQ, "CMmPhoneBookOperationRead3g_adn::UICCCreateReq - UnKnown Ipc : %d", aIpc );
+ break;
+ }
+ } // switch-case
+
+ return ret;
+ }
+
// -----------------------------------------------------------------------------
// CMmPhoneBookOperationRead3g_adn::UICCHandleData3gADNReadReq
// Handles Read Resp
@@ -133,52 +252,340 @@
//
TInt CMmPhoneBookOperationRead3g_adn::UICCHandleData3gADNReadReq
(
- TInt aFileId,
- TInt aFileSFI
+ const CMmDataPackage* aDataPackage,
+ TUint8 aTransId
)
{
- TFLOGSTRING("TSY: CMmPhoneBookOperationRead3g_adn::UICCHandleData3gADNReadReq");
- OstTrace0( TRACE_NORMAL, CMMPHONEBOOKOPERATIONREAD3G_ADN_UICCHANDLEDATA3GADNREADREQ, "CMmPhoneBookOperationRead3g_adn::UICCHandleData3gADNReadReq" );
+TFLOGSTRING("TSY: CMmPhoneBookOperationRead3g_adn::UICCHandleData3gADNReadReq");
+OstTrace0( TRACE_NORMAL, CMMPHONEBOOKOPERATIONREAD3G_ADN_UICCHANDLEDATA3GADNREADREQ, "CMmPhoneBookOperationRead3g_adn::UICCHandleData3gADNReadReq" );
TInt ret(KErrNone);
- // get the index to be read from phonebook
- TInt index( iIndexToRead );
- TInt appFileId(APPL_FILE_ID);
+ const CPhoneBookDataPackage* phoneBookData =
+ static_cast<const CPhoneBookDataPackage*>( aDataPackage );
+
+ CArrayPtrSeg<CPhoneBookStoreEntry>* prtToReadEntriesArray;
+ RMobilePhoneBookStore::TPBIndexAndNumEntries* ptrToIndexAndEntries;
+ phoneBookData->UnPackData(
+ ptrToIndexAndEntries,
+ prtToReadEntriesArray );
+
+ if ( prtToReadEntriesArray && ptrToIndexAndEntries )
+ {
+ iPhoneBookStoreCacheArray = prtToReadEntriesArray;
+ iNumOfEntriesToRead = ptrToIndexAndEntries->iNumSlots;
+ iNumOfEntriesFilled = 0;
+ iIndexToRead = ptrToIndexAndEntries->iIndex;
+
+ if( ( iIndexToRead <= iMmPhoneBookStoreMessHandler->
+ iPBStoreConf[EPhonebookTypeAdn].iNoOfRecords ) &&
+ ( 0 < iIndexToRead ) )
+ {
+ ret = iMmPhoneBookStoreMessHandler->GetPBRRecordNum( iIndexToRead,
+ iCurrentPBRRecordNo);
+ }
+ else
+ {
+ // Start Reading from first location , 1st PBR Record
+ iCurrentPBRRecordNo = 1;
+ }
- TUiccReadLinearFixed cmdParams;
- //cmdParams.messHandlerPtr = static_cast<MUiccOperationBase*> iMmPhoneBookStoreMessHandler;
+ if( KErrNone == ret )
+ {
+ ret = UiccReadEfRecordReq(
+ aTransId,
+ PB_PBR_FID,
+ UICC_SFI_NOT_PRESENT,
+ iCurrentPBRRecordNo );
+ }
+ }
+ return ret;
+ }
+
+
+
+
+// -----------------------------------------------------------------------------
+// CMmPhoneBookOperationRead3g_adn::UiccReadEfRecordReq
+// Reads record from EFpbr
+// -----------------------------------------------------------------------------
+//
+TInt CMmPhoneBookOperationRead3g_adn::UiccReadEfRecordReq(
+ const TInt aTraId,
+ const TUint16 aFileId,
+ const TUint8 aFileIdSfi,
+ const TUint8 aRecordNo )
+ {
+TFLOGSTRING("TSY: CMmPhoneBookOperationRead3g_adn::UiccReadEfRecordReq");
+OstTrace0( TRACE_NORMAL, CMMPHONEBOOKOPERATIONREAD3G_ADN_UICCREADEFRECORDREQ, "CMmPhoneBookOperationRead3g_adn::UiccReadEfRecordReq" );
+
+ TUiccReadLinearFixed params;
+ params.messHandlerPtr =
+ static_cast<MUiccOperationBase*>( iMmPhoneBookStoreMessHandler );
+ params.fileId = aFileId;
+ params.fileIdSfi = aFileIdSfi;
+ params.serviceType = UICC_APPL_READ_LINEAR_FIXED;
+ params.record = aRecordNo;
+ params.filePath.Append( static_cast<TUint8>( MF_FILE >> 8 ));
+ params.filePath.Append( static_cast<TUint8>( MF_FILE ));
+ params.filePath.Append( static_cast<TUint8>( APPL_FILE_ID >> 8 ));
+ params.filePath.Append( static_cast<TUint8>( APPL_FILE_ID ));
+ params.filePath.Append( static_cast<TUint8>( DF_PHONEBOOK >> 8 ));
+ params.filePath.Append( static_cast<TUint8>( DF_PHONEBOOK ));
+ params.trId = static_cast<TUiccTrId>( aTraId );
+
+ return iMmPhoneBookStoreMessHandler->UiccMessHandler()->
+ CreateUiccApplCmdReq( params );
+ }
+
+
- cmdParams.filePath.Append(static_cast<TUint8>( MF_FILE >> 8 ));
- cmdParams.filePath.Append(static_cast<TUint8>( MF_FILE ));
- cmdParams.filePath.Append(appFileId >> 8);
- cmdParams.filePath.Append(appFileId);
- cmdParams.filePath.Append(static_cast<TUint8>( DF_PHONEBOOK >> 8 ));
- cmdParams.filePath.Append(static_cast<TUint8>( DF_PHONEBOOK ));
+
+// -----------------------------------------------------------------------------
+// CMmPhoneBookOperationRead::HandleUICCPbRespL
+// Separate request
+// -----------------------------------------------------------------------------
+//
+TBool CMmPhoneBookOperationRead3g_adn::HandleUICCPbRespL
+ (
+ TInt aStatus,
+ TUint8 /*aDetails*/,
+ const TDesC8 &aFileData,
+ TInt aTransId
+ )
+ {
+TFLOGSTRING("TSY: CMmPhoneBookOperationRead3g_adn::HandleUICCPbRespL");
+OstTrace0( TRACE_NORMAL, CMMPHONEBOOKOPERATIONREAD3G_ADN_HANDLEUICCPBRESPL, "CMmPhoneBookOperationRead3g_adn::HandleUICCPbRespL" );
+
+ TBool completed( EFalse );
+ TInt ret( KErrNone );
+ // Handle possible error case all PhoneBooks extcept Adn
+ if ( UICC_STATUS_OK != aStatus )
+ {
+TFLOGSTRING("TSY: CMmPhoneBookOperationRead3g_adn::HandleUICCPbRespL-Unsuccessfully completed by UICC");
+OstTrace0( TRACE_NORMAL, DUP2_CMMPHONEBOOKOPERATIONREAD3G_ADN_HANDLEUICCPBRESPL, "CMmPhoneBookOperationRead3g_adn::HandleUICCPbRespL - Unsuccessfully completed by UICC" );
+
+ ret = CMmStaticUtility::UICCCSCauseToEpocError(aStatus );
+ }
+ switch( iSavedIPCForComplete )
+ {
+ case EMmTsyPhoneBookStoreReadIPC:
+ case EMmTsyONStoreReadIPC:
+ case EMmTsyONStoreReadEntryIPC:
+ {
+ if( PB_ADN_FID == iFileId )
+ {
+ completed = HandleUICC3gADNRespL( aStatus,
+ aFileData,
+ aTransId );
+ }
+ else
+ {
+ completed = USimPbReadRespL( ret,
+ aTransId,
+ aFileData );
+ }
+ break;
+ }
+ case EMmTsyONStoreReadSizeIPC:
+ case EMmTsyONStoreWriteSizeIPC:
+ {
+ completed = USimReadWriteSizeResp( aFileData, ret );
+ break;
+ }
+ default:
+ {
+ // Nothing to do here
+TFLOGSTRING2("TSY: CMmPhoneBookOperationRead3g_adn::HandleUICCPbRespL - Unknown IPC: %d", iSavedIPCForComplete);
+OstTrace1( TRACE_NORMAL, DUP1_CMMPHONEBOOKOPERATIONREAD3G_ADN_HANDLEUICCPBRESPL, "CMmPhoneBookOperationRead3g_adn::HandleUICCPbRespL - UnKnown Ipc : =%d", iSavedIPCForComplete );
+ break;
+ }
+ }
+ return completed;
+
+ }
+
+// -----------------------------------------------------------------------------
+// CMmPhoneBookOperationRead3g_adn::HandleUICC3gADNRespL
+// HAndles Response for ADN phoneBook
+// -----------------------------------------------------------------------------
+//
+TBool CMmPhoneBookOperationRead3g_adn::HandleUICC3gADNRespL
+ (
+ const TInt aStatus,
+ const TDesC8 &aFileData,
+ const TInt aTransId
+ )
+ {
+TFLOGSTRING("TSY: CMmPhoneBookOperationRead3g_adn::HandleUICC3gADNRespL");
+OstTrace0( TRACE_NORMAL, DUP1_CMMPHONEBOOKOPERATIONREAD3G_ADN_UICCHANDLEDATA3GADNREADREQ, "CMmPhoneBookOperationRead3g_adn::UICCHandleData3gADNReadReq" );
- index = iIndexToRead && 0x00FF;
+ TBool completed ( EFalse );
+ TInt ret(KErrNone);
+
+ switch( iCurrentReadPhase )
+ {
+ case EPBReadPhase_PBR_Read_Entry:
+ {
+ ret = UiccReadEfPbrRecordResp( aStatus,
+ aFileData,
+ aTransId );
+
+ break;
+ }
+ case EPBReadPhase_Read_Type1_Entry:
+ {
+ ret = UiccReadEfType1RespL( aStatus,
+ aTransId,
+ aFileData );
+
+ break;
+ }
+ case EPBReadPhase_Read_Type2_Entry:
+ {
+ ret = UiccReadEfType2RespL( aStatus,
+ aTransId,
+ aFileData );
- if( PB_PBR_FID == aFileId )
+ break;
+ }
+ case EPBReadPhase_Read_type3_Entry:
+ {
+ TUint8 fileTag;
+ if( iType2OperationOngoing )
+ {
+ fileTag = iType2FileArray[iCurrentType2Ef].tagValue;
+ }
+ else
+ {
+ fileTag = iType1FileArray[iCurrentType1Ef].tagValue;
+ }
+ ret = UiccReadEfType3RespL( aStatus,
+ aTransId,
+ fileTag,
+ aFileData );
+ break;
+ }
+ default:
+ {
+TFLOGSTRING("TSY: CMmPhoneBookOperationRead3g_adn::HandleUICC3gADNRespL - default branch ");
+OstTrace0( TRACE_NORMAL, CMMPHONEBOOKOPERATIONREAD3G_ADN_HANDLEUICC3GADNRESPL, "CMmPhoneBookOperationRead3g_adn::HandleUICC3gADNRespL - default branch " );
+ break;
+ }
+ }
+
+ if( ( EPB_3G_ADN_Read_Phase_complete == iCurrentReadPhase ) &&
+ ( 0 != iNumOfEntriesToRead ) &&
+ ( KErrNone == ret ) )
{
- // Find which record no should be read
- // get ADN file ID from PBR EF data according to which entry needs to be read
- TUint8 pbrRecordNo(0);
- do
+ iIndexToRead++;
+ iCurrentEfEntryIndex++;
+
+ // Calculate The PBR Record Number needs to be read
+ // get the Max no of Entries in one PBR record
+ TInt maxNoOfEntry( iMmPhoneBookStoreMessHandler->
+ iPBStoreConf[EPhonebookTypeAdn].iNoOfRecords );
+
+ TInt maxNoOfPbrRec( iMmPhoneBookStoreMessHandler->
+ iPBStoreConf[EPhonebookTypeAdn].iPBRNoOfRecords );
+
+ if( iIndexToRead > ( iCurrentPBRRecordNo * ( maxNoOfEntry/maxNoOfPbrRec ) ) )
+ {
+ // Read Next PBR Record
+ iCurrentPBRRecordNo++;
+ if( iCurrentPBRRecordNo <= maxNoOfPbrRec )
+ {
+ // Reset all Buffers
+ iType1FileArray.Reset();
+ iType2FileArray.Reset();
+ iType3FileArray.Reset();
+
+ iCurrentReadPhase = EPBReadPhase_PBR_Read_Entry;
+ ret = UiccReadEfRecordReq(
+ aTransId,
+ PB_PBR_FID,
+ UICC_SFI_NOT_PRESENT,
+ iCurrentPBRRecordNo );
+ }
+ else
+ {
+ // complete with Error
+ ret = KErrArgument;
+ iNumOfEntriesToRead = 0;
+ }
+ }
+ else
+ {
+ // Start Reading next Entry
+ ret = StartReadingEntry( aTransId );
+ }
+ }
+
+ if( ( KErrNone != ret ) ||
+ ( EPB_3G_ADN_Read_Phase_complete == iCurrentReadPhase ) )
+ {
+ // Check fo Any Entries Found
+ if( ( UICC_STATUS_OK == aStatus )&& ( 0 == iNumOfEntriesFilled ) )
{
- pbrRecordNo++;
- index = index-255;
- }while(index > 255);
+ ret = KErrNotFound;
+ }
+
+ CPhoneBookDataPackage phoneBookData;
+ phoneBookData.SetPhoneBookName( iPhoneBookTypeName );
+ iNumOfEntriesFilled = 0;
+ iPhoneBookStoreCacheArray = NULL;
+ iMmPhoneBookStoreMessHandler->MessageRouter()->Complete(
+ EMmTsyPhoneBookStoreReadIPC,
+ &phoneBookData,
+ ret );
+
+ // Set flag to indicate that we can remove this operation from array
+ completed = ETrue;
+ }
+
+ return completed;
+ }
+
+
+
- cmdParams.fileId = PB_PBR_FID;
- cmdParams.serviceType = UICC_APPL_READ_LINEAR_FIXED;
- cmdParams.record = pbrRecordNo;
+// -----------------------------------------------------------------------------
+// CMmPhoneBookOperationRead3g_adn::UiccReadEfPbrRecordResp
+// Handles response for EFpbr record reading
+// -----------------------------------------------------------------------------
+//
+TInt CMmPhoneBookOperationRead3g_adn::UiccReadEfPbrRecordResp(
+ TInt aStatus,
+ const TDesC8 &aFileData,
+ TInt aTraId )
+ {
+TFLOGSTRING("TSY: CMmPhoneBookOperationRead3g_adn::UiccReadEfPbrRecordResp");
+OstTrace0( TRACE_NORMAL, CMMPHONEBOOKOPERATIONREAD3G_ADN_UICCREADEFPBRRECORDRESP, "CMmPhoneBookOperationRead3g_adn::UiccReadEfPbrRecordResp" );
+
+ TInt ret( KErrArgument );
+ if( UICC_STATUS_OK == aStatus )
+ {
+ ret = FetchFileListFromPBR(
+ aFileData,
+ KTagConstructedTagA8,
+ iType1FileArray );
+ ret = FetchFileListFromPBR(
+ aFileData,
+ KTagConstructedTagA9,
+ iType2FileArray );
+ ret = FetchFileListFromPBR(
+ aFileData,
+ KTagConstructedTagAA,
+ iType3FileArray );
+
+ ret = StartReadingEntry( aTraId );
}
else
{
- cmdParams.fileId = aFileId;
- cmdParams.serviceType = UICC_APPL_READ_LINEAR_FIXED;
- cmdParams.record = index;
- cmdParams.fileIdSfi = aFileSFI;
+TFLOGSTRING2("TSY: CMmPhoneBookOperationWrite3g_adn::UiccReadEfPbrRecordResp: file reading fails: 0x%x", aStatus );
+OstTrace1( TRACE_NORMAL, DUP1_CMMPHONEBOOKOPERATIONREAD3G_ADN_UICCREADEFPBRRECORDRESP, "CMmPhoneBookOperationRead3g_adn::UiccReadEfPbrRecordResp;file reading fails: =%d", aStatus );
+
+ iNumOfEntriesToRead = 0;
}
return ret;
}
@@ -187,51 +594,901 @@
// -----------------------------------------------------------------------------
-// CMmPhoneBookOperationRead3g_adn::HandleUICC3gADNRespL
-// HAndles Response for ADN phoneBook
+// CMmPhoneBookOperationRead3g_adn::UiccReadEfType1RespL
+// Handles response for Type1 File Array record reading
// -----------------------------------------------------------------------------
//
-TInt CMmPhoneBookOperationRead3g_adn::HandleUICC3gADNRespL
- (
- const TInt aStatus,
- const TDes8 &/*aFileData*/,
- const TInt /*aTransId*/
- )
+TInt CMmPhoneBookOperationRead3g_adn::UiccReadEfType1RespL(
+ TInt aStatus,
+ TInt aTraId,
+ const TDesC8 &aFileData )
{
+TFLOGSTRING("TSY: CMmPhoneBookOperationRead3g_adn::UiccReadEfType1RespL");
+OstTrace0( TRACE_NORMAL, CMMPHONEBOOKOPERATIONREAD3G_ADN_UICCREADEFTYPE1RESPL, "CMmPhoneBookOperationRead3g_adn::UiccReadEfType1RespL" );
- TFLOGSTRING("TSY: CMmPhoneBookOperationRead3g_adn::HandleUICC3gADNRespL");
- OstTrace0( TRACE_NORMAL, DUP1_CMMPHONEBOOKOPERATIONREAD3G_ADN_UICCHANDLEDATA3GADNREADREQ, "CMmPhoneBookOperationRead3g_adn::UICCHandleData3gADNReadReq" );
+ TInt ret ( KErrNone );
+
+ CPhoneBookStoreEntry* phoneBookStoreEntry( NULL );
+ TBool entryAllocatedNow( EFalse ); // Cache entry allocated now or earlier
+ TBool entryStored( EFalse ); // Is entry data stored in cache
+ TBool notEmptyEntry( ETrue ); // If Entryis Empty
+
+ if( UICC_STATUS_OK == aStatus )
+ {
+ CreateInternalPbEntryL( iIndexToRead );
+ }
+
+ notEmptyEntry = CheckForEmptyEntry( iType1FileArray[iCurrentType1Ef].tagValue,
+ aFileData );
+ if( notEmptyEntry )
+ {
+ phoneBookStoreEntry = CreateReadPbEntryL(
+ iIndexToRead,
+ entryAllocatedNow );
+ }
+
+ if( UICC_STATUS_OK == aStatus )
+ {
+ switch( iType1FileArray[iCurrentType1Ef].tagValue )
+ {
+ case UICC_EF_ADN_TAG:
+ {
+ // Get name and number
+ iMmPhoneBookStoreMessHandler->iPBStoreConf[EPhonebookTypeAdn].
+ GetPBEntryFromUICCData( aFileData, iNumberBuf, iNameBuf );
+
+ // Check if there is Any Ext records
+ TInt index( iMmPhoneBookStoreMessHandler->
+ iPBStoreConf[EPhonebookTypeAdn].iAlphaStringlength
+ + KAdnMandatoryBytes );
+
+ TInt extFileTagIndex( KErrNotFound );
+ iType2OperationOngoing = EFalse;
+ ret = CheckForExtToContinueNextRead(
+ index,
+ aFileData,
+ aTraId,
+ extFileTagIndex );
+
+ if( KErrNotFound == extFileTagIndex )
+ {
+ entryStored = ETrue;
+ iCurrentType1Ef++;
+
+ ret = ContinueWithNextReading( aTraId );
+ } // no else
+
+ if ( entryStored && notEmptyEntry ) // No extension record, store entry
+ {
+ iMmPhoneBookStoreMessHandler->StorePhonebookEntryL(
+ iNameBuf,
+ iNumberBuf,
+ *phoneBookStoreEntry,
+ PB_ADN_FID,
+ iIndexToRead );
+
+ // Set status in internal list
+ iStoreEntry->iEntryPresent = ETrue;
+ iNumberBuf.Zero(); // Reset buffers for next time
+ iNameBuf.Zero();
+ }
+ break;
+ }
+ case UICC_EF_ANR_TAG:
+ {
+ if ( aFileData.Length() && KMinLengthEfAnr <= aFileData.Length() )
+ {
+ // Get and save ANR
+ TInt numLength( aFileData[KAnrOffsetNumLength] );
+ iNumberBuf.Copy( aFileData.Mid( KAnrOffsetNumber, numLength ) );
+ }
+
+ TInt extFileTagIndex( KErrNotFound );
+ iType2OperationOngoing = EFalse;
+ ret = CheckForExtToContinueNextRead(
+ KAnrExtRecIdOffset,
+ aFileData,
+ aTraId,
+ extFileTagIndex );
+
+ if( KErrNotFound == extFileTagIndex )
+ {
+ entryStored = ETrue;
+ iCurrentType1Ef++;
+ ret = ContinueWithNextReading( aTraId );
+ } // no else
+
+
+ if( entryStored && notEmptyEntry )
+ {
+ iMmPhoneBookStoreMessHandler->StoreAnrToPhonebookEntryL(
+ iNumberBuf,
+ *phoneBookStoreEntry,
+ PB_ADN_FID ); // Coding is same as in ADN
+
+ // Set status in internal list
+ iStoreEntry->iEntryPresent = ETrue;
+
+ // Reset buffer for next time
+ iNumberBuf.Zero();
+ } // NO ELSE
+ break;
+ }
+ case UICC_EF_EMAIL_TAG:
+ case UICC_EF_SNE_TAG:
+ {
+ // In type 1 file, EF SNE contains only alpha string
+ iNameBuf.Copy( aFileData );
+ if( notEmptyEntry )
+ {
+ iMmPhoneBookStoreMessHandler->StoreSneEmailToPbEntryL(
+ iNameBuf,
+ *phoneBookStoreEntry,
+ iType1FileArray[iCurrentType1Ef].tagValue );
+ // Set status in internal list
+ iStoreEntry->iEntryPresent = ETrue;
+ }
+
+ // reset name buffer to reuse next time
+ iNameBuf.Zero();
+
+ iCurrentType1Ef++;
+ ret = ContinueWithNextReading( aTraId );
+ break;
+ }
+ case UICC_EF_IAP_TAG:
+ {
+ if( ( aFileData.Length() == iType2FileArray.Count() ) &&
+ ( notEmptyEntry ) )
+ {
+ for ( TInt i( 0 ); i < aFileData.Length() ; i++ )
+ {
+ TIapInfo iapinfo;
+ iapinfo.recordNo = aFileData[i];
+ iapinfo.fileTag = iType2FileArray[i].tagValue;
+ iapinfo.fileSfi = iType2FileArray[i].tagSFI;
+ iapinfo.fileId = iType2FileArray[i].tagFID;
+
+ iStoreEntry->iapInfo.Append( iapinfo );
+ }
+ } // no else
+
+ iCurrentType1Ef++;
+ ret = ContinueWithNextReading( aTraId );
+ break;
+ }
+ default:
+ {
+TFLOGSTRING("TSY: CMmPhoneBookOperationRead3g_adn::UiccReadEfType1RespL - default branch ");
+OstTrace0( TRACE_NORMAL, DUP1_CMMPHONEBOOKOPERATIONREAD3G_ADN_UICCREADEFTYPE1RESPL, "CMmPhoneBookOperationRead3g_adn::UiccReadEfType1RespL - default branch" );
+
+ break;
+ }
+ }
+ }
+ else
+ {
+ // ADN Read failed for some reason so complete the
+ // operation with error value
+TFLOGSTRING("TSY: CMmPhoneBookOperationWrite3g_adn::UiccReadEfType1RespL - Type1 File Read failed ");
+OstTrace0( TRACE_NORMAL, DUP2_CMMPHONEBOOKOPERATIONREAD3G_ADN_UICCREADEFTYPE1RESPL, "CMmPhoneBookOperationRead3g_adn::UiccReadEfType1RespL - Type1 file read failed" );
+
+ iCurrentReadPhase = EPB_3G_ADN_Read_Phase_complete;
+ ret = KErrArgument;
+ }
+
+
+ if ( entryAllocatedNow )
+ {
+ TF_ASSERT( NULL != iPhoneBookStoreCacheArray );
+ iPhoneBookStoreCacheArray->AppendL( phoneBookStoreEntry );
+ CleanupStack::Pop( phoneBookStoreEntry );
+ iNumOfEntriesFilled++;
+ } // No else
+
+ return ret;
+ }
+
- TInt ret(KErrNone);
- // Initialize Application file ID to send in next request
+// -----------------------------------------------------------------------------
+// CMmPhoneBookOperationRead3g_adn::UiccReadEfType2RespL
+// Handles response for Type2 File Array record reading
+// -----------------------------------------------------------------------------
+//
+TInt CMmPhoneBookOperationRead3g_adn::UiccReadEfType2RespL(
+ TInt aStatus,
+ TInt aTraId,
+ const TDesC8 &aFileData )
+ {
+TFLOGSTRING("TSY: CMmPhoneBookOperationRead3g_adn::UiccReadEfType2RespL");
+OstTrace0( TRACE_NORMAL, CMMPHONEBOOKOPERATIONREAD3G_ADN_UICCREADEFTYPE2RESPL, "CMmPhoneBookOperationRead3g_adn::UiccReadEfType2RespL" );
+
+ TInt ret ( KErrNone );
+
+ CPhoneBookStoreEntry* phoneBookStoreEntry( NULL );
+ TBool entryAllocatedNow( EFalse ); // Cache entry allocated now or earlier
+ TBool entryStored( EFalse ); // Is entry data stored in cache
+ TBool notEmptyEntry( ETrue ); // Entry is Empty
+
+ if( UICC_STATUS_OK == aStatus )
+ {
+ CreateInternalPbEntryL( iIndexToRead );
+ }
+
+ notEmptyEntry = CheckForEmptyEntry( iType2FileArray[iCurrentType2Ef].tagValue,
+ aFileData );
+ if( notEmptyEntry )
+ {
+ phoneBookStoreEntry = CreateReadPbEntryL(
+ iIndexToRead,
+ entryAllocatedNow );
+ }
+
+ if( UICC_STATUS_OK == aStatus )
+ {
+ // Check for Filetag
+ switch( iType2FileArray[iCurrentType2Ef].tagValue )
+ {
+ case UICC_EF_ANR_TAG:
+ {
+ if ( aFileData.Length() && KMinLengthEfAnr <= aFileData.Length() )
+ {
+ // Get and save ANR
+ TInt numLength( aFileData[KAnrOffsetNumLength] );
+ iNumberBuf.Copy( aFileData.Mid( KAnrOffsetNumber, numLength ) );
+ }
- // Handle possible error case
- if ( UICC_STATUS_OK != aStatus )
- {
- TFLOGSTRING("TSY: CMmPhoneBookOperationRead::HandleUICCPbRespRead-\
- Unsuccessfully completed by SIMSON");
-//OstTrace0( TRACE_NORMAL, DUP1_CMMPHONEBOOKOPERATIONREAD_HANDLEUICCPBRESPL, "CMmPhoneBookOperationRead::HandleUICCPbRespL, Unsuccessfully completed by UICC Server" );
- ret = CMmStaticUtility::UICCCSCauseToEpocError(aStatus );
- }
+ TInt extFileTagIndex( KErrNotFound );
+ // Check if there is Any Ext records
+ iType2OperationOngoing = ETrue;
+ ret = CheckForExtToContinueNextRead(
+ KAnrExtRecIdOffset,
+ aFileData,
+ aTraId,
+ extFileTagIndex );
+
+ if( KErrNotFound == extFileTagIndex )
+ {
+ entryStored = ETrue;
+ iCurrentType2Ef++;
+ ret = CheckForNextType2Read( aTraId );
+ } // no else
+
+ if( entryStored && notEmptyEntry )
+ {
+ iMmPhoneBookStoreMessHandler->StoreAnrToPhonebookEntryL(
+ iNumberBuf,
+ *phoneBookStoreEntry,
+ PB_ADN_FID ); // Coding is same as in ADN
+
+ // Set status in internal list
+ iStoreEntry->iEntryPresent = ETrue;
+ // Reset buffer for next time
+ iNumberBuf.Zero();
+ }
+ break;
+ }
+ case UICC_EF_EMAIL_TAG:
+ case UICC_EF_SNE_TAG:
+ {
+ // In type 1 file, EF SNE contains only alpha string
+ iNameBuf.Copy( aFileData );
+ if( notEmptyEntry )
+ {
+ iMmPhoneBookStoreMessHandler->StoreSneEmailToPbEntryL(
+ iNameBuf,
+ *phoneBookStoreEntry,
+ iType2FileArray[iCurrentType2Ef].tagValue );
+ // Set status in internal list
+ iStoreEntry->iEntryPresent = ETrue;
+ }
+
+ // Reset name buffe rto recuse next time
+ iNameBuf.Zero();
+
+ iCurrentType2Ef++;
+ ret = CheckForNextType2Read( aTraId );
+ break;
+ }
+ default:
+ {
+TFLOGSTRING("TSY: CMmPhoneBookOperationRead3g_adn::UiccReadEfType2RespL - default branch");
+OstTrace0( TRACE_NORMAL, DUP1_CMMPHONEBOOKOPERATIONREAD3G_ADN_UICCREADEFTYPE2RESPL, "CMmPhoneBookOperationRead3g_adn::UiccReadEfType2RespL - default branch" );
+ break;
+ }
+ }
+ }
+ else
+ {
+TFLOGSTRING("TSY: CMmPhoneBookOperationRead3g_adn::UiccReadEfType2RespL - Type2 File Read Failed");
+OstTrace0( TRACE_NORMAL, DUP2_CMMPHONEBOOKOPERATIONREAD3G_ADN_UICCREADEFTYPE2RESPL, "CMmPhoneBookOperationRead3g_adn::UiccReadEfType2RespL - Type2 file read failed" );
+
+ iCurrentReadPhase = EPB_3G_ADN_Read_Phase_complete;
+ ret = KErrArgument;
+ }
+
+ if ( entryAllocatedNow )
+ {
+ TF_ASSERT( NULL != iPhoneBookStoreCacheArray );
+ iPhoneBookStoreCacheArray->AppendL( phoneBookStoreEntry );
+ CleanupStack::Pop( phoneBookStoreEntry );
+ iNumOfEntriesFilled++;
+ } // No else
+
+ return ret;
+ }
- if(UICC_STATUS_OK == aStatus)
- {
+// -----------------------------------------------------------------------------
+// CMmPhoneBookOperationRead3g_adn::UiccReadEfType3RespL
+// Handles response for Type3 File Array record reading
+// -----------------------------------------------------------------------------
+//
+TInt CMmPhoneBookOperationRead3g_adn::UiccReadEfType3RespL(
+ TInt aStatus,
+ TInt aTraId,
+ TUint8 aFileTag,
+ const TDesC8 &aFileData )
+ {
+TFLOGSTRING("TSY: CMmPhoneBookOperationRead3g_adn::UiccReadEfType2RespL");
+OstTrace0( TRACE_NORMAL, CMMPHONEBOOKOPERATIONREAD3G_ADN_UICCREADEFTYPE3RESPL, "CMmPhoneBookOperationRead3g_adn::UiccReadEfType3RespL" );
+
+ TInt ret ( KErrNone );
+
+ CPhoneBookStoreEntry* phoneBookStoreEntry( NULL );
+ TBool entryAllocatedNow( EFalse ); // Cache entry allocated now or earlier
+
+ if( UICC_STATUS_OK == aStatus )
+ {
+ CreateInternalPbEntryL( iIndexToRead );
+ phoneBookStoreEntry = CreateReadPbEntryL(
+ iIndexToRead,
+ entryAllocatedNow );
+ }
+
+
+ if( UICC_STATUS_OK == aStatus )
+ {
+ // Store number , if Data length valid and Data type is Additional Data Type
+ if( ( KExtRecordSize == aFileData.Length() ) &&
+ ( KAdditionalNoType == aFileData[0] ) )
+ {
+ // Check if EXT Data Furthe has any ext records
+ if( KTagUnusedbyte != aFileData[UICC_EXT_REC_NO_OFFSET] )
+ {
+ // Store Number upto last byte
+ iNumberBuf.Append(aFileData.Mid(1,UICC_EF_EXT_REC_NUM_LEN));
+
+ // read that Entry
+ TInt index (SearchForFileTagIndex(
+ UICC_EF_EXT1_TAG,
+ iType3FileArray,
+ 0 ) );
+
+ ret = UiccReadEfRecordReq(
+ aTraId,
+ iType3FileArray[index].tagFID,
+ iType3FileArray[index].tagSFI,
+ aFileData[UICC_EXT_REC_NO_OFFSET] );
+ }
+ else
+ {
+ // Check for length upto which no is stored
+ TInt offset = aFileData.Find( &KTagUnusedbyte,1 );
+ // store Data
+ iNumberBuf.Append(aFileData.Mid(1,( offset - 1 )));
- // Case: <complete request>
- if ( KErrNone != ret || 0 == iNumOfEntriesToRead )
+ // Save to cache
+ if ( UICC_ADN_PRIM_TAG == aFileTag )
+ {
+ iMmPhoneBookStoreMessHandler->StorePhonebookEntryL(
+ iNameBuf,
+ iNumberBuf,
+ *phoneBookStoreEntry,
+ PB_ADN_FID,
+ iIndexToRead );
+
+ // Reset Number and name buffer to reuse next time
+ iNumberBuf.Zero(); // Reset buffers for next time
+ iNameBuf.Zero();
+ }
+ else if ( UICC_ANR_PRIM_TAG == aFileTag )
+ {
+ iMmPhoneBookStoreMessHandler->StoreAnrToPhonebookEntryL(
+ iNumberBuf,
+ *phoneBookStoreEntry,
+ PB_ADN_FID ); // Same coding as in ADN
+
+ // Reset number buffer to reuse next time
+ iNumberBuf.Zero();
+ }
+
+ if( iType2OperationOngoing )
+ {
+ iCurrentType2Ef++;
+ // Continue with Type2 File operations
+ ret = CheckForNextType2Read( aTraId );
+ }
+ else
+ {
+ iCurrentType1Ef++;
+ // Continue with next read phase
+ ret = ContinueWithNextReading( aTraId );
+ }
+ }
+ } // no else
+ }
+ else
+ {
+ // EXT Reading fails for some reason complete the operation with
+ // error value
+TFLOGSTRING("TSY: CMmPhoneBookOperationRead3g_adn::UiccReadEfType3RespL - EXT Read fail");
+OstTrace0( TRACE_NORMAL, DUP1_CMMPHONEBOOKOPERATIONREAD3G_ADN_UICCREADEFTYPE3RESPL, "CMmPhoneBookOperationRead3g_adn::UiccReadEfType3RespL - EXT Read fail" );
+
+ iCurrentReadPhase = EPB_3G_ADN_Read_Phase_complete;
+ ret = KErrArgument;
+ }
+
+ if ( entryAllocatedNow )
+ {
+ TF_ASSERT( NULL != iPhoneBookStoreCacheArray );
+ iPhoneBookStoreCacheArray->AppendL( phoneBookStoreEntry );
+ CleanupStack::Pop( phoneBookStoreEntry );
+ iNumOfEntriesFilled++;
+ } // No else
+
+
+ return ret;
+ }
+
+
+
+// -----------------------------------------------------------------------------
+// CMmPhoneBookOperationReadg_adn::GetNextType1File
+// Get next Type1 valid FileId to be read
+// -----------------------------------------------------------------------------
+//
+TInt CMmPhoneBookOperationRead3g_adn::GetNextType1File()
+ {
+TFLOGSTRING( "TSY: CMmPhoneBookOperationRead3g_adn::GetNextType1File" );
+OstTrace0( TRACE_NORMAL, CMMPHONEBOOKOPERATIONREAD3G_ADN_GETNEXTTYPE1FILE, "CMmPhoneBookOperationRead3g_adn::GetNextType1File" );
+
+ TInt ret ( KErrNotFound );
+
+ for(; iCurrentType1Ef < iType1FileArray.Count(); )
+ {
+ if( ( iType1FileArray[iCurrentType1Ef].tagValue == UICC_EF_PBC_TAG ) ||
+ ( iType1FileArray[iCurrentType1Ef].tagValue == UICC_EF_UID_TAG )||
+ ( iType1FileArray[iCurrentType1Ef].tagValue == UICC_EF_GRP_TAG ) )
{
- // If no entries found
- if ( 0 == iNumOfEntriesFilled )
- {
- ret = KErrNotFound;
- }
+ iCurrentType1Ef++;
+ }
+ else
+ {
+ ret = KErrNone;
+ break;
+ }
+ }
+ return ret ;
+ }
+
- }
- }
+// -----------------------------------------------------------------------------
+// CMmPhoneBookOperationRead3g_adn::CheckForExtToContinueNextRead(
+// Start Delete Operation for present Entry
+// -----------------------------------------------------------------------------
+//
+TInt CMmPhoneBookOperationRead3g_adn::CheckForExtToContinueNextRead(
+ TUint8 aIndex,
+ const TDesC8 &aFileData,
+ TInt aTraId,
+ TInt &aExtFileTagIndex )
+ {
+TFLOGSTRING( "TSY: CMmPhoneBookOperationRead3g_adn::CheckForExtToContinueNextRead" );
+OstTrace0( TRACE_NORMAL, CMMPHONEBOOKOPERATIONREAD3G_ADN_CHECKFOREXTTOCONTINUENEXTREAD, "CMmPhoneBookOperationRead3g_adn::CheckForExtToContinueNextRead" );
+
+ TInt ret ( KErrNone );
+
+ if( KTagUnusedbyte != aFileData[aIndex] )
+ {
+ // Start reading Ext1 FileData
+ iStoreEntry->PBEntryExtRecord.Append( aFileData[aIndex] );
+
+ // Search For Ext1 File tag in iType3FileArray
+ aExtFileTagIndex = SearchForFileTagIndex(
+ UICC_EF_EXT1_TAG,
+ iType3FileArray,
+ 0 ) ;
+
+ if( KErrNotFound != aExtFileTagIndex )
+ {
+ iCurrentReadPhase = EPBReadPhase_Read_type3_Entry;
+ // Send request to read Ext
+ ret = UiccReadEfRecordReq(
+ aTraId,
+ iType3FileArray[aExtFileTagIndex].tagFID,
+ iType3FileArray[aExtFileTagIndex].tagSFI,
+ aFileData[aIndex] );
+ } // no else
+ } // no else
return ret;
}
+// -----------------------------------------------------------------------------
+// CMmPhoneBookOperationRead3g_adn::ContinueWithNextReading(
+// Start Delete Operation for present Entry
+// -----------------------------------------------------------------------------
+//
+TInt CMmPhoneBookOperationRead3g_adn::ContinueWithNextReading( TUint8 aTraId )
+ {
+TFLOGSTRING( "TSY: CMmPhoneBookOperationRead3g_adn::ContinueWithNextReading" );
+OstTrace0( TRACE_NORMAL, CMMPHONEBOOKOPERATIONREAD3G_ADN_CONTINUEWITHNEXTREADING, "CMmPhoneBookOperationRead3g_adn::ContinueWithNextReading" );
+
+ TInt ret( KErrNone );
+ if( KErrNone == GetNextType1File() )
+ {
+ iType2OperationOngoing = EFalse;
+ iCurrentReadPhase = EPBReadPhase_Read_Type1_Entry;
+ ret = UiccReadEfRecordReq(
+ aTraId,
+ iType1FileArray[iCurrentType1Ef].tagFID,
+ iType1FileArray[iCurrentType1Ef].tagSFI,
+ iCurrentEfEntryIndex );
+ }
+ else
+ {
+ iCurrentType2Ef = 0;
+ // Check if there is any type 2 File Data present
+ if( ( iCurrentType2Ef < iType2FileArray.Count() ) &&
+ ( KErrNotFound != GetNextUsedType2FileRecord( iCurrentType2Ef ) ) )
+ {
+ iType2OperationOngoing = ETrue;
+ // Start reading Type2Files
+ // Continue with next Type 2 File reading
+ iCurrentReadPhase = EPBReadPhase_Read_Type2_Entry;
+ ret = UiccReadEfRecordReq(
+ aTraId,
+ iType2FileArray[iCurrentType2Ef].tagFID,
+ iType2FileArray[iCurrentType2Ef].tagSFI,
+ iStoreEntry->iapInfo[iCurrentType2Ef].recordNo );
+ }
+ else
+ {
+ if( !iLocationSearch )
+ {
+ iNumOfEntriesToRead--;
+ }
+
+ iCurrentReadPhase = EPB_3G_ADN_Read_Phase_complete;
+ }
+ }
+ return ret;
+ }
+
+
+
+// -----------------------------------------------------------------------------
+// CMmPhoneBookOperationRead3g_adn::StartReadingEntry
+// STart reading Entry
+// -----------------------------------------------------------------------------
+//
+TInt CMmPhoneBookOperationRead3g_adn::StartReadingEntry( TUint8 aTransId )
+ {
+ TFLOGSTRING( "TSY: CMmPhoneBookOperationRead3g_adn::StartReadingEntry" );
+ OstTrace0( TRACE_NORMAL, CMMPHONEBOOKOPERATIONREAD3G_ADN_STARTREADINGENTRY, "CMmPhoneBookOperationRead3g_adn::StartReadingEntry" );
+
+ TInt ret( KErrNone );
+
+ // Check if index is valid index or Entry to Written on first free entry
+ if( iIndexToRead <= iMmPhoneBookStoreMessHandler->
+ iPBStoreConf[EPhonebookTypeAdn].iNoOfRecords )
+ {
+ iType2OperationOngoing = EFalse;
+ // Start reading The present Entry
+ iCurrentReadPhase = EPBReadPhase_Read_Type1_Entry;
+ iCurrentType1Ef = 0;
+
+ if( 0 < iIndexToRead )
+ {
+ ret = iMmPhoneBookStoreMessHandler->GetCurrentEfRecNum(
+ iCurrentPBRRecordNo,
+ iCurrentEfEntryIndex,
+ iIndexToRead );
+
+ if( ( KErrNone == GetNextType1File() ) &&
+ ( KErrNone == ret ) )
+ {
+ ret = UiccReadEfRecordReq(
+ aTransId,
+ iType1FileArray[iCurrentType1Ef].tagFID,
+ iType1FileArray[iCurrentType1Ef].tagSFI,
+ iCurrentEfEntryIndex );
+ } // no else
+ }
+ else
+ {
+ iLocationSearch = ETrue;
+ // Read First Entry
+ iIndexToRead = 1;
+ iCurrentEfEntryIndex = 1;
+
+ if( KErrNone == GetNextType1File() )
+ {
+ ret = UiccReadEfRecordReq(
+ aTransId,
+ iType1FileArray[iCurrentType1Ef].tagFID,
+ iType1FileArray[iCurrentType1Ef].tagSFI,
+ iCurrentEfEntryIndex );
+ } // no else
+ }
+ }
+
+ return ret;
+ }
+
+
+
+// -----------------------------------------------------------------------------
+// CMmPhoneBookOperationCache3G_adn::CreateInternalPbEntryL
+//
+// -----------------------------------------------------------------------------
+//
+void CMmPhoneBookOperationRead3g_adn::CreateInternalPbEntryL(
+ const TInt aLocation )
+ {
+TFLOGSTRING( "TSY: CMmPhoneBookOperationRead3G_adn::CreateInternalPbEntryL" );
+OstTrace0( TRACE_NORMAL, CMMPHONEBOOKOPERATIONREAD3G_ADN_CREATEINTERNALPBENTRYL, "CMmPhoneBookOperationRead3g_adn::CreateInternalPbEntryL" );
+
+ // Check if this entry was already stored in internal list
+ iStoreEntry = iMmPhoneBookStoreMessHandler->FindEntryFromPbList(
+ EPhonebookTypeAdn,
+ aLocation );
+ if( ! iStoreEntry )
+ {
+ // Add new entry to internal list
+ iStoreEntry = new ( ELeave ) TPBEntry();
+ iStoreEntry->iEntryIndex = iIndexToRead;
+ // Not present by default. if some data for this record is found,
+ // it is set as present
+ iStoreEntry->iEntryPresent = EFalse;
+ iMmPhoneBookStoreMessHandler->StoreEntryToPhoneBookList(
+ iStoreEntry,
+ EPhonebookTypeAdn );
+ } // No else
+ }
+
+
+// -----------------------------------------------------------------------------
+// CMmPhoneBookOperationCache3G_adn::CreateReadPbEntryL
+//
+// -----------------------------------------------------------------------------
+//
+CPhoneBookStoreEntry* CMmPhoneBookOperationRead3g_adn::CreateReadPbEntryL(
+ const TInt aLocation, TBool& aAllocatedNow )
+ {
+TFLOGSTRING( "TSY: CMmPhoneBookOperationRead3g_adn::CreateReadPbEntryL" );
+OstTrace0( TRACE_NORMAL, CMMPHONEBOOKOPERATIONREAD3G_ADN_CREATEREADPBENTRYL, "CMmPhoneBookOperationRead3g_adn::CreateReadPbEntryL" );
+
+ aAllocatedNow = ETrue;
+ CPhoneBookStoreEntry* phoneBookStoreEntry( NULL );
+ // Check is there already created CPhoneBookStoreEntry in
+ // iPhoneBookStoreCacheArray.
+ for ( TInt i ( 0 ); i < iPhoneBookStoreCacheArray->Count(); i++ )
+ {
+ phoneBookStoreEntry = iPhoneBookStoreCacheArray->At( i );
+ if ( phoneBookStoreEntry &&
+ ( phoneBookStoreEntry->iLocation == aLocation ) )
+ {
+ aAllocatedNow = EFalse;
+ break;
+ }
+ // No else
+ }
+
+ if ( aAllocatedNow ) // Need to create a new entry
+ {
+ phoneBookStoreEntry = new( ELeave ) CPhoneBookStoreEntry;
+ CleanupStack::PushL( phoneBookStoreEntry );
+ phoneBookStoreEntry->ConstructL();
+ phoneBookStoreEntry->iLocation = aLocation;
+ }
+ // No else
+
+ return phoneBookStoreEntry;
+ }
+
+// -----------------------------------------------------------------------------
+// CMmPhoneBookOperationRead3g_adn::SearchForFileTagIndex
+// Get the index for ADN file Tag
+// -----------------------------------------------------------------------------
+//
+TInt CMmPhoneBookOperationRead3g_adn::SearchForFileTagIndex(
+ TUint8 aFileTag,
+ RArray <TPrimitiveTag>& aFileList,
+ TUint8 aOffset )
+ {
+TFLOGSTRING( "TSY: CMmPhoneBookOperationRead3g_adn::SearchForFileTagIndex" );
+OstTrace0( TRACE_NORMAL, CMMPHONEBOOKOPERATIONREAD3G_ADN_SEARCHFORFILETAGINDEX, "CMmPhoneBookOperationRead3g_adn::SearchForFileTagIndex" );
+
+ TInt index( KErrNotFound );
+ for( TInt count(0); count<aFileList.Count(); count++ )
+ {
+ if( ( aFileTag == aFileList[count].tagValue ) &&
+ ( aOffset <= count ) )
+ {
+ index = count;
+ break;
+ } // no else
+ }
+ return( index );
+ }
+
+
+
+// -----------------------------------------------------------------------------
+// CMmPhoneBookOperationRead3g_adn::CheckForNextType2Read(
+// Check for next Type 1 Read
+// -----------------------------------------------------------------------------
+//
+TInt CMmPhoneBookOperationRead3g_adn::CheckForNextType2Read( TInt aTraId )
+ {
+TFLOGSTRING( "TSY: CMmPhoneBookOperationRead3g_adn::CheckForNextType2Read" );
+OstTrace0( TRACE_NORMAL, CMMPHONEBOOKOPERATIONREAD3G_ADN_CHECKFORNEXTTYPE2READ, "CMmPhoneBookOperationRead3g_adn::CheckForNextType2Read" );
+
+ TInt ret ( KErrNone );
+ // Check if there is any type 2 File Data present
+ if( ( iCurrentType2Ef < iType2FileArray.Count() ) &&
+ ( KErrNotFound != GetNextUsedType2FileRecord( iCurrentType2Ef ) ) )
+ {
+ iType2OperationOngoing = ETrue;
+ // Start reading Type2Files
+ // Continue with next Type 2 File reading
+ iCurrentReadPhase = EPBReadPhase_Read_Type2_Entry;
+ ret = UiccReadEfRecordReq(
+ aTraId,
+ iType2FileArray[iCurrentType2Ef].tagFID,
+ iType2FileArray[iCurrentType2Ef].tagSFI,
+ iStoreEntry->iapInfo[iCurrentType2Ef].recordNo );
+ }
+ else
+ {
+ if( !iLocationSearch )
+ {
+ iNumOfEntriesToRead--;
+ }
+
+ iCurrentReadPhase = EPB_3G_ADN_Read_Phase_complete;
+ }
+ return ret;
+ }
+
+
+
+// -----------------------------------------------------------------------------
+// CMmPhoneBookOperationRead3g_adn::GetNextUsedType2FileRecord
+// Start Delete Operation for present Entry
+// -----------------------------------------------------------------------------
+//
+TInt CMmPhoneBookOperationRead3g_adn::GetNextUsedType2FileRecord( TInt &aOffset )
+ {
+TFLOGSTRING( "TSY: CMmPhoneBookOperationRead3g_adn::GetNextUsedType2FileRecord" );
+OstTrace0( TRACE_NORMAL, CMMPHONEBOOKOPERATIONREAD3G_ADN_GETNEXTUSEDTYPE2FILERECORD, "CMmPhoneBookOperationRead3g_adn::GetNextUsedType2FileRecord" );
+
+ TInt index( KErrNotFound );
+ if( iStoreEntry->iapInfo.Count() == iType2FileArray.Count() )
+ {
+ for( TInt count( aOffset ); count < iType2FileArray.Count(); count++ )
+ {
+ if( KTagUnusedbyte != iStoreEntry->iapInfo[count].recordNo )
+ {
+ aOffset = count;
+ index = KErrNone;
+ break;
+ } // no else
+ }
+ }
+ return index;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CMmPhoneBookOperationRead3G_adn::UiccGetSearchPattern
+// resolves P2 and search data for command SEARCH RECORD depending on file type
+// -----------------------------------------------------------------------------
+//
+TBool CMmPhoneBookOperationRead3g_adn::CheckForEmptyEntry(
+ const TUint8 aFileType,
+ const TDesC8 &aFileData )
+ {
+TFLOGSTRING( "TSY: CMmPhoneBookOperationRead3g_adn::CheckForEmptyEntry" );
+OstTrace0( TRACE_NORMAL, CMMPHONEBOOKOPERATIONREAD3G_ADN_CHECKFOREMPTYENTRY, "CMmPhoneBookOperationRead3g_adn::CheckForEmptyEntry" );
+
+ TBool notEmpty( ETrue );
+ TBuf8<KMaxEmptyPatternBuf> emptyData;
+ GetEmptyRecordPattern( aFileType,
+ emptyData );
+ for( TInt count(0); count < emptyData.Length(); count++ )
+ {
+ if( aFileData[count] == emptyData[count] )
+ {
+ notEmpty = EFalse;
+ break;
+ }
+ }
+ return notEmpty;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CMmPhoneBookOperationRead3G_adn::UiccGetSearchPattern
+// resolves P2 and search data for command SEARCH RECORD depending on file type
+// -----------------------------------------------------------------------------
+//
+void CMmPhoneBookOperationRead3g_adn::GetEmptyRecordPattern(
+ const TUint8 aFileType,
+ TDes8& aEmptyPattern )
+ {
+TFLOGSTRING( "TSY: CMmPhoneBookOperationRead3g_adn::GetEmptyRecordPattern" );
+OstTrace0( TRACE_NORMAL, CMMPHONEBOOKOPERATIONREAD3G_ADN_GETEMPTYRECORDPATTERN, "CMmPhoneBookOperationRead3G_adn::GetEmptyRecordPattern" );
+
+ switch( aFileType )
+ {
+ case UICC_ADN_PRIM_TAG:
+ {
+ TInt alphaStringLength( iMmPhoneBookStoreMessHandler->
+ iPBStoreConf[EPhonebookTypeAdn].iAlphaStringlength );
+ // If aplha string field is included in entry, search pattern is
+ // all alpa bytes 'FF' and number length 0 and TON&NPI 'FF'
+ if ( alphaStringLength )
+ {
+ aEmptyPattern.AppendFill( KTagUnusedbyte, alphaStringLength );
+ aEmptyPattern.Append( 0x00 ); // Search for number length zero
+ aEmptyPattern.Append( KTagUnusedbyte ); // and TON&NPI 'FF'
+ }
+ // Alpha string does not exists, search pattern is for empty number
+ else
+ {
+ aEmptyPattern.Append( 0x00 ); // Search for number length zero
+ aEmptyPattern.Append( KTagUnusedbyte ); // and TON&NPI FF
+ }
+ break;
+ }
+ case UICC_IAP_PRIM_TAG:
+ {
+ // Number of bytes in EFiap is same as file amount
+ // in EFpbr list with tag "A9". In other words, count
+ // of type 2 files
+ for( TInt i( 0 ); i < iType2FileArray.Count(); i++ )
+ {
+ aEmptyPattern.Append( 0x00 );
+ }
+ break;
+ }
+ case UICC_ANR_PRIM_TAG:
+ {
+ aEmptyPattern.Append( KTagUnusedbyte ); // Check for AAS record there is none
+ aEmptyPattern.Append( 0x00 ); // For SSC/ BCD Number Length 0
+ aEmptyPattern.Append( KTagUnusedbyte ); //TON&NPI FF
+ aEmptyPattern.Append( KTagUnusedbyte ); // SSC/BCD forst Byte is FF
+ break;
+ }
+ case UICC_SNE_PRIM_TAG:
+ case UICC_EMAIL_PRIM_TAG:
+ {
+ // If first byte of the EF record is 0xFF, the record
+ // is empty
+ aEmptyPattern.Append( KTagUnusedbyte );
+ break;
+ }
+ default:
+ {
+TFLOGSTRING( "TSY: CMmPhoneBookOperationRead3g_adn::GetEmptyRecordPattern: default" );
+OstTrace0( TRACE_NORMAL, DUP1_CMMPHONEBOOKOPERATIONREAD3G_ADN_GETEMPTYRECORDPATTERN, "CMmPhoneBookOperationRead3g_adn::GetEmptyRecordPattern : default" );
+ break;
+ }
+ }
+ }
+