satengine/satserver/Engine/src/CSatSIconSubSession.cpp
author hgs
Fri, 17 Sep 2010 17:09:13 +0300
changeset 48 78df25012fda
parent 33 8d5d7fcf9b59
permissions -rw-r--r--
201037
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
33
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
* Copyright (c) 2002-2008 Nokia Corporation and/or its subsidiary(-ies). 
hgs
parents:
diff changeset
     3
* All rights reserved.
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
hgs
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
hgs
parents:
diff changeset
     8
*
hgs
parents:
diff changeset
     9
* Initial Contributors:
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
hgs
parents:
diff changeset
    11
*
hgs
parents:
diff changeset
    12
* Contributors:
hgs
parents:
diff changeset
    13
*
hgs
parents:
diff changeset
    14
* Description:  Handles the icon sub-session IPC.
hgs
parents:
diff changeset
    15
*
hgs
parents:
diff changeset
    16
*/
hgs
parents:
diff changeset
    17
hgs
parents:
diff changeset
    18
hgs
parents:
diff changeset
    19
#include    <fbs.h>
hgs
parents:
diff changeset
    20
#include    <rsatservice.h>
hgs
parents:
diff changeset
    21
#include    <e32property.h>
hgs
parents:
diff changeset
    22
hgs
parents:
diff changeset
    23
#include    "tsatinternaliconinfo.h"
hgs
parents:
diff changeset
    24
#include    "SATInternalPSKeys.h"
hgs
parents:
diff changeset
    25
#include    "CSatSIconSubSession.h"
hgs
parents:
diff changeset
    26
#include    "MSatSIconAPI.h"
hgs
parents:
diff changeset
    27
#include    "SatSOpcodes.h"
hgs
parents:
diff changeset
    28
#include    "CSatSSession.h"
hgs
parents:
diff changeset
    29
#include    "CSatSIconConverter.h"
hgs
parents:
diff changeset
    30
#include    "EnginePanic.h"
hgs
parents:
diff changeset
    31
#include    "SatLog.h"
hgs
parents:
diff changeset
    32
#include    "TSatEventMediator.h"
hgs
parents:
diff changeset
    33
#include    "MSatUtils.h"
hgs
parents:
diff changeset
    34
hgs
parents:
diff changeset
    35
const TUint8 KClutEntrySize = 3;
hgs
parents:
diff changeset
    36
const TUint KDefaultNumberOfClutEntries = 256;
hgs
parents:
diff changeset
    37
const TUint8 KColourDepthByte = 4;
hgs
parents:
diff changeset
    38
const TUint8 KNumberOfCLUTByte = KColourDepthByte + 1;
hgs
parents:
diff changeset
    39
hgs
parents:
diff changeset
    40
// ======== MEMBER FUNCTIONS ========
hgs
parents:
diff changeset
    41
hgs
parents:
diff changeset
    42
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    43
// CSatSIconSubSession::CSatSIconSubSession
hgs
parents:
diff changeset
    44
// C++ default constructor can NOT contain any code, that
hgs
parents:
diff changeset
    45
// might leave.
hgs
parents:
diff changeset
    46
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    47
//
hgs
parents:
diff changeset
    48
CSatSIconSubSession::CSatSIconSubSession(
hgs
parents:
diff changeset
    49
    CSatSSession& aSession,
hgs
parents:
diff changeset
    50
    TSatEventMediator& aEventMediator ) :
hgs
parents:
diff changeset
    51
    CSatSSubSession( aSession ),
hgs
parents:
diff changeset
    52
    iEventMediator( aEventMediator )
