adaptationlayer/tsy/simatktsy_dll/src/saticon.cpp
changeset 0 63b37f68c1ce
child 5 8ccc39f9d787
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/adaptationlayer/tsy/simatktsy_dll/src/saticon.cpp	Fri Nov 06 17:28:23 2009 +0000
@@ -0,0 +1,371 @@
+/*
+* 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: 
+*
+*/
+
+
+
+
+//  INCLUDE FILES
+#include "saticon.h"        // sat icon class
+#include "satmessaging.h"   // sat messaging
+#include "satmesshandler.h" // sat message handler class
+#include "satutil.h"        // sat utility class
+#include "osttracedefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "saticontraces.h"
+#endif
+
+
+// CONSTANTS
+const TUint8 KDescriptionSize        = 9;
+
+// KMaxThumbPhonetMessageSize (16384) - header (8) - subBlock parameters (16)
+const TUint16 KIconDataMaxSize       = 0x3FE8;
+
+
+// ==================== MEMBER FUNCTIONS =======================================
+
+// -----------------------------------------------------------------------------
+// CSatIcon::CSatIcon
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CSatIcon::CSatIcon
+        (
+        CSatMessHandler* aSatMessHandler,
+        CTsySatMessaging* aSatMessaging
+        )
+        :
+        iSatMessHandler( aSatMessHandler ),
+        iSatMessaging( aSatMessaging ),
+        iIconData( NULL ),
+        iIconTsyReqHandle( NULL ),
+        iGetIconFlag( EFalse ),
+        iRecordNumber( KZero ),
+        iImageInstanceNoInRecord( KZero )
+    {
+    OstTrace0( TRACE_NORMAL, CSATICON_CSATICON, "CSatIcon::CSatIcon" );
+    iRecordData.Zero();
+    }
+
+
+// -----------------------------------------------------------------------------
+// CSatIcon::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CSatIcon::ConstructL()
+    {
+    OstTrace0( TRACE_NORMAL, CSATICON_CONSTRUCTL, "CSatIcon::ConstructL" );
+    // None. Reserved for future use.
+    }
+
+
+// -----------------------------------------------------------------------------
+// CSatIcon::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CSatIcon* CSatIcon::NewL
+        (
+        CSatMessHandler*    aSatMessHandler,
+        CTsySatMessaging*   aSatMessaging
+        )
+    {
+    OstTrace0( TRACE_NORMAL, CSATICON_NEWL, "CSatIcon::NewL" );
+    TFLOGSTRING("TSY: CSatIcon::NewL");
+
+    CSatIcon* self = new( ELeave ) CSatIcon( aSatMessHandler, aSatMessaging );
+
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+
+    return self;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CSatCC::~CSatCC
+// C++ destructor
+// -----------------------------------------------------------------------------
+//
+CSatIcon::~CSatIcon()
+    {
+    OstTrace0( TRACE_NORMAL, DUP1_CSATICON_CSATICON, "CSatIcon::~CSatIcon" );
+    TFLOGSTRING("TSY: CSatIcon::~CSatIcon");
+    }
+
+
+// -----------------------------------------------------------------------------
+// CSatIcon::GetIcon
+// This method gets the content of the EF_IMG record specified
+// by aRecordnumber
+// -----------------------------------------------------------------------------
+//
+TInt CSatIcon::GetIcon
+        (
+        TUint8*         aRecordNumber,     // Record number
+        RSat::TIcon*    aIconEf,           // Icon elementary file
+        TTsyReqHandle   aTsyReqHandle      // Request handle
+        )
+    {
+    OstTrace0( TRACE_NORMAL, CSATICON_GETICON, "CSatIcon::GetIcon" );
+    TFLOGSTRING("TSY: CSatIcon::GetIcon");
+    iImageInstanceNoInRecord = 0;
+
+    TInt ret( KErrNone );
+
+    if ( iIconTsyReqHandle )
+        {
+        TFLOGSTRING("TSY: CSatIcon::GetIcon : KErrServerBusy");
+        OstTrace0( TRACE_NORMAL, DUP1_CSATICON_GETICON, "CSatIcon::GetIcon : KErrServerBusy" );
+
+        iSatMessaging->ReqCompleted( aTsyReqHandle, KErrServerBusy);
+        }
+    else
+        {
+        iIconData = aIconEf;
+        iIconTsyReqHandle = aTsyReqHandle;
+        iGetIconFlag = ETrue;
+        iRecordNumber = *aRecordNumber;
+
+        ret = iSatMessHandler->UiccReadSatIconReq(
+            *aRecordNumber,
+            0, // File offset, read from start of record
+            0, // Data amouont, read all the data
+            KUiccTrIdReadSatIcon );
+        }
+
+    TFLOGSTRING2("TSY: CSatIcon::GetIcon, ret: %d", ret );
+    OstTrace1( TRACE_NORMAL, DUP3_CSATICON_GETICON, "CSatIcon::GetIcon, ret: %d", ret );
+
+    return ret;
+
+    }
+
+// -----------------------------------------------------------------------------
+// CSatIcon::CompleteIconRequest
+// Completes icon request
+// -----------------------------------------------------------------------------
+//
+void CSatIcon::CompleteIconRequest
+        (
+        TInt aStatus,   // Message sending status
+        TPtrC8 aIcon,    // Icon elementary file data
+        const TDesC8& aInfo // Icon info block
+        )
+    {
+    OstTrace0( TRACE_NORMAL, CSATICON_COMPLETEICONREQUEST, "CSatIcon::CompleteIconRequest" );
+    TFLOGSTRING("TSY: CSatIcon::CompleteIconRequest, entered");
+
+    if ( iIconTsyReqHandle )
+        {
+        if ( KErrNone == aStatus && aIcon.Length() > 0)
+            {
+            //check the size....
+            if ( (*iIconData).MaxLength() >= aIcon.Length())
+                {
+                //icon body
+                if( aInfo.Length() == 6 )
+                    {
+                    // Color coding scheme is located at index 3 in Image
+                    // Instance's Description.
+                    TInt index( 3 + ( iImageInstanceNoInRecord - 1)
+                        * KDescriptionSize );
+
+                    TInt colorCoding = iRecordData[index];
+                    if ( KBlackAndWhite == colorCoding )
+                        {
+                        // Black and white icon info block contain only
+                        // two bytes: width and heigth
+                        (*iIconData).Copy( aInfo.Mid( 0, 2) );
+                        }
+                    else
+                        {
+                        // Color icons have six bytes info block
+                        (*iIconData).Copy( aInfo );
+                        }
+
+                    // Append icon data after the info block
+                    (*iIconData).Append( aIcon );
+                    }
+                //clut and record
+                else
+                    {
+                    (*iIconData).Copy( aIcon );
+                    }
+
+                // if this is completed for GetIcon request, store records
+                // content
+                if( iGetIconFlag )
+                    {
+                    iRecordData.Copy( *iIconData );
+                    }
+                }
+            else //data is too big for client's buffer
+                {
+                aStatus = KErrOverflow;
+                (*iIconData).Zero();
+                }
+            }
+        else
+            {
+            //reset the length
+            (*iIconData).Zero();
+            }
+
+        iIconData = NULL;
+        iGetIconFlag = EFalse;
+        TFLOGSTRING2("TSY: CSatIcon::CompleteIconRequest, aStatus: %d", aStatus );
+        OstTrace1( TRACE_NORMAL, DUP1_CSATICON_COMPLETEICONREQUEST, "CSatIcon::CompleteIconRequest, aStatus: %d", aStatus );
+
+        iSatMessaging->ReqCompleted( iIconTsyReqHandle, aStatus );
+        iIconTsyReqHandle = NULL;
+
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CSatIcon::GetImageInstance
+// This method gets the image instance specified by the
+// InstanceNumber, Offset and Length
+// -----------------------------------------------------------------------------
+//
+TInt CSatIcon::GetImageInstance
+        (
+        TDesC8* aInstanceInfo,         // instance info
+        TDes8* aInstance,              // instance
+        TTsyReqHandle aTsyReqHandle    // request handle
+        )
+    {
+    OstTrace0( TRACE_NORMAL, CSATICON_GETIMAGEINSTANCE, "CSatIcon::GetImageInstance" );
+    TFLOGSTRING("TSY: CSatIcon::GetImageInstance");
+
+    TInt ret( KErrNotFound );
+
+    if( iIconTsyReqHandle )
+        {
+        TFLOGSTRING("TSY: CSatIcon::GetImageInstance : KErrServerBusy");
+        OstTrace0( TRACE_NORMAL, DUP1_CSATICON_GETIMAGEINSTANCE, "CSatIcon::GetImageInstance : KErrServerBusy" );
+
+        iSatMessaging->ReqCompleted( aTsyReqHandle, KErrServerBusy);
+        }
+    else
+        {
+        iIconData = aInstance;
+        iIconTsyReqHandle = aTsyReqHandle;
+
+        RSat::TInstanceInfoV2Pckg* aPckg =
+                REINTERPRET_CAST( RSat::TInstanceInfoV2Pckg*, aInstanceInfo );
+        RSat::TInstanceInfoV2& instanceInfo = ( *aPckg ) ();
+
+        //Calculate position for icon imageinstance selected from record.
+        TInt iconNumber = iRecordData[0];
+        TBool iconFound(EFalse);
+        TInt pos(4);
+        while( iconNumber && !iconFound )
+            {
+            if( ( (TUint16)instanceInfo.iInstanceNumber ==
+                (TUint16)(iRecordData[pos]<<8 | iRecordData[pos+1]))
+             && ( (TUint16)instanceInfo.iOffset ==
+                (TUint16)(iRecordData[pos+2]<<8 | iRecordData[pos+3]))
+             && ( (TUint16)instanceInfo.iLength ==
+                (TUint16)(iRecordData[pos+4]<<8 | iRecordData[pos+5])))
+                {
+                iconFound = ETrue;
+                }
+            pos+= 9;
+            iconNumber--;
+            }
+
+        iImageInstanceNoInRecord = iRecordData[0] - iconNumber;
+
+        //Check icon data length
+        if( ( KIconDataMaxSize > instanceInfo.iLength ) && iconFound )
+            {
+            // Calculate the offset of instance
+            TUint8 instanceOffset(
+                ( iImageInstanceNoInRecord - 1 ) * KDescriptionSize + 1 );
+
+
+            // At first read image instance data from record of EF IMG
+            ret = iSatMessHandler->UiccReadSatIconReq(
+                iRecordNumber,
+                instanceOffset,
+                KDescriptionSize,
+                KUiccTrIdReadIconInstancePhase1
+                );
+            }
+        }
+    TFLOGSTRING2("TSY: CSatIcon::GetImageInstance, ret: %d", ret );
+    OstTrace1( TRACE_NORMAL, DUP3_CSATICON_GETIMAGEINSTANCE, "CSatIcon::GetImageInstance, ret: %d", ret );
+
+    return ret;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CSatIcon::GetClut
+// This method gets the CLUT (Color look-up table) specified
+// by aInstanceNumber and Offset.
+// -----------------------------------------------------------------------------
+//
+TInt CSatIcon::GetClut
+        (
+        RSat::TInstanceNumberAndOffset*,
+        TDes8*         aClut,              // Colour look-up table
+        TTsyReqHandle  aTsyReqHandle       // Request handle
+        )
+    {
+    OstTrace0( TRACE_NORMAL, CSATICON_GETCLUT, "CSatIcon::GetClut" );
+    TFLOGSTRING("TSY: CSatIcon::GetClut");
+     TInt ret( KErrNotFound );
+
+    if( iIconTsyReqHandle )
+        {
+        TFLOGSTRING("TSY: CSatIcon::GetClut : KErrServerBusy");
+        OstTrace0( TRACE_NORMAL, DUP1_CSATICON_GETCLUT, "CSatIcon::GetClut : KErrServerBusy" );
+
+        iSatMessaging->ReqCompleted( aTsyReqHandle, KErrServerBusy);
+        }
+    else
+        {
+        iIconData = aClut;
+        iIconTsyReqHandle = aTsyReqHandle;
+
+        // Image instance elementary file (includes also clut ) was read in
+        // previous phase. Read data from sat message handler and complete
+        // request. Check icon data length
+        if( KIconDataMaxSize > (*aClut).MaxLength() )
+            {
+            TBuf8<1> infoNotSet( 0 );
+            TPtrC8 clutData( iSatMessHandler->GetClut() );
+            CompleteIconRequest( KErrNone, clutData, infoNotSet );
+            }
+        }
+    TFLOGSTRING2("TSY: CSatIcon::GetClut, ret: %d", ret );
+    OstTrace1( TRACE_NORMAL, DUP3_CSATICON_GETCLUT, "CSatIcon::GetClut, ret: %d", ret );
+
+    iImageInstanceNoInRecord = 0;
+    return ret;
+    }
+
+
+
+// ================= OTHER EXPORTED FUNCTIONS =================================
+