adaptationlayer/tsy/nokiatsy_dll/src/cmmsmscache.cpp
changeset 0 63b37f68c1ce
child 5 8ccc39f9d787
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/adaptationlayer/tsy/nokiatsy_dll/src/cmmsmscache.cpp	Fri Nov 06 17:28:23 2009 +0000
@@ -0,0 +1,331 @@
+/*
+* 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:
+*
+*/
+
+
+
+//  EXTERNAL RESOURCES
+
+//  Include Files
+#include <ctsy/rmmcustomapi.h>
+#include "cmmsmscache.h"
+#include "tsylogger.h"
+#include "tisi.h"
+#include <smsisi.h>
+#include "osttracedefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "cmmsmscachetraces.h"
+#endif
+
+//  External Data Structures
+//  none
+
+//  External Function Prototypes
+//  none
+
+//  LOCAL CONSTANTS AND MACROS
+//  none
+
+//  MODULE DATA STRUCTURES
+
+//  Local Data Structures
+//  none
+
+//  Local Function Prototypes
+//  none
+
+//  LOCAL FUNCTIONS
+//  none
+
+//  MEMBER FUNCTIONS
+
+//=============================================================================
+
+// -----------------------------------------------------------------------------
+// CMmSmsCache::CMmSmsCache
+// Creates new CMmSmsCache object
+// -----------------------------------------------------------------------------
+//
+CMmSmsCache::CMmSmsCache()
+    {
+TFLOGSTRING("TSY: CMmSmsCache::CMmSmsCache");
+OstTrace0( TRACE_NORMAL, CMMSMSCACHE_CMMSMSCACHE, "CMmSmsCache::CMmSmsCache" );
+    Reset();
+    // If SIM is offline,then won't get
+    // sim ready completion and cache error state stays as
+    // KErrNotFound. If user accesses SIM SMS --> immediate complete
+    // with KErrNotFound
+    SetStatus( KErrNotFound );
+    }
+
+// -----------------------------------------------------------------------------
+// CMmSmsCache::~CMmSmsCache
+// delete CMmSmsCache
+// -----------------------------------------------------------------------------
+//
+CMmSmsCache::~CMmSmsCache()
+    {
+TFLOGSTRING("TSY: CMmSmsCache::~CMmSmsCache");
+OstTrace0( TRACE_NORMAL, DUP1_CMMSMSCACHE_CMMSMSCACHE, "CMmSmsCache::~CMmSmsCache" );
+    Reset();
+    }
+
+// -----------------------------------------------------------------------------
+// CMmSmsCache::Reset
+// reset cache to not ready state
+// -----------------------------------------------------------------------------
+//
+void CMmSmsCache::Reset()
+    {
+TFLOGSTRING("TSY: CMmSmsCache::Reset");
+OstTrace0( TRACE_NORMAL, CMMSMSCACHE_RESET, "CMmSmsCache::Reset" );
+
+    iError = KErrNotReady;
+    iDeleteLocation = 0;
+
+    for ( TInt i = 0; i < iElements.Count(); i++ )
+        {
+        delete iElements[i];
+        iElements[i] = NULL;
+        }
+    iElements.Reset();
+    }
+
+// -----------------------------------------------------------------------------
+// CMmSmsCache::UsedEntries
+// get the number of used entries from cache
+// -----------------------------------------------------------------------------
+//
+TInt CMmSmsCache::UsedEntries()
+    {
+TFLOGSTRING("TSY: CMmSmsCache::UsedEntries");
+OstTrace0( TRACE_NORMAL, CMMSMSCACHE_USEDENTRIES, "CMmSmsCache::UsedEntries" );
+    TInt count( 0 );
+    for ( TInt i = 0; i < iElements.Count(); i++ )
+       {
+       if ( iElements[i] )
+           {
+           count++;
+           }
+       }
+    return count;
+    }
+
+// -----------------------------------------------------------------------------
+// CMmSmsCache::TotalEntries
+// get the total number of entries in SIM
+// -----------------------------------------------------------------------------
+//
+TInt CMmSmsCache::TotalEntries()
+    {
+TFLOGSTRING2("TSY: CMmSmsCache::TotalEntries: %d",iElements.Count());
+OstTrace1( TRACE_NORMAL, CMMSMSCACHE_TOTALENTRIES, "CMmSmsCache::TotalEntries;iElements.Count=%d", iElements.Count() );
+    return iElements.Count();
+    }
+
+// -----------------------------------------------------------------------------
+// CMmSmsCache::Status
+// Returns cache status, this can be KErrNotReady (cache is being read)
+// KErrNone (cache is ok and can be used)
+// any other (cache is in error state and is unusable)
+// -----------------------------------------------------------------------------
+//
+TInt CMmSmsCache::Status()
+    {
+TFLOGSTRING("TSY: CMmSmsCache::Status");
+OstTrace0( TRACE_NORMAL, CMMSMSCACHE_STATUS, "CMmSmsCache::Status" );
+    return iError;
+    }
+
+// -----------------------------------------------------------------------------
+// CMmSmsCache::SetStatus
+// set cache error state
+// -----------------------------------------------------------------------------
+//
+void CMmSmsCache::SetStatus( TInt aError )
+    {
+TFLOGSTRING2("TSY: CMmSmsCache::SetStatus %d", aError);
+OstTrace1( TRACE_NORMAL, CMMSMSCACHE_SETSTATUS, "CMmSmsCache::SetStatus;aError=%d", aError );
+    iError = aError;
+    }
+
+// -----------------------------------------------------------------------------
+// CMmSmsCache::SetTotalEntriesL
+// initialize cache to contain aTotal number of empty entries
+// it is assumed that cache is Reset before call to this..
+// -----------------------------------------------------------------------------
+//
+void CMmSmsCache::SetTotalEntriesL( TInt aTotal )
+    {
+TFLOGSTRING2("TSY: CMmSmsCache::SetTotalEntriesL %d", aTotal);
+OstTrace1( TRACE_NORMAL, CMMSMSCACHE_SETTOTALENTRIESL, "CMmSmsCache::SetTotalEntriesL;aTotal=%d", aTotal );
+
+    RMobileSmsStore::TMobileGsmSmsEntryV1* element = NULL;
+    for ( TInt i = 0; i < aTotal; i++ )
+        {
+        iElements.AppendL( element );
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CMmSmsCache::AddEntryL
+// adds new entry to cache, if the cause of isi msg is not
+// ok, then we add just a null pointer (to save space)
+// returns true if element was cache and false
+// if cache location is empty
+// -----------------------------------------------------------------------------
+//
+TBool CMmSmsCache::AddEntryL(
+    const RMobileSmsStore::TMobileGsmSmsEntryV1* aEntry,
+    const TUint8  aRecordId )
+    {
+TFLOGSTRING("TSY: CMmSmsCache::AddEntryL");
+OstTrace0( TRACE_NORMAL, CMMSMSCACHE_ADDENTRYL, "CMmSmsCache::AddEntryL" );
+
+    if ( 0 < iElements.Count() )
+        {
+        delete iElements[aRecordId - 1];
+        iElements[aRecordId - 1] = NULL;
+        }
+
+    // If the location is non-empty (filled with 0xFF (3GPP TS 31.102
+    // 4.2.25 EFSMS (Short messages)))
+
+    if ( EMPTY_LOCATION != aEntry->iMsgStatus )
+        {
+        // Make a copy of the received SIM SMS.
+        // Reserve heap memory; can leave if out of mem.
+        RMobileSmsStore::TMobileGsmSmsEntryV1* tmpBuf =
+            new( ELeave ) RMobileSmsStore::TMobileGsmSmsEntryV1;
+        *tmpBuf = *aEntry;
+        // copy data
+        iElements[aRecordId - 1] = tmpBuf;
+
+        return ETrue;
+        }
+    return EFalse;
+    }
+
+// -----------------------------------------------------------------------------
+// CMmSmsCache::GetEntry
+// get entry from cache, returns null if cache doesn't c;ontain
+// valid entry in the given location location range is in range
+// [1... max sim sms slots]
+// -----------------------------------------------------------------------------
+//
+RMobileSmsStore::TMobileGsmSmsEntryV1* CMmSmsCache::GetEntry( TInt aLocation )
+    {
+TFLOGSTRING2("TSY: CMmSmsCache::GetEntry - location: %d", aLocation);
+OstTrace1( TRACE_NORMAL, CMMSMSCACHE_GETENTRY, "CMmSmsCache::GetEntry;aLocation=%d", aLocation );
+    RMobileSmsStore::TMobileGsmSmsEntryV1* smsData = NULL;
+    if ( aLocation <= iElements.Count() && aLocation >= 1 )
+        {
+        if ( iElements[aLocation-1] )
+            {
+            RMobileSmsStore::TMobileGsmSmsEntryV1* tempHBuf(
+                iElements[aLocation-1] );
+            smsData = tempHBuf;
+            }
+        }
+    return smsData;
+    }
+
+// -----------------------------------------------------------------------------
+// CMmSmsCache::FirstFreeLocation
+// return first free location in range [1... max sim sms slots]
+// or zero if no free slots are found
+// -----------------------------------------------------------------------------
+//
+TUint CMmSmsCache::FirstFreeLocation()
+    {
+TFLOGSTRING("TSY: CMmSmsCache::FirstFreeLocation");
+OstTrace0( TRACE_NORMAL, CMMSMSCACHE_FIRSTFREELOCATION, "CMmSmsCache::FirstFreeLocation" );
+    TInt location( 0 );
+    for ( TInt i = 0; i < iElements.Count(); i++ )
+        {
+        if ( !iElements[i] )
+            {
+            location = i + 1;
+            i = iElements.Count(); // exit loop
+            }
+        }
+TFLOGSTRING2("TSY: CMmSmsCache::FirstFreeLocation - found location: %d", location);
+OstTrace0( TRACE_NORMAL, DUP1_CMMSMSCACHE_FIRSTFREELOCATION, "CMmSmsCache::FirstFreeLocation" );
+    return location;
+    }
+
+// -----------------------------------------------------------------------------
+// CMmSmsCache::SetDeleteLocation
+// set the location to delete by Delete()
+// -----------------------------------------------------------------------------
+//
+void CMmSmsCache::SetDeleteLocation( TInt aLocation )
+    {
+TFLOGSTRING2("TSY: CMmSmsCache::SetDeleteLocation %d", aLocation);
+OstTrace1( TRACE_NORMAL, CMMSMSCACHE_SETDELETELOCATION, "CMmSmsCache::SetDeleteLocation;aLocation=%d", aLocation );
+    iDeleteLocation = aLocation;
+    }
+
+// -----------------------------------------------------------------------------
+// CMmSmsCache::Delete
+// if flush location is set, then flush it
+// -----------------------------------------------------------------------------
+//
+void CMmSmsCache::Delete()
+    {
+TFLOGSTRING("TSY: CMmSmsCache::Delete");
+OstTrace0( TRACE_NORMAL, CMMSMSCACHE_DELETE, "CMmSmsCache::Delete" );
+    if ( iDeleteLocation!=0 )
+        {
+        Delete( iDeleteLocation );
+        iDeleteLocation = NULL;
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CMmSmsCache::Delete
+//  Delete an element from cache
+// -----------------------------------------------------------------------------
+//
+void CMmSmsCache::Delete( TInt aLocation )
+    {
+TFLOGSTRING2("TSY: CMmSmsCache::Delete %d", aLocation);
+OstTrace1( TRACE_NORMAL, DUP1_CMMSMSCACHE_DELETE, "CMmSmsCache::Delete;aLocation=%d", aLocation );
+
+    if ( aLocation <= iElements.Count() && aLocation >= 1 )
+        {
+        delete iElements[aLocation-1];
+        iElements[aLocation-1] = NULL;
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CMmSmsCache::DeleteAll
+// empty all of cache
+// -----------------------------------------------------------------------------
+//
+void CMmSmsCache::DeleteAll()
+    {
+TFLOGSTRING("TSY: CMmSmsCache::DeleteAll");
+OstTrace0( TRACE_NORMAL, CMMSMSCACHE_DELETEALL, "CMmSmsCache::DeleteAll" );
+    for ( TInt i = 0; i < iElements.Count(); i++ )
+        {
+        delete iElements[i];
+        iElements[i] = NULL;
+        }
+    }
+
+//  End of File