hgs
parents:
diff changeset
    53
    {
hgs
parents:
diff changeset
    54
    LOG( SIMPLE, "SATENGINE: \
hgs
parents:
diff changeset
    55
        CSatSIconSubSession::CSatSIconSubSession calling - exiting" )
hgs
parents:
diff changeset
    56
    }
hgs
parents:
diff changeset
    57
hgs
parents:
diff changeset
    58
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    59
// CSatSIconSubSession::NewL
hgs
parents:
diff changeset
    60
// Two-phased constructor.
hgs
parents:
diff changeset
    61
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    62
//
hgs
parents:
diff changeset
    63
CSatSIconSubSession* CSatSIconSubSession::NewL(
hgs
parents:
diff changeset
    64
    CSatSSession& aSession,
hgs
parents:
diff changeset
    65
    TSatEventMediator& aEventMediator )
hgs
parents:
diff changeset
    66
    {
hgs
parents:
diff changeset
    67
    LOG( SIMPLE, "SATENGINE: CSatSIconSubSession::NewL calling" )
hgs
parents:
diff changeset
    68
hgs
parents:
diff changeset
    69
    CSatSIconSubSession* self =
hgs
parents:
diff changeset
    70
        new( ELeave ) CSatSIconSubSession( aSession, aEventMediator );
hgs
parents:
diff changeset
    71
hgs
parents:
diff changeset
    72
    CleanupStack::PushL( self );
hgs
parents:
diff changeset
    73
    self->ConstructL();
hgs
parents:
diff changeset
    74
    CleanupStack::Pop( /* self */ );
hgs
parents:
diff changeset
    75
hgs
parents:
diff changeset
    76
    LOG( SIMPLE, "SATENGINE: CSatSIconSubSession::NewL exiting" )
hgs
parents:
diff changeset
    77
    return self;
hgs
parents:
diff changeset
    78
    }
hgs
parents:
diff changeset
    79
hgs
parents:
diff changeset
    80
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    81
// CSatSIconSubSession::ConstructL
hgs
parents:
diff changeset
    82
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    83
//
hgs
parents:
diff changeset
    84
void CSatSIconSubSession::ConstructL()
hgs
parents:
diff changeset
    85
    {
hgs
parents:
diff changeset
    86
    LOG( SIMPLE, "SATENGINE: CSatSIconSubSession::ConstructL calling" )
hgs
parents:
diff changeset
    87
hgs
parents:
diff changeset
    88
    iIconAPI = iSession.CreateIconHandlerL();
hgs
parents:
diff changeset
    89
hgs
parents:
diff changeset
    90
    LOG( SIMPLE, "SATENGINE: CSatSIconSubSession::ConstructL exiting" )
hgs
parents:
diff changeset
    91
    }
hgs
parents:
diff changeset
    92
hgs
parents:
diff changeset
    93
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    94
// CSatSIconSubSession::~CSatSIconSubSession
hgs
parents:
diff changeset
    95
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    96
//
hgs
parents:
diff changeset
    97
CSatSIconSubSession::~CSatSIconSubSession()
hgs
parents:
diff changeset
    98
    {
hgs
parents:
diff changeset
    99
    LOG( SIMPLE,
hgs
parents:
diff changeset
   100
        "SATENGINE: CSatSIconSubSession::~CSatSIconSubSession calling" )
hgs
parents:
diff changeset
   101
        
hgs
parents:
diff changeset
   102
    delete iBitmap;
hgs
parents:
diff changeset
   103
    delete iIconAPI;
hgs
parents:
diff changeset
   104
    delete iClut;
hgs
parents:
diff changeset
   105
    delete iIconData;
hgs
parents:
diff changeset
   106
hgs
parents:
diff changeset
   107
    LOG( SIMPLE,
hgs
parents:
diff changeset
   108
        "SATENGINE: CSatSIconSubSession::~CSatSIconSubSession exiting" )
hgs
parents:
diff changeset
   109
    }
hgs
parents:
diff changeset
   110
hgs
parents:
diff changeset
   111
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   112
// CSatSIconSubSession::GetIconInfo
hgs
parents:
diff changeset
   113
// Gets the icon info from SIM.
hgs
parents:
diff changeset
   114
// (other items were commented in a header).
hgs
parents:
diff changeset
   115
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   116
//
hgs
parents:
diff changeset
   117
void CSatSIconSubSession::GetIconInfo()
hgs
parents:
diff changeset
   118
    {
hgs
parents:
diff changeset
   119
    LOG( SIMPLE, "SATENGINE: CSatSIconSubSession::GetIconInfo calling" )
hgs
parents:
diff changeset
   120
hgs
parents:
diff changeset
   121
    // Read the recordnumber from client.
hgs
parents:
diff changeset
   122
    TUint8 recordNumber( 0 );
hgs
parents:
diff changeset
   123
    TPckg<TUint8> recordPckg( recordNumber );
hgs
parents:
diff changeset
   124
    TRAPD( err, iMessage.ReadL( 0, recordPckg ) );
hgs
parents:
diff changeset
   125
    LOG2( SIMPLE, "SATENGINE: CSatSIconSubSession::GetIconInfo \
hgs
parents:
diff changeset
   126
          err: %i", err )
hgs
parents:
diff changeset
   127
    if ( KErrNone == err )
hgs
parents:
diff changeset
   128
        {
hgs
parents:
diff changeset
   129
        // Start getting the icon info from SIM.
hgs
parents:
diff changeset
   130
        iIconEf.SetLength( NULL );
hgs
parents:
diff changeset
   131
        iIconAPI->GetIconInfo( recordNumber, iIconEf, *this );
hgs
parents:
diff changeset
   132
        }
hgs
parents:
diff changeset
   133
    else
hgs
parents:
diff changeset
   134
        {
hgs
parents:
diff changeset
   135
        iSession.PanicClient( iMessage, ESatSBadDescriptor );
hgs
parents:
diff changeset
   136
        }
hgs
parents:
diff changeset
   137
hgs
parents:
diff changeset
   138
    LOG( SIMPLE, "SATENGINE: CSatSIconSubSession::GetIconInfo exiting" )
hgs
parents:
diff changeset
   139
    }
hgs
parents:
diff changeset
   140
hgs
parents:
diff changeset
   141
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   142
// CSatSIconSubSession::NotifyGetIconInfo
hgs
parents:
diff changeset
   143
// Notification from icon observer
hgs
parents:
diff changeset
   144
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   145
//
hgs
parents:
diff changeset
   146
void CSatSIconSubSession::NotifyGetIconInfo()
hgs
parents:
diff changeset
   147
    {
hgs
parents:
diff changeset
   148
    LOG( SIMPLE, "SATENGINE: CSatSIconSubSession::NotifyGetIconInfo calling" )
hgs
parents:
diff changeset
   149
hgs
parents:
diff changeset
   150
    // Send the icon info data got to client.
hgs
parents:
diff changeset
   151
    TPckg<RSat::TIcon> infoPckg( iIconEf );    
hgs
parents:
diff changeset
   152
    Write( iMessage, 1, infoPckg );
hgs
parents:
diff changeset
   153
    iMessage.Complete( KErrNone );
hgs
parents:
diff changeset
   154
hgs
parents:
diff changeset
   155
    LOG( SIMPLE, "SATENGINE: CSatSIconSubSession::NotifyGetIconInfo exiting" )
hgs
parents:
diff changeset
   156
    }
hgs
parents:
diff changeset
   157
hgs
parents:
diff changeset
   158
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   159
// CSatSIconSubSession::GetIconInstanceL
hgs
parents:
diff changeset
   160
// Gets the icon from SIM.
hgs
parents:
diff changeset
   161
// (other items were commented in a header).
hgs
parents:
diff changeset
   162
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   163
//
hgs
parents:
diff changeset
   164
void CSatSIconSubSession::GetIconInstanceL()
hgs
parents:
diff changeset
   165
    {
hgs
parents:
diff changeset
   166
    LOG( SIMPLE, "SATENGINE: CSatSIconSubSession::GetIconInstanceL calling" )
hgs
parents:
diff changeset
   167
hgs
parents:
diff changeset
   168
    TSatInternalIconInfo info;
hgs
parents:
diff changeset
   169
    // Read the icon info from client.
hgs
parents:
diff changeset
   170
    TSatInternalIconInfoPckg infoPckg( info );
hgs
parents:
diff changeset
   171
    TRAPD( err, iMessage.ReadL( 0, infoPckg ) );
hgs
parents:
diff changeset
   172
hgs
parents:
diff changeset
   173
    iInfo.iInstanceNumber = info.iFileIdentifier;
hgs
parents:
diff changeset
   174
    iInfo.iOffset = info.iOffset;
hgs
parents:
diff changeset
   175
    iInfo.iLength = info.iLength;
hgs
parents:
diff changeset
   176
hgs
parents:
diff changeset
   177
    if ( TSatInternalIconInfo::EBasic == info.iCodingScheme )
hgs
parents:
diff changeset
   178
        {
hgs
parents:
diff changeset
   179
        LOG( SIMPLE, "SATENGINE: CSatSIconSubSession::GetIconInstanceL \
hgs
parents:
diff changeset
   180
             basic CodingScheme" )
hgs
parents:
diff changeset
   181
        iInfo.iCoding = RSat::KBasic;
hgs
parents:
diff changeset
   182
        }
hgs
parents:
diff changeset
   183
    else
hgs
parents:
diff changeset
   184
        {
hgs
parents:
diff changeset
   185
        LOG( SIMPLE, "SATENGINE: CSatSIconSubSession::GetIconInstanceL \
hgs
parents:
diff changeset
   186
             colour CodingScheme" )
hgs
parents:
diff changeset
   187
        iInfo.iCoding = RSat::KColour;
hgs
parents:
diff changeset
   188
        }
hgs
parents:
diff changeset
   189
hgs
parents:
diff changeset
   190
    iInfo.iImgWidth = static_cast<TUint8>( info.iWidth );
hgs
parents:
diff changeset
   191
    iInfo.iImgHeight = static_cast<TUint8>( info.iHeight );
hgs
parents:
diff changeset
   192
    iInfo.iFileId = info.iFileIdentifier;
hgs
parents:
diff changeset
   193
    LOG2( SIMPLE, "SATENGINE: CSatSIconSubSession::GetIconInstanceL \
hgs
parents:
diff changeset
   194
          err: %i", err )
hgs
parents:
diff changeset
   195
    if ( KErrNone == err )
hgs
parents:
diff changeset
   196
        {
hgs
parents:
diff changeset
   197
        // Create buffer for the icon data.
hgs
parents:
diff changeset
   198
        iIconData = HBufC8::NewL( iInfo.iLength );
hgs
parents:
diff changeset
   199
        TPtr8 iconDataPtr( iIconData->Des() );
hgs
parents:
diff changeset
   200
hgs
parents:
diff changeset
   201
        // Start getting the icon data from SIM.
hgs
parents:
diff changeset
   202
        iIconAPI->GetIconInstance( iInfo, iconDataPtr, *this );
hgs
parents:
diff changeset
   203
        }
hgs
parents:
diff changeset
   204
    else
hgs
parents:
diff changeset
   205
        {
hgs
parents:
diff changeset
   206
        iSession.PanicClient( iMessage, ESatSBadDescriptor );
hgs
parents:
diff changeset
   207
        }
hgs
parents:
diff changeset
   208
hgs
parents:
diff changeset
   209
    LOG( SIMPLE, "SATENGINE: CSatSIconSubSession::GetIconInstanceL exiting" )
hgs
parents:
diff changeset
   210
    }
hgs
parents:
diff changeset
   211
hgs
parents:
diff changeset
   212
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   213
// CSatSIconSubSession::NotifyGetIconInstanceL
hgs
parents:
diff changeset
   214
// Notification from icon observer
hgs
parents:
diff changeset
   215
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   216
//
hgs
parents:
diff changeset
   217
void CSatSIconSubSession::NotifyGetIconInstanceL()
hgs
parents:
diff changeset
   218
    {
hgs
parents:
diff changeset
   219
    LOG( SIMPLE,
hgs
parents:
diff changeset
   220
        "SATENGINE: CSatSIconSubSession::NotifyGetIconInstanceL calling" )
hgs
parents:
diff changeset
   221
hgs
parents:
diff changeset
   222
    LOG2( NORMAL, "SATENGINE: CSatSIconSubSession::NotifyGetIconInstanceL \
hgs
parents:
diff changeset
   223
          infoLength: %x", iInfo.iLength )
hgs
parents:
diff changeset
   224
hgs
parents:
diff changeset
   225
    LOG2( NORMAL, "SATENGINE: CSatSIconSubSession::NotifyGetIconInstanceL \
hgs
parents:
diff changeset
   226
          dataLength: %x", iIconData->Length() )
hgs
parents:
diff changeset
   227
hgs
parents:
diff changeset
   228
    // Get the CLUT and convert the icon data to bitmap.
hgs
parents:
diff changeset
   229
hgs
parents:
diff changeset
   230
    // basic icon has empty CLUT
hgs
parents:
diff changeset
   231
    if ( RSat::KBasic == iInfo.iCoding )
hgs
parents:
diff changeset
   232
        {
hgs
parents:
diff changeset
   233
        // For the basi icon the length from the icon info and icon data
hgs
parents:
diff changeset
   234
        // body should have the same length but for the clore icon the
hgs
parents:
diff changeset
   235
        // length not always same.
hgs
parents:
diff changeset
   236
        if ( iInfo.iLength == iIconData->Length() )
hgs
parents:
diff changeset
   237
            {
hgs
parents:
diff changeset
   238
            LOG( SIMPLE, "CSatSIconSubSession::NotifyGetIconInstanceL \
hgs
parents:
diff changeset
   239
             get the basic clut" )
hgs
parents:
diff changeset
   240
            // Basic icon does not have CLUT.
hgs
parents:
diff changeset
   241
            iClut = KNullDesC8().AllocL();
hgs
parents:
diff changeset
   242
            // Complete icon.
hgs
parents:
diff changeset
   243
            NotifyGetClutL();
hgs
parents:
diff changeset
   244
            }
hgs
parents:
diff changeset
   245
        else
hgs
parents:
diff changeset
   246
            {
hgs
parents:
diff changeset
   247
            LOG( SIMPLE, "CSatSIconSubSession::NotifyGetIconInstanceL \
hgs
parents:
diff changeset
   248
                notify failure basic" )
hgs
parents:
diff changeset
   249
            NotifyFailure( KErrCorrupt );
hgs
parents:
diff changeset
   250
            }
hgs
parents:
diff changeset
   251
        }
hgs
parents:
diff changeset
   252
    else // color icon
hgs
parents:
diff changeset
   253
        {
hgs
parents:
diff changeset
   254
        LOG( SIMPLE, "CSatSIconSubSession::NotifyGetIconInstanceL \
hgs
parents:
diff changeset
   255
             others" )
hgs
parents:
diff changeset
   256
        TPtr8 iconDataPtr( iIconData->Des() );
hgs
parents:
diff changeset
   257
hgs
parents:
diff changeset
   258
        if ( iconDataPtr.Length() >= KNumberOfCLUTByte + 1 )
hgs
parents:
diff changeset
   259
            {
hgs
parents:
diff changeset
   260
            // Create buffer for clut. Each clut entry contains
hgs
parents:
diff changeset
   261
            // intensity of red, green and blue. The value of 0 is
hgs
parents:
diff changeset
   262
            // interpreted as 256 clut entries. (ETSI TS 131 102 V4.10.0).
hgs
parents:
diff changeset
   263
            TInt numberOfClutEntries( iconDataPtr[KClutEntrySize] );
hgs
parents:
diff changeset
   264
            LOG2( SIMPLE, "CSatSIconSubSession::NotifyGetIconInstanceL \
hgs
parents:
diff changeset
   265
                  numberOfClutEntries: %i", numberOfClutEntries )
hgs
parents:
diff changeset
   266
            if ( 0 == numberOfClutEntries )
hgs
parents:
diff changeset
   267
                {
hgs
parents:
diff changeset
   268
                numberOfClutEntries = KDefaultNumberOfClutEntries;
hgs
parents:
diff changeset
   269
                }
hgs
parents:
diff changeset
   270
    
hgs
parents:
diff changeset
   271
            // Start getting the icon color lookup table from SIM.
hgs
parents:
diff changeset
   272
            TInt length = numberOfClutEntries * KClutEntrySize;
hgs
parents:
diff changeset
   273
            // In some situation the length we get from the icon information
hgs
parents:
diff changeset
   274
            // includes the length of the CLUT and some time it doesn't
hgs
parents:
diff changeset
   275
            // Both situation a valid.
hgs
parents:
diff changeset
   276
            if ( ( iInfo.iLength == iIconData->Length() )
hgs
parents:
diff changeset
   277
                 || ( iInfo.iLength == iIconData->Length() + length ) )  
hgs
parents:
diff changeset
   278
                {
hgs
parents:
diff changeset
   279
                iClut = HBufC8::NewL( length );
hgs
parents:
diff changeset
   280
    
hgs
parents:
diff changeset
   281
                LOG( SIMPLE, "CSatSIconSubSession::NotifyGetIconInstanceL \
hgs
parents:
diff changeset
   282
                     get clut" )
hgs
parents:
diff changeset
   283
                const TUint offset( iconDataPtr[KColourDepthByte] << 8 |
hgs
parents:
diff changeset
   284
                    iconDataPtr[KNumberOfCLUTByte] );
hgs
parents:
diff changeset
   285
                TPtr8 clutPtr( iClut->Des() );
hgs
parents:
diff changeset
   286
                iIconAPI->GetClut(
hgs
parents:
diff changeset
   287
                    iInfo.iInstanceNumber, offset, clutPtr, *this );
hgs
parents:
diff changeset
   288
                }
hgs
parents:
diff changeset
   289
            else
hgs
parents:
diff changeset
   290
                {
hgs
parents:
diff changeset
   291
                LOG( SIMPLE, "CSatSIconSubSession::NotifyGetIconInstanceL \
hgs
parents:
diff changeset
   292
                     others notify failure" )
hgs
parents:
diff changeset
   293
                NotifyFailure( KErrCorrupt );
hgs
parents:
diff changeset
   294
                }
hgs
parents:
diff changeset
   295
            }
hgs
parents:
diff changeset
   296
        else
hgs
parents:
diff changeset
   297
            {
hgs
parents:
diff changeset
   298
            LOG( SIMPLE, "CSatSIconSubSession::NotifyGetIconInstanceL \
hgs
parents:
diff changeset
   299
                 others notify failure" )
hgs
parents:
diff changeset
   300
            NotifyFailure( KErrCorrupt );
hgs
parents:
diff changeset
   301
            }
hgs
parents:
diff changeset
   302
        }
hgs
parents:
diff changeset
   303
hgs
parents:
diff changeset
   304
    LOG( SIMPLE,
hgs
parents:
diff changeset
   305
        "SATENGINE: CSatSIconSubSession::NotifyGetIconInstanceL exiting" )
hgs
parents:
diff changeset
   306
    }
hgs
parents:
diff changeset
   307
hgs
parents:
diff changeset
   308
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   309
// CSatSIconSubSession::NotifyGetClutL
hgs
parents:
diff changeset
   310
// Notification from icon observer
hgs
parents:
diff changeset
   311
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   312
//
hgs
parents:
diff changeset
   313
void CSatSIconSubSession::NotifyGetClutL()
hgs
parents:
diff changeset
   314
    {
hgs
parents:
diff changeset
   315
    LOG( SIMPLE, "SATENGINE: CSatSIconSubSession::NotifyGetClutL calling" )
hgs
parents:
diff changeset
   316
hgs
parents:
diff changeset
   317
    // Create icon converter.
hgs
parents:
diff changeset
   318
    CSatSIconConverter* converter =
hgs
parents:
diff changeset
   319
        CSatSIconConverter::CreateConverterL(
hgs
parents:
diff changeset
   320
            static_cast<RSat::TImageCoding>( iInfo.iCoding ) );
hgs
parents:
diff changeset
   321
    CleanupStack::PushL( converter );
hgs
parents:
diff changeset
   322
hgs
parents:
diff changeset
   323
    if ( NULL != iBitmap )
hgs
parents:
diff changeset
   324
        {
hgs
parents:
diff changeset
   325
        delete iBitmap; // Delete the bitmap
hgs
parents:
diff changeset
   326
        iBitmap = NULL;
hgs
parents:
diff changeset
   327
        }
hgs
parents:
diff changeset
   328
hgs
parents:
diff changeset
   329
    iBitmap = converter->ConvertL( *iIconData, *iClut );
hgs
parents:
diff changeset
   330
hgs
parents:
diff changeset
   331
    // Send the bitmap handle to client.
hgs
parents:
diff changeset
   332
    TPckg<TInt> handlePckg( iBitmap->Handle() );
hgs
parents:
diff changeset
   333
    Write( iMessage, 1, handlePckg );
hgs
parents:
diff changeset
   334
hgs
parents:
diff changeset
   335
    CleanupStack::PopAndDestroy( converter );
hgs
parents:
diff changeset
   336
hgs
parents:
diff changeset
   337
        delete iClut;
hgs
parents:
diff changeset
   338
        iClut = NULL;
hgs
parents:
diff changeset
   339
        
hgs
parents:
diff changeset
   340
        delete iIconData;
hgs
parents:
diff changeset
   341
        iIconData = NULL;
hgs
parents:
diff changeset
   342
hgs
parents:
diff changeset
   343
    iMessage.Complete( KErrNone );
hgs
parents:
diff changeset
   344
    LOG( SIMPLE, "SATENGINE: CSatSIconSubSession::NotifyGetClutL exiting" )
hgs
parents:
diff changeset
   345
    }
hgs
parents:
diff changeset
   346
hgs
parents:
diff changeset
   347
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   348
// CSatSIconSubSession::NotifyFailure
hgs
parents:
diff changeset
   349
// Notification from icon observer
hgs
parents:
diff changeset
   350
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   351
//
hgs
parents:
diff changeset
   352
void CSatSIconSubSession::NotifyFailure( TInt errorCode )
hgs
parents:
diff changeset
   353
    {
hgs
parents:
diff changeset
   354
    LOG( SIMPLE, "SATENGINE: CSatSIconSubSession::NotifyFailure calling" )
hgs
parents:
diff changeset
   355
hgs
parents:
diff changeset
   356
    if ( NULL != iMessage.Handle() )
hgs
parents:
diff changeset
   357
        {
hgs
parents:
diff changeset
   358
        LOG(
hgs
parents:
diff changeset
   359
            SIMPLE,
hgs
parents:
diff changeset
   360
            "SATENGINE: CSatSIconSubSession::NotifyFailure Message!" )
hgs
parents:
diff changeset
   361
        iMessage.Complete( errorCode );
hgs
parents:
diff changeset
   362
        }
hgs
parents:
diff changeset
   363
    else
hgs
parents:
diff changeset
   364
        {
hgs
parents:
diff changeset
   365
        LOG(
hgs
parents:
diff changeset
   366
            SIMPLE,
hgs
parents:
diff changeset
   367
            "SATENGINE: CSatSIconSubSession::NotifyFailure No Message!" )
hgs
parents:
diff changeset
   368
        }
hgs
parents:
diff changeset
   369
hgs
parents:
diff changeset
   370
    LOG( SIMPLE, "SATENGINE: CSatSIconSubSession::NotifyFailure exiting" )
hgs
parents:
diff changeset
   371
    }
hgs
parents:
diff changeset
   372
hgs
parents:
diff changeset
   373
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   374
// CSatSIconSubSession::HandleCommandL
hgs
parents:
diff changeset
   375
// Handles the icon sub-session requests.
hgs
parents:
diff changeset
   376
// (other items were commented in a header).
hgs
parents:
diff changeset
   377
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   378
//
hgs
parents:
diff changeset
   379
void CSatSIconSubSession::HandleCommandL( const RMessage2& aMessage )
hgs
parents:
diff changeset
   380
    {
hgs
parents:
diff changeset
   381
    LOG( SIMPLE, "SATENGINE: CSatSIconSubSession::HandleCommandL calling" )
hgs
parents:
diff changeset
   382
hgs
parents:
diff changeset
   383
    switch ( aMessage.Function() )
hgs
parents:
diff changeset
   384
        {
hgs
parents:
diff changeset
   385
        case ESatSGetIconInfo:
hgs
parents:
diff changeset
   386
            {
hgs
parents:
diff changeset
   387
            LOG( NORMAL, "SATENGINE:   ESatSGetIconInfo" )
hgs
parents:
diff changeset
   388
            if ( NULL != iMessage.Handle() )
hgs
parents:
diff changeset
   389
                {
hgs
parents:
diff changeset
   390
                LOG( SIMPLE,
hgs
parents:
diff changeset
   391
                    "SATENGINE:   Request already pending (GetIconInfo)" )
hgs
parents:
diff changeset
   392
                iSession.PanicClient( aMessage, ESatSBadRequest );
hgs
parents:
diff changeset
   393
                }
hgs
parents:
diff changeset
   394
            else
hgs
parents:
diff changeset
   395
                {
hgs
parents:
diff changeset
   396
                LOG( SIMPLE,
hgs
parents:
diff changeset
   397
                    "SATENGINE:   Request handling (GetIconInfo)" )
hgs
parents:
diff changeset
   398
                iMessage = aMessage;
hgs
parents:
diff changeset
   399
                GetIconInfo();
hgs
parents:
diff changeset
   400
                }
hgs
parents:
diff changeset
   401
            break;
hgs
parents:
diff changeset
   402
            }
hgs
parents:
diff changeset
   403
hgs
parents:
diff changeset
   404
        case ESatSGetIconInstance:
hgs
parents:
diff changeset
   405
            {
hgs
parents:
diff changeset
   406
            LOG( NORMAL, "SATENGINE:   ESatSGetIconInstance" )
hgs
parents:
diff changeset
   407
            TBool mode = IconFetchingMode();
hgs
parents:
diff changeset
   408
            
hgs
parents:
diff changeset
   409
            NotifyIconFetchingMode( mode );
hgs
parents:
diff changeset
   410
                        
hgs
parents:
diff changeset
   411
            if ( NULL != iMessage.Handle() )
hgs
parents:
diff changeset
   412
                {
hgs
parents:
diff changeset
   413
                LOG( SIMPLE,
hgs
parents:
diff changeset
   414
                    "SATENGINE:   Request already pending (GetIconInstance)" )
hgs
parents:
diff changeset
   415
                iSession.PanicClient( aMessage, ESatSBadRequest );
hgs
parents:
diff changeset
   416
                }
hgs
parents:
diff changeset
   417
            else
hgs
parents:
diff changeset
   418
                {
hgs
parents:
diff changeset
   419
                LOG( SIMPLE,
hgs
parents:
diff changeset
   420
                    "SATENGINE:   Request handling (GetIconInstance)" )
hgs
parents:
diff changeset
   421
                iMessage = aMessage;
hgs
parents:
diff changeset
   422
                GetIconInstanceL();
hgs
parents:
diff changeset
   423
                }
hgs
parents:
diff changeset
   424
            break;
hgs
parents:
diff changeset
   425
            }
hgs
parents:
diff changeset
   426
hgs
parents:
diff changeset
   427
        // Client issues ESatSIconInstanceGot when the client
hgs
parents:
diff changeset
   428
        // has duplicated the icon and then the bitmap can be
hgs
parents:
diff changeset
   429
        // deleted.
hgs
parents:
diff changeset
   430
        case ESatSIconInstanceGot:
hgs
parents:
diff changeset
   431
            {
hgs
parents:
diff changeset
   432
            LOG( NORMAL, "SATENGINE:   ESatSIconInstanceGot" )
hgs
parents:
diff changeset
   433
            // Free the bitmap.
hgs
parents:
diff changeset
   434
            delete iBitmap;
hgs
parents:
diff changeset
   435
            iBitmap = NULL;
hgs
parents:
diff changeset
   436
            aMessage.Complete( KErrNone );
hgs
parents:
diff changeset
   437
            break;
hgs
parents:
diff changeset
   438
            }
hgs
parents:
diff changeset
   439
hgs
parents:
diff changeset
   440
        // Response for SetUpIdleModeText
hgs
parents:
diff changeset
   441
        case ESatSIdleModeResponse:
hgs
parents:
diff changeset
   442
            {
hgs
parents:
diff changeset
   443
            LOG( NORMAL, "SATENGINE:   ESatSIdleModeResponse" )
hgs
parents:
diff changeset
   444
            // Send the response to Proactive SetUpIdleModeText handler
hgs
parents:
diff changeset
   445
            SendSetUpIdleModeResponse( aMessage.Int0() );
hgs
parents:
diff changeset
   446
            aMessage.Complete( KErrNone );
hgs
parents:
diff changeset
   447
            break;
hgs
parents:
diff changeset
   448
            }
hgs
parents:
diff changeset
   449
hgs
parents:
diff changeset
   450
        default:
hgs
parents:
diff changeset
   451
            {
hgs
parents:
diff changeset
   452
            LOG( SIMPLE, "SATENGINE:   Bad function - default" )
hgs
parents:
diff changeset
   453
            iSession.PanicClient( aMessage, ESatSBadRequest );
hgs
parents:
diff changeset
   454
            }
hgs
parents:
diff changeset
   455
        }
hgs
parents:
diff changeset
   456
hgs
parents:
diff changeset
   457
    LOG( SIMPLE, "SATENGINE: CSatSIconSubSession::HandleCommandL exiting" )
hgs
parents:
diff changeset
   458
    }
hgs
parents:
diff changeset
   459
hgs
parents:
diff changeset
   460
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   461
// CSatSIconSubSession::SendSetUpIdleModeResponse
hgs
parents:
diff changeset
   462
// Notification from icon observer
hgs
parents:
diff changeset
   463
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   464
//
hgs
parents:
diff changeset
   465
void CSatSIconSubSession::SendSetUpIdleModeResponse( TInt aResponse ) const
hgs
parents:
diff changeset
   466
    {
hgs
parents:
diff changeset
   467
    LOG( SIMPLE,
hgs
parents:
diff changeset
   468
        "SATENGINE: CSatSIconSubSession::SendSetUpIdleModeResponse calling" )
hgs
parents:
diff changeset
   469
hgs
parents:
diff changeset
   470
    // Send the response through Event handling procedure.
hgs
parents:
diff changeset
   471
    switch ( aResponse )
hgs
parents:
diff changeset
   472
        {
hgs
parents:
diff changeset
   473
        case RSatService::ESATIdleSuccess:
hgs
parents:
diff changeset
   474
            {
hgs
parents:
diff changeset
   475
            LOG( NORMAL, "SATENGINE:   Success" )
hgs
parents:
diff changeset
   476
            iEventMediator.Notify(
hgs
parents:
diff changeset
   477
                MSatUtils::EIdleModeResponseSuccess );
hgs
parents:
diff changeset
   478
            break;
hgs
parents:
diff changeset
   479
            }
hgs
parents:
diff changeset
   480
hgs
parents:
diff changeset
   481
        case RSatService::ESATIdleSuccessRequestedIconNotDisplayed:
hgs
parents:
diff changeset
   482
            {
hgs
parents:
diff changeset
   483
            LOG( NORMAL, "SATENGINE:   Success no icon" )
hgs
parents:
diff changeset
   484
            iEventMediator.Notify(
hgs
parents:
diff changeset
   485
                MSatUtils::EIdleModeResponseSuccessNoIcon );
hgs
parents:
diff changeset
   486
            break;
hgs
parents:
diff changeset
   487
            }
hgs
parents:
diff changeset
   488
hgs
parents:
diff changeset
   489
        case RSatService::ESATIdleMeUnableToProcessCmd:
hgs
parents:
diff changeset
   490
            {
hgs
parents:
diff changeset
   491
            LOG( NORMAL, "SATENGINE:   Unable to process" )
hgs
parents:
diff changeset
   492
            iEventMediator.Notify(
hgs
parents:
diff changeset
   493
                MSatUtils::EIdleModeResponseUnableToProcess );
hgs
parents:
diff changeset
   494
            break;
hgs
parents:
diff changeset
   495
            }
hgs
parents:
diff changeset
   496
hgs
parents:
diff changeset
   497
        case RSatService::ESATIdleCmdBeyondMeCapabilities:
hgs
parents:
diff changeset
   498
            {
hgs
parents:
diff changeset
   499
            LOG( NORMAL, "SATENGINE:   Beyond capabilities" )
hgs
parents:
diff changeset
   500
            iEventMediator.Notify(
hgs
parents:
diff changeset
   501
                MSatUtils::EIdleModeResponseBeyondCapabilities );
hgs
parents:
diff changeset
   502
            break;
hgs
parents:
diff changeset
   503
            }
hgs
parents:
diff changeset
   504
hgs
parents:
diff changeset
   505
        default:
hgs
parents:
diff changeset
   506
            {
hgs
parents:
diff changeset
   507
            LOG( NORMAL, "SATENGINE:   Unknown response" )
hgs
parents:
diff changeset
   508
            break;
hgs
parents:
diff changeset
   509
            }
hgs
parents:
diff changeset
   510
        }
hgs
parents:
diff changeset
   511
hgs
parents:
diff changeset
   512
    LOG( SIMPLE,
hgs
parents:
diff changeset
   513
        "SATENGINE: CSatSIconSubSession::SendSetUpIdleModeResponse exiting" )
hgs
parents:
diff changeset
   514
    }
hgs
parents:
diff changeset
   515
hgs
parents:
diff changeset
   516
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   517
// CSatSIconSubSession::Write
hgs
parents:
diff changeset
   518
// Writes descriptor to client address space and panics the client if
hgs
parents:
diff changeset
   519
// writing fails.
hgs
parents:
diff changeset
   520
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   521
//
hgs
parents:
diff changeset
   522
void CSatSIconSubSession::Write( const RMessage2& aMessage,
hgs
parents:
diff changeset
   523
                                 TInt aParam,
hgs
parents:
diff changeset
   524
                                 const TDesC8& aDes ) const
hgs
parents:
diff changeset
   525
    {
hgs
parents:
diff changeset
   526
    LOG( SIMPLE, "SATENGINE: CSatSIconSubSession::Write calling" )
hgs
parents:
diff changeset
   527
hgs
parents:
diff changeset
   528
    TRAPD( err, aMessage.WriteL( aParam, aDes ) );
hgs
parents:
diff changeset
   529
    LOG2( SIMPLE, "SATENGINE: CSatSIconSubSession::Write \
hgs
parents:
diff changeset
   530
          err: %i", err )
hgs
parents:
diff changeset
   531
    if ( KErrNone != err )
hgs
parents:
diff changeset
   532
        {
hgs
parents:
diff changeset
   533
        iSession.PanicClient( aMessage, ESatSBadDescriptor );
hgs
parents:
diff changeset
   534
        }
hgs
parents:
diff changeset
   535
hgs
parents:
diff changeset
   536
    LOG( SIMPLE, "SATENGINE: CSatSIconSubSession::Write exiting" )
hgs
parents:
diff changeset
   537
    }
hgs
parents:
diff changeset
   538
hgs
parents:
diff changeset
   539
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   540
// CSatSIconSubSession::CompleteError
hgs
parents:
diff changeset
   541
// Completion of iMessage for handler
hgs
parents:
diff changeset
   542
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   543
//
hgs
parents:
diff changeset
   544
TInt CSatSIconSubSession::CompleteError( TInt aError ) const
hgs
parents:
diff changeset
   545
    {
hgs
parents:
diff changeset
   546
    LOG( SIMPLE, "SATENGINE: CSatSIconSubSession::CompleteError calling" )
hgs
parents:
diff changeset
   547
    TInt err( KErrCompletion );
hgs
parents:
diff changeset
   548
hgs
parents:
diff changeset
   549
    if ( NULL != iMessage.Handle() )
hgs
parents:
diff changeset
   550
        {
hgs
parents:
diff changeset
   551
        iMessage.Complete( aError );
hgs
parents:
diff changeset
   552
        LOG( SIMPLE, "SATENGINE: CSatSIconSubSession::CompleteError iMessage \
hgs
parents:
diff changeset
   553
            completed" )
hgs
parents:
diff changeset
   554
        err = KErrNone;
hgs
parents:
diff changeset
   555
        }
hgs
parents:
diff changeset
   556
hgs
parents:
diff changeset
   557
    LOG2( SIMPLE, "SATENGINE: CSatSIconSubSession::CompleteError exiting, \
hgs
parents:
diff changeset
   558
          err: %i", err )
hgs
parents:
diff changeset
   559
    return err;
hgs
parents:
diff changeset
   560
    }
hgs
parents:
diff changeset
   561
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   562
// Get icon fetching mode which is in synchronous or asynchronous mode.
hgs
parents:
diff changeset
   563
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   564
TBool CSatSIconSubSession::IconFetchingMode()
hgs
parents:
diff changeset
   565
    {
hgs
parents:
diff changeset
   566
    LOG( SIMPLE, "SATENGINE: CSatSIconSubSession::IconFetchingMode calling" )
hgs
parents:
diff changeset
   567
hgs
parents:
diff changeset
   568
    TInt cancelledUsingEndKey( 0 );
hgs
parents:
diff changeset
   569
    TBool isSyncMode( EFalse );
hgs
parents:
diff changeset
   570
    
hgs
parents:
diff changeset
   571
    TInt error = RProperty::Get( KPSUidSatServerInternal,
hgs
parents:
diff changeset
   572
        KSatAppClosedUsingEndKey, cancelledUsingEndKey );
hgs
parents:
diff changeset
   573
    
hgs
parents:
diff changeset
   574
    LOG2( SIMPLE, "SATENGINE: CSatSIconSubSession::IconFetchingMode \
hgs
parents:
diff changeset
   575
          P&S key: %i", cancelledUsingEndKey )
hgs
parents:
diff changeset
   576
        
hgs
parents:
diff changeset
   577
    LOG2( NORMAL,
hgs
parents:
diff changeset
   578
        "SATENGINE: CSatSIconSubSession::IconFetchingMode \
hgs
parents:
diff changeset
   579
        subscribe KSatUiCancelledUsingEndKey and return: %d", error )
hgs
parents:
diff changeset
   580
            
hgs
parents:
diff changeset
   581
    if ( cancelledUsingEndKey )
hgs
parents:
diff changeset
   582
        {
hgs
parents:
diff changeset
   583
        LOG( SIMPLE, "SATENGINE: CSatSIconSubSession::IconFetchingMode \
hgs
parents:
diff changeset
   584
             cancell UsingEndKey" )
hgs
parents:
diff changeset
   585
        isSyncMode = ETrue;
hgs
parents:
diff changeset
   586
        }
hgs
parents:
diff changeset
   587
    else
hgs
parents:
diff changeset
   588
        {
hgs
parents:
diff changeset
   589
        LOG( SIMPLE, "SATENGINE: CSatSIconSubSession::IconFetchingMode \
hgs
parents:
diff changeset
   590
             don't cancell UsingEndKey" )
hgs
parents:
diff changeset
   591
        isSyncMode = EFalse;
hgs
parents:
diff changeset
   592
        }
hgs
parents:
diff changeset
   593
        
hgs
parents:
diff changeset
   594
    LOG( SIMPLE, "SATENGINE: CSatSIconSubSession::IconFetchingMode exiting" )
hgs
parents:
diff changeset
   595
hgs
parents:
diff changeset
   596
    return isSyncMode;
hgs
parents:
diff changeset
   597
    }
hgs
parents:
diff changeset
   598
    
hgs
parents:
diff changeset
   599
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   600
// Notify CSatIconHandler to fetch icons from NAA synchronously or
hgs
parents:
diff changeset
   601
// asynchrounously.
hgs
parents:
diff changeset
   602
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   603
void CSatSIconSubSession::NotifyIconFetchingMode( TBool aMode )
hgs
parents:
diff changeset
   604
    {
hgs
parents:
diff changeset
   605
    LOG( SIMPLE, 
hgs
parents:
diff changeset
   606
        "SATENGINE: CSatSIconSubSession::NotifyIconFetchingMode calling" )
hgs
parents:
diff changeset
   607
hgs
parents:
diff changeset
   608
    iIconAPI->SetIconFetchingMode( aMode );
hgs
parents:
diff changeset
   609
hgs
parents:
diff changeset
   610
    if ( aMode )
hgs
parents:
diff changeset
   611
        {
hgs
parents:
diff changeset
   612
        TInt error = RProperty::Set( KPSUidSatServerInternal,
hgs
parents:
diff changeset
   613
            KSatAppClosedUsingEndKey, KSatAppTerminatedNormal );
hgs
parents:
diff changeset
   614
        LOG2( SIMPLE,"CSatSIconSubSession::NotifyIconFetchingMode \
hgs
parents:
diff changeset
   615
              P&S key: %i", KSatAppTerminatedNormal )
hgs
parents:
diff changeset
   616
            
hgs
parents:
diff changeset
   617
        LOG2( NORMAL,
hgs
parents:
diff changeset
   618
            "SATENGINE: CSatSIconSubSession::NotifyIconFetchingMode \
hgs
parents:
diff changeset
   619
            publish KSatUiCancelledUsingEndKey and return: %d", error )
hgs
parents:
diff changeset
   620
        }
hgs
parents:
diff changeset
   621
hgs
parents:
diff changeset
   622
    LOG( SIMPLE, 
hgs
parents:
diff changeset
   623
        "SATENGINE: CSatSIconSubSession::NotifyIconFetchingMode exiting" )
hgs
parents:
diff changeset
   624
    }