diff -r 6b1d113cdff3 -r 6638e7f4bd8f telephonyserverplugins/simatktsy/src/csaticontsy.cpp --- a/telephonyserverplugins/simatktsy/src/csaticontsy.cpp Mon May 03 13:37:20 2010 +0300 +++ b/telephonyserverplugins/simatktsy/src/csaticontsy.cpp Thu May 06 15:10:38 2010 +0100 @@ -1,579 +1,579 @@ -// Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). -// All rights reserved. -// This component and the accompanying materials are made available -// under the terms of "Eclipse Public License v1.0" -// which accompanies this distribution, and is available -// at the URL "http://www.eclipse.org/legal/epl-v10.html". -// -// Initial Contributors: -// Nokia Corporation - initial contribution. -// -// Contributors: -// -// Description: -// Name : CSatIconTsy.cpp -// Part of : Common SIM ATK TSY / commonsimatktsy -// Icon related functionality of Sat Tsy -// Version : 1.0 -// INCLUDES -// - - - -#include // ETel Ipcs -#include "cmmmessagemanagerbase.h" // Message manager class for forwarding req. -//#include // For icon color coding -#include "TfLogger.h" // For TFLOGSTRING - -#include "CSatDataPackage.h" // Parameter packing -#include "CSatIconTsy.h" // Class header -#include "CSatTsyReqHandleStore.h" -#include "msattsy_ipcdefs.h" // Sat Tsy specific request types - -#include - - -// ----------------------------------------------------------------------------- -// CSatIconTsy::NewL -// Two-phased constructor. -// ----------------------------------------------------------------------------- -// -CSatIconTsy* CSatIconTsy::NewL - ( - CSatTsy* aSatTsy - ) - { - TFLOGSTRING("CSAT: CSatIconTsy::NewL"); - CSatIconTsy* const satIconTsy = new ( ELeave ) CSatIconTsy(); - CleanupStack::PushL( satIconTsy ); - satIconTsy->iSatTsy = aSatTsy; - satIconTsy->ConstructL(); - CleanupStack::Pop( satIconTsy ); - TFLOGSTRING("CSAT: CSatIconTsy::NewL, end of method"); - return satIconTsy; - } - - -// ----------------------------------------------------------------------------- -// CSatIconTsy::~CSatIconTsy -// Destructor -// ----------------------------------------------------------------------------- -// -CSatIconTsy::~CSatIconTsy - ( - void - ) - { - TFLOGSTRING("CSAT: CSatIconTsy::~CSatIconTsy"); - // Unregister. - iSatTsy->MessageManager()->RegisterTsyObject( - CMmMessageManagerBase::ESatIconTsyObjType, NULL ); - } - -// ----------------------------------------------------------------------------- -// CSatIconTsy::ConstructL -// Symbian 2nd phase constructor. Initialises internal attributes. -// ----------------------------------------------------------------------------- -// -void CSatIconTsy::ConstructL - ( - void - ) - { - TFLOGSTRING("CSAT: CSatIconTsy::ConstructL\n" ); - iIconReqTypeOngoing = ERequestTypeUnknown; - // Register. - iSatTsy->MessageManager()->RegisterTsyObject( - CMmMessageManagerBase::ESatIconTsyObjType, this ); - - iIconData = NULL; - iRecordData.Zero(); - iImageInstanceNoInRecord = 0; - } - -// ----------------------------------------------------------------------------- -// CSatIconTsy::CSatIconTsy -// C++ constructor -// ----------------------------------------------------------------------------- -// -CSatIconTsy::CSatIconTsy - ( - void - ) - { - // None - } - -// ----------------------------------------------------------------------------- -// CSatIcon::DoExtFunc -// Icon specific functionality of CSatTsy::DoExtFuncL -// ----------------------------------------------------------------------------- -// -TInt CSatIconTsy::DoExtFuncL - ( - const TTsyReqHandle aTsyReqHandle, // Request handle - const TInt aIpc, // IPC number of request - const TDataPackage& aPackage // Contains parameters for request - ) - { - - TFLOGSTRING3("CSAT: CSatIconTsy::DoExtFuncL.\n \t\t\t IPC:%d\n \ - \t\t\t Handle:%d", aIpc, aTsyReqHandle); - - TInt ret( KErrNone ); - - TAny* dataPtr = aPackage.Ptr1(); - TAny* dataPtr2 = aPackage.Ptr2(); - - switch ( aIpc ) - { - case ESatGetIcon: - { - ret = GetIconL( aTsyReqHandle, - reinterpret_cast( dataPtr ), - reinterpret_cast( dataPtr2 ) ); - break; - } - case ESatGetImageInstance: - { - ret = GetImageInstanceL( aTsyReqHandle, - aPackage.Des1n(), aPackage.Des2n() ); - break; - } - case ESatGetClut: - { - ret = GetClutL( aTsyReqHandle, - reinterpret_cast( dataPtr ), - aPackage.Des2n() ); - break; - } - default: - { - TFLOGSTRING2("CSAT: CSatIconTsy::DoExtFuncL unsupported IPC %d", - aIpc); - break; - } - } - - return ret; - - } - -// ----------------------------------------------------------------------------- -// CSatIconTsy::CompleteGetIconData -// Completes GetIcon request -// ----------------------------------------------------------------------------- -// -void CSatIconTsy::CompleteGetIcon - ( - CSatDataPackage* aDataPackage, - TInt aResult - ) - { - TFLOGSTRING("CSAT: CSatIconTsy::CompleteGetIcon"); - TPtrC8* icon = NULL; - TInt iconLength = 0; - - // Unpack parameters - aDataPackage->UnPackData( &icon ); - iconLength = icon->Length(); - - // Reset req handle. Returns the deleted req handle. - TTsyReqHandle reqHandle = iSatTsy->GetSatReqHandleStore()-> - ResetTsyReqHandle( CSatTsy::ESatGetIconReqType ); - - // In case the request was ongoing, continue.. - if ( CSatTsy::ESatReqHandleUnknown != reqHandle ) - { - if ( KErrNone == aResult && iconLength ) - { - TFLOGSTRING2("CSAT: CSatIconTsy::CompleteGetIcon,\ - Icon data length: %d", iconLength); - // Check the size... - if ( iIconData->MaxLength() >= iconLength ) - { - iIconData->Copy( icon->Ptr(), iconLength ); - TFLOGSTRING2("CSAT: CSatIconTsy::CompleteGetIcon,\ - iIconData length: %d", iIconData->Length() ); - iRecordData.Copy( *iIconData ); - } - else // Data is too big for client's buffer - { - TFLOGSTRING("CSAT: CSatIconTsy::CompleteGetIcon,\ - Icon data length exceeded"); - aResult = KErrOverflow; - iIconData->Zero(); - } - } - else - { - TFLOGSTRING("CSAT: CSatIconTsy::CompleteGetIcon,\ - Error occured in LSAT, or Icon length is 0"); - // Reset the length - iIconData->Zero(); - } - - iIconData = NULL; - iSatTsy->ReqCompleted( reqHandle, aResult ); - } - } - -// ----------------------------------------------------------------------------- -// CSatIconTsy::CompleteGetImageInstance -// Completes GetImageInstance request -// ----------------------------------------------------------------------------- -// -void CSatIconTsy::CompleteGetImageInstance - ( - CSatDataPackage* aDataPackage, - TInt aResult - ) - { - TFLOGSTRING("CSAT: CSatIconTsy::CompleteGetImageInstance"); - TPtrC8* icon = NULL; - TDes8* info; - - // Unpack parameters - aDataPackage->UnPackData( &icon, &info ); - // Get icon data length - TUint8 iconLength = icon->Length(); - - // Reset req handle. Returns the deleted req handle. - TTsyReqHandle reqHandle = iSatTsy->GetSatReqHandleStore()-> - ResetTsyReqHandle( CSatTsy::ESatGetImageInstanceReqType ); - - // In case the request was ongoing, continue.. - if ( CSatTsy::ESatReqHandleUnknown != reqHandle ) - { - if ( KErrNone == aResult && iconLength > 0 ) - { - // Check the size.... - if ( iIconData->MaxLength() >= iconLength ) - { - TFLOGSTRING2("CSAT: CSatIconTsy::CompleteGetImageInstance,\ - Icon length: %d", iconLength); - // Icon body - if( info->Length() == KIconInfoLength ) - { - TInt colorCoding = iRecordData[ KImageCodingSchemeByteNr + - ( iImageInstanceNoInRecord - 1 ) * - KImageInstanceFileLength ]; - // There is difference in the header length - // between the color and b&w icons - if ( RSat::KBasic == colorCoding ) - { - TFLOGSTRING("CSAT: CSatIconTsy::\ - CompleteGetImageInstance,B&W"); - iIconData->Copy( ( *info ).Mid( 0, 2) ); - } - else - { - iIconData->Copy( *info ); - } - - iIconData->Append( *icon ); - } - // Clut and record - else - { - iIconData->Copy( *icon ); - } - } - else // Data is too big for client's buffer - { - TFLOGSTRING("CSAT: CSatIconTsy::CompleteGetImageInstance,\ - Icon length exceeded"); - aResult = KErrOverflow; - iIconData->Zero(); - } - } - else - { - TFLOGSTRING("CSAT: CSatIconTsy::CompleteGetImageInstance,\ - Error occured in LSAT or Icon length is 0"); - // Reset the length - iIconData->Zero(); - } - - iIconData = NULL; - iIconReqTypeOngoing = ERequestTypeUnknown; - - iSatTsy->ReqCompleted( reqHandle, aResult ); - } - } - -// ----------------------------------------------------------------------------- -// CSatIconTsy::CompleteGetClut -// Completes GetClut request -// ----------------------------------------------------------------------------- -// -void CSatIconTsy::CompleteGetClut - ( - CSatDataPackage* aDataPackage, - TInt aResult - ) - { - TFLOGSTRING("CSAT: CSatIconTsy::CompleteGetClut"); - TPtrC8* clut = NULL; - - // Unpack parameters - aDataPackage->UnPackData( &clut ); - - // Reset req handle. Returns the deleted req handle. - TTsyReqHandle reqHandle = iSatTsy->GetSatReqHandleStore()-> - ResetTsyReqHandle( CSatTsy::ESatGetClutReqType ); - - // In case the request was ongoing, continue.. - if ( CSatTsy::ESatReqHandleUnknown != reqHandle ) - { - if ( KErrNone == aResult && clut->Length() > 0) - { - // Check the size.... - if ( iIconData->MaxLength() >= clut->Length() ) - { - iIconData->Copy( *clut ); - } - else // Data is too big for client's buffer - { - TFLOGSTRING("CSAT: CSatIconTsy::CompleteGetClut,\ - Clut length exceeded"); - aResult = KErrOverflow; - iIconData->Zero(); - } - } - else - { - TFLOGSTRING("CSAT: CSatIconTsy::CompleteGetClut,\ - Error occured in LSAT or Icon length is 0"); - // Reset the length - iIconData->Zero(); - } - - iIconData = NULL; - iIconReqTypeOngoing = ERequestTypeUnknown; - - iSatTsy->ReqCompleted( reqHandle, aResult ); - } - } - -// ----------------------------------------------------------------------------- -// CSatIconTsy::GetIconL -// This method gets the content of the EF_IMG record specified -// by aRecordnumber -// ----------------------------------------------------------------------------- -// -TInt CSatIconTsy::GetIconL - ( - const TTsyReqHandle aTsyReqHandle, - TUint8* aRecordNumber, - RSat::TIcon* aIconEf - ) - { - TFLOGSTRING("CSAT: CSatIconTsy::GetIconL"); - TInt ret = KErrNone; - - iImageInstanceNoInRecord = 0; - - // Get possibly existing request handle - TTsyReqHandle reqHandle = iSatTsy->GetSatReqHandleStore()-> - TsyReqHandle( CSatTsy::ESatGetIconReqType ); - - // In case the request was ongoing, complete right away.. - if ( CSatTsy::ESatReqHandleUnknown != reqHandle ) - { - TFLOGSTRING("CSAT: CSatIcon::GetIconL, KErrServerBusy"); - iSatTsy->ReqCompleted( aTsyReqHandle, KErrServerBusy); - } - else - { - // Save the request handle - iSatTsy->SaveReqHandle( aTsyReqHandle, CSatTsy::ESatGetIconReqType ); - - iIconData = aIconEf; - iIconReqTypeOngoing = EGetIconReq; - iRecordNumber = *aRecordNumber; - - // Length is zero -> NAA will return all the contents of a given file - TUint16 length( 0 ); - - // If the Elementary File pointed by File ID is linear fixed or cyclic, - // then the least significant OffSet byte denotes the record number, - // while the most significant OffSet byte denotes the start byte within - // that record. - TUint8 highByte = *aRecordNumber; - TUint8 lowByte = 0x00; // Start byte - TUint16 offset( static_cast( ( highByte << 8 ) + lowByte ) ); - - // File ID - TBuf8 simFilePath; - - // The 16bit values are appended in little endian - // this is the correct way to map them into 8bit values - simFilePath.Append( TUint8 ( KMasterFile >> 8) ); - // lint -e{778} Constant expression evaluates to 0 in operation - simFilePath.Append( TUint8 ( KMasterFile & 0xff ) ); - simFilePath.Append( TUint8 ( KDedicatedFile >> 8) ); - simFilePath.Append( TUint8 ( KDedicatedFile & 0xff ) ); - simFilePath.Append( TUint8 ( KDedicatedFileGraphics >> 8) ); - simFilePath.Append( TUint8 ( KDedicatedFileGraphics & 0xff ) ); - simFilePath.Append( TUint8 ( KElementaryFileImg >> 8) ); - simFilePath.Append( TUint8 ( KElementaryFileImg & 0xff ) ); - - TIconInfo iconInfoPkg; - iconInfoPkg.iOffset = offset; - iconInfoPkg.iLength = length; - iconInfoPkg.iSimFilePath.Copy( simFilePath ); - - // Pack data - CSatDataPackage dataPackage; - dataPackage.PackData( &iconInfoPkg ); - ret = iSatTsy->MessageManager()->HandleRequestL( - ESatTsyGetIconData, &dataPackage ); - } - - return ret; - } - - -// ----------------------------------------------------------------------------- -// CSatIconTsy::GetImageInstanceL -// This method gets the image instance specified by the -// InstanceNumber, Offset and Length -// ----------------------------------------------------------------------------- -// -TInt CSatIconTsy::GetImageInstanceL - ( - const TTsyReqHandle aTsyReqHandle, - TDesC8* aInstanceInfo, - TDes8* aInstance - ) - { - TFLOGSTRING("CSAT: CSatIconTsy::GetImageInstanceL"); - TInt ret = KErrNone; - - // Get possibly existing request handle - TTsyReqHandle reqHandle = iSatTsy->GetSatReqHandleStore()-> - TsyReqHandle( CSatTsy::ESatGetImageInstanceReqType ); - - // In case the request was ongoing, complete right away.. - if ( CSatTsy::ESatReqHandleUnknown != reqHandle ) - { - TFLOGSTRING("CSAT: CSatIcon::GetImageInstanceL, KErrServerBusy"); - iSatTsy->ReqCompleted( aTsyReqHandle, KErrServerBusy); - } - else - { - TInt iconNumber = iRecordData[0]; - TBool iconFound( EFalse ); - TInt pos( KImageInstanceIdOffset ); - - // Save the request handle - iSatTsy->SaveReqHandle( aTsyReqHandle, - CSatTsy::ESatGetImageInstanceReqType ); - - iIconData = aInstance; - iIconReqTypeOngoing = EGetImageInstanceReq; - - RSat::TInstanceInfoV2Pckg* aPckg = REINTERPRET_CAST( - RSat::TInstanceInfoV2Pckg*, aInstanceInfo ); - RSat::TInstanceInfoV2& instanceInfo = ( *aPckg ) (); - - // Calculate position for icon imageinstance selected from record. - while( iconNumber && !iconFound ) - { - // If the instance number, offset and length of the previously - // received record data match with the one received from the - // client, it means that the icon is found and request can be made - if( ( static_cast( instanceInfo.iInstanceNumber ) == - static_cast( - iRecordData[ pos ] << 8 | iRecordData[ pos + 1 ] ) ) && - ( static_cast( instanceInfo.iOffset ) == - static_cast( - iRecordData[ pos + 2 ] << 8 | iRecordData[ pos + 3 ] ) ) && - ( static_cast( instanceInfo.iLength ) == - static_cast( - iRecordData[ pos + 4 ] << 8 | iRecordData[ pos + 5 ] ) ) ) - { - iconFound = ETrue; - } - - pos += KImageInstanceFileLength; - iconNumber--; - } - - iImageInstanceNoInRecord = iRecordData[0] - iconNumber; - - // Check icon data length - if( ( KIconDataMaxSize > instanceInfo.iLength ) && iconFound ) - { - TBuf8 data( 0 ); - data.Append( iRecordNumber ); - data.Append( iImageInstanceNoInRecord ); - // Pack data - CSatDataPackage dataPackage; - dataPackage.PackData( &data ); - ret = iSatTsy->MessageManager()->HandleRequestL( - ESatTsyGetImageInstance, &dataPackage ); - } - } - - return ret; - } - - -// ----------------------------------------------------------------------------- -// CSatIconTsy::GetClutL -// This method gets the CLUT (Color look-up table) specified -// by aInstanceNumber and Offset. -// ----------------------------------------------------------------------------- -// -TInt CSatIconTsy::GetClutL - ( - const TTsyReqHandle aTsyReqHandle, - RSat::TInstanceNumberAndOffset* /*aNumberAndOffset*/, - TDes8* aClut - ) - { - TFLOGSTRING("CSAT: CSatIconTsy::GetClutL"); - TInt ret = KErrNone; - - // Get possibly existing request handle - TTsyReqHandle reqHandle = iSatTsy->GetSatReqHandleStore()-> - TsyReqHandle( CSatTsy::ESatGetImageInstanceReqType ); - - // In case the request was ongoing, complete right away.. - if ( CSatTsy::ESatReqHandleUnknown != reqHandle ) - { - TFLOGSTRING("CSAT: CSatIcon::GetClutL : KErrServerBusy"); - iSatTsy->ReqCompleted( aTsyReqHandle, KErrServerBusy); - } - else - { - // Save the request handle - iSatTsy->SaveReqHandle( aTsyReqHandle, CSatTsy::ESatGetClutReqType ); - - iIconData = aClut; - iIconReqTypeOngoing = EGetClutReq; - - // Icon sequence number counted - // Check icon data length - if( KIconDataMaxSize > ( *aClut ).MaxLength() ) - { - TBuf8 data( 0 ); - data.Append( iRecordNumber ); - data.Append( iImageInstanceNoInRecord ); - // Pack data - CSatDataPackage dataPackage; - dataPackage.PackData( &data ); - ret = iSatTsy->MessageManager()->HandleRequestL( ESatTsyGetClut, - &dataPackage ); - } - } - - iImageInstanceNoInRecord = 0; - return ret; - } - -// End of File - - +// Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of "Eclipse Public License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.eclipse.org/legal/epl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// Name : CSatIconTsy.cpp +// Part of : Common SIM ATK TSY / commonsimatktsy +// Icon related functionality of Sat Tsy +// Version : 1.0 +// INCLUDES +// + + + +#include // ETel Ipcs +#include "cmmmessagemanagerbase.h" // Message manager class for forwarding req. +//#include // For icon color coding +#include "TfLogger.h" // For TFLOGSTRING + +#include "CSatDataPackage.h" // Parameter packing +#include "CSatIconTsy.h" // Class header +#include "CSatTsyReqHandleStore.h" +#include "msattsy_ipcdefs.h" // Sat Tsy specific request types + +#include + + +// ----------------------------------------------------------------------------- +// CSatIconTsy::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CSatIconTsy* CSatIconTsy::NewL + ( + CSatTsy* aSatTsy + ) + { + TFLOGSTRING("CSAT: CSatIconTsy::NewL"); + CSatIconTsy* const satIconTsy = new ( ELeave ) CSatIconTsy(); + CleanupStack::PushL( satIconTsy ); + satIconTsy->iSatTsy = aSatTsy; + satIconTsy->ConstructL(); + CleanupStack::Pop( satIconTsy ); + TFLOGSTRING("CSAT: CSatIconTsy::NewL, end of method"); + return satIconTsy; + } + + +// ----------------------------------------------------------------------------- +// CSatIconTsy::~CSatIconTsy +// Destructor +// ----------------------------------------------------------------------------- +// +CSatIconTsy::~CSatIconTsy + ( + void + ) + { + TFLOGSTRING("CSAT: CSatIconTsy::~CSatIconTsy"); + // Unregister. + iSatTsy->MessageManager()->RegisterTsyObject( + CMmMessageManagerBase::ESatIconTsyObjType, NULL ); + } + +// ----------------------------------------------------------------------------- +// CSatIconTsy::ConstructL +// Symbian 2nd phase constructor. Initialises internal attributes. +// ----------------------------------------------------------------------------- +// +void CSatIconTsy::ConstructL + ( + void + ) + { + TFLOGSTRING("CSAT: CSatIconTsy::ConstructL\n" ); + iIconReqTypeOngoing = ERequestTypeUnknown; + // Register. + iSatTsy->MessageManager()->RegisterTsyObject( + CMmMessageManagerBase::ESatIconTsyObjType, this ); + + iIconData = NULL; + iRecordData.Zero(); + iImageInstanceNoInRecord = 0; + } + +// ----------------------------------------------------------------------------- +// CSatIconTsy::CSatIconTsy +// C++ constructor +// ----------------------------------------------------------------------------- +// +CSatIconTsy::CSatIconTsy + ( + void + ) + { + // None + } + +// ----------------------------------------------------------------------------- +// CSatIcon::DoExtFunc +// Icon specific functionality of CSatTsy::DoExtFuncL +// ----------------------------------------------------------------------------- +// +TInt CSatIconTsy::DoExtFuncL + ( + const TTsyReqHandle aTsyReqHandle, // Request handle + const TInt aIpc, // IPC number of request + const TDataPackage& aPackage // Contains parameters for request + ) + { + + TFLOGSTRING3("CSAT: CSatIconTsy::DoExtFuncL.\n \t\t\t IPC:%d\n \ + \t\t\t Handle:%d", aIpc, aTsyReqHandle); + + TInt ret( KErrNone ); + + TAny* dataPtr = aPackage.Ptr1(); + TAny* dataPtr2 = aPackage.Ptr2(); + + switch ( aIpc ) + { + case ESatGetIcon: + { + ret = GetIconL( aTsyReqHandle, + reinterpret_cast( dataPtr ), + reinterpret_cast( dataPtr2 ) ); + break; + } + case ESatGetImageInstance: + { + ret = GetImageInstanceL( aTsyReqHandle, + aPackage.Des1n(), aPackage.Des2n() ); + break; + } + case ESatGetClut: + { + ret = GetClutL( aTsyReqHandle, + reinterpret_cast( dataPtr ), + aPackage.Des2n() ); + break; + } + default: + { + TFLOGSTRING2("CSAT: CSatIconTsy::DoExtFuncL unsupported IPC %d", + aIpc); + break; + } + } + + return ret; + + } + +// ----------------------------------------------------------------------------- +// CSatIconTsy::CompleteGetIconData +// Completes GetIcon request +// ----------------------------------------------------------------------------- +// +void CSatIconTsy::CompleteGetIcon + ( + CSatDataPackage* aDataPackage, + TInt aResult + ) + { + TFLOGSTRING("CSAT: CSatIconTsy::CompleteGetIcon"); + TPtrC8* icon = NULL; + TInt iconLength = 0; + + // Unpack parameters + aDataPackage->UnPackData( &icon ); + iconLength = icon->Length(); + + // Reset req handle. Returns the deleted req handle. + TTsyReqHandle reqHandle = iSatTsy->GetSatReqHandleStore()-> + ResetTsyReqHandle( CSatTsy::ESatGetIconReqType ); + + // In case the request was ongoing, continue.. + if ( CSatTsy::ESatReqHandleUnknown != reqHandle ) + { + if ( KErrNone == aResult && iconLength ) + { + TFLOGSTRING2("CSAT: CSatIconTsy::CompleteGetIcon,\ + Icon data length: %d", iconLength); + // Check the size... + if ( iIconData->MaxLength() >= iconLength ) + { + iIconData->Copy( icon->Ptr(), iconLength ); + TFLOGSTRING2("CSAT: CSatIconTsy::CompleteGetIcon,\ + iIconData length: %d", iIconData->Length() ); + iRecordData.Copy( *iIconData ); + } + else // Data is too big for client's buffer + { + TFLOGSTRING("CSAT: CSatIconTsy::CompleteGetIcon,\ + Icon data length exceeded"); + aResult = KErrOverflow; + iIconData->Zero(); + } + } + else + { + TFLOGSTRING("CSAT: CSatIconTsy::CompleteGetIcon,\ + Error occured in LSAT, or Icon length is 0"); + // Reset the length + iIconData->Zero(); + } + + iIconData = NULL; + iSatTsy->ReqCompleted( reqHandle, aResult ); + } + } + +// ----------------------------------------------------------------------------- +// CSatIconTsy::CompleteGetImageInstance +// Completes GetImageInstance request +// ----------------------------------------------------------------------------- +// +void CSatIconTsy::CompleteGetImageInstance + ( + CSatDataPackage* aDataPackage, + TInt aResult + ) + { + TFLOGSTRING("CSAT: CSatIconTsy::CompleteGetImageInstance"); + TPtrC8* icon = NULL; + TDes8* info; + + // Unpack parameters + aDataPackage->UnPackData( &icon, &info ); + // Get icon data length + TUint8 iconLength = icon->Length(); + + // Reset req handle. Returns the deleted req handle. + TTsyReqHandle reqHandle = iSatTsy->GetSatReqHandleStore()-> + ResetTsyReqHandle( CSatTsy::ESatGetImageInstanceReqType ); + + // In case the request was ongoing, continue.. + if ( CSatTsy::ESatReqHandleUnknown != reqHandle ) + { + if ( KErrNone == aResult && iconLength > 0 ) + { + // Check the size.... + if ( iIconData->MaxLength() >= iconLength ) + { + TFLOGSTRING2("CSAT: CSatIconTsy::CompleteGetImageInstance,\ + Icon length: %d", iconLength); + // Icon body + if( info->Length() == KIconInfoLength ) + { + TInt colorCoding = iRecordData[ KImageCodingSchemeByteNr + + ( iImageInstanceNoInRecord - 1 ) * + KImageInstanceFileLength ]; + // There is difference in the header length + // between the color and b&w icons + if ( RSat::KBasic == colorCoding ) + { + TFLOGSTRING("CSAT: CSatIconTsy::\ + CompleteGetImageInstance,B&W"); + iIconData->Copy( ( *info ).Mid( 0, 2) ); + } + else + { + iIconData->Copy( *info ); + } + + iIconData->Append( *icon ); + } + // Clut and record + else + { + iIconData->Copy( *icon ); + } + } + else // Data is too big for client's buffer + { + TFLOGSTRING("CSAT: CSatIconTsy::CompleteGetImageInstance,\ + Icon length exceeded"); + aResult = KErrOverflow; + iIconData->Zero(); + } + } + else + { + TFLOGSTRING("CSAT: CSatIconTsy::CompleteGetImageInstance,\ + Error occured in LSAT or Icon length is 0"); + // Reset the length + iIconData->Zero(); + } + + iIconData = NULL; + iIconReqTypeOngoing = ERequestTypeUnknown; + + iSatTsy->ReqCompleted( reqHandle, aResult ); + } + } + +// ----------------------------------------------------------------------------- +// CSatIconTsy::CompleteGetClut +// Completes GetClut request +// ----------------------------------------------------------------------------- +// +void CSatIconTsy::CompleteGetClut + ( + CSatDataPackage* aDataPackage, + TInt aResult + ) + { + TFLOGSTRING("CSAT: CSatIconTsy::CompleteGetClut"); + TPtrC8* clut = NULL; + + // Unpack parameters + aDataPackage->UnPackData( &clut ); + + // Reset req handle. Returns the deleted req handle. + TTsyReqHandle reqHandle = iSatTsy->GetSatReqHandleStore()-> + ResetTsyReqHandle( CSatTsy::ESatGetClutReqType ); + + // In case the request was ongoing, continue.. + if ( CSatTsy::ESatReqHandleUnknown != reqHandle ) + { + if ( KErrNone == aResult && clut->Length() > 0) + { + // Check the size.... + if ( iIconData->MaxLength() >= clut->Length() ) + { + iIconData->Copy( *clut ); + } + else // Data is too big for client's buffer + { + TFLOGSTRING("CSAT: CSatIconTsy::CompleteGetClut,\ + Clut length exceeded"); + aResult = KErrOverflow; + iIconData->Zero(); + } + } + else + { + TFLOGSTRING("CSAT: CSatIconTsy::CompleteGetClut,\ + Error occured in LSAT or Icon length is 0"); + // Reset the length + iIconData->Zero(); + } + + iIconData = NULL; + iIconReqTypeOngoing = ERequestTypeUnknown; + + iSatTsy->ReqCompleted( reqHandle, aResult ); + } + } + +// ----------------------------------------------------------------------------- +// CSatIconTsy::GetIconL +// This method gets the content of the EF_IMG record specified +// by aRecordnumber +// ----------------------------------------------------------------------------- +// +TInt CSatIconTsy::GetIconL + ( + const TTsyReqHandle aTsyReqHandle, + TUint8* aRecordNumber, + RSat::TIcon* aIconEf + ) + { + TFLOGSTRING("CSAT: CSatIconTsy::GetIconL"); + TInt ret = KErrNone; + + iImageInstanceNoInRecord = 0; + + // Get possibly existing request handle + TTsyReqHandle reqHandle = iSatTsy->GetSatReqHandleStore()-> + TsyReqHandle( CSatTsy::ESatGetIconReqType ); + + // In case the request was ongoing, complete right away.. + if ( CSatTsy::ESatReqHandleUnknown != reqHandle ) + { + TFLOGSTRING("CSAT: CSatIcon::GetIconL, KErrServerBusy"); + iSatTsy->ReqCompleted( aTsyReqHandle, KErrServerBusy); + } + else + { + // Save the request handle + iSatTsy->SaveReqHandle( aTsyReqHandle, CSatTsy::ESatGetIconReqType ); + + iIconData = aIconEf; + iIconReqTypeOngoing = EGetIconReq; + iRecordNumber = *aRecordNumber; + + // Length is zero -> NAA will return all the contents of a given file + TUint16 length( 0 ); + + // If the Elementary File pointed by File ID is linear fixed or cyclic, + // then the least significant OffSet byte denotes the record number, + // while the most significant OffSet byte denotes the start byte within + // that record. + TUint8 highByte = *aRecordNumber; + TUint8 lowByte = 0x00; // Start byte + TUint16 offset( static_cast( ( highByte << 8 ) + lowByte ) ); + + // File ID + TBuf8 simFilePath; + + // The 16bit values are appended in little endian + // this is the correct way to map them into 8bit values + simFilePath.Append( TUint8 ( KMasterFile >> 8) ); + // lint -e{778} Constant expression evaluates to 0 in operation + simFilePath.Append( TUint8 ( KMasterFile & 0xff ) ); + simFilePath.Append( TUint8 ( KDedicatedFile >> 8) ); + simFilePath.Append( TUint8 ( KDedicatedFile & 0xff ) ); + simFilePath.Append( TUint8 ( KDedicatedFileGraphics >> 8) ); + simFilePath.Append( TUint8 ( KDedicatedFileGraphics & 0xff ) ); + simFilePath.Append( TUint8 ( KElementaryFileImg >> 8) ); + simFilePath.Append( TUint8 ( KElementaryFileImg & 0xff ) ); + + TIconInfo iconInfoPkg; + iconInfoPkg.iOffset = offset; + iconInfoPkg.iLength = length; + iconInfoPkg.iSimFilePath.Copy( simFilePath ); + + // Pack data + CSatDataPackage dataPackage; + dataPackage.PackData( &iconInfoPkg ); + ret = iSatTsy->MessageManager()->HandleRequestL( + ESatTsyGetIconData, &dataPackage ); + } + + return ret; + } + + +// ----------------------------------------------------------------------------- +// CSatIconTsy::GetImageInstanceL +// This method gets the image instance specified by the +// InstanceNumber, Offset and Length +// ----------------------------------------------------------------------------- +// +TInt CSatIconTsy::GetImageInstanceL + ( + const TTsyReqHandle aTsyReqHandle, + TDesC8* aInstanceInfo, + TDes8* aInstance + ) + { + TFLOGSTRING("CSAT: CSatIconTsy::GetImageInstanceL"); + TInt ret = KErrNone; + + // Get possibly existing request handle + TTsyReqHandle reqHandle = iSatTsy->GetSatReqHandleStore()-> + TsyReqHandle( CSatTsy::ESatGetImageInstanceReqType ); + + // In case the request was ongoing, complete right away.. + if ( CSatTsy::ESatReqHandleUnknown != reqHandle ) + { + TFLOGSTRING("CSAT: CSatIcon::GetImageInstanceL, KErrServerBusy"); + iSatTsy->ReqCompleted( aTsyReqHandle, KErrServerBusy); + } + else + { + TInt iconNumber = iRecordData[0]; + TBool iconFound( EFalse ); + TInt pos( KImageInstanceIdOffset ); + + // Save the request handle + iSatTsy->SaveReqHandle( aTsyReqHandle, + CSatTsy::ESatGetImageInstanceReqType ); + + iIconData = aInstance; + iIconReqTypeOngoing = EGetImageInstanceReq; + + RSat::TInstanceInfoV2Pckg* aPckg = REINTERPRET_CAST( + RSat::TInstanceInfoV2Pckg*, aInstanceInfo ); + RSat::TInstanceInfoV2& instanceInfo = ( *aPckg ) (); + + // Calculate position for icon imageinstance selected from record. + while( iconNumber && !iconFound ) + { + // If the instance number, offset and length of the previously + // received record data match with the one received from the + // client, it means that the icon is found and request can be made + if( ( static_cast( instanceInfo.iInstanceNumber ) == + static_cast( + iRecordData[ pos ] << 8 | iRecordData[ pos + 1 ] ) ) && + ( static_cast( instanceInfo.iOffset ) == + static_cast( + iRecordData[ pos + 2 ] << 8 | iRecordData[ pos + 3 ] ) ) && + ( static_cast( instanceInfo.iLength ) == + static_cast( + iRecordData[ pos + 4 ] << 8 | iRecordData[ pos + 5 ] ) ) ) + { + iconFound = ETrue; + } + + pos += KImageInstanceFileLength; + iconNumber--; + } + + iImageInstanceNoInRecord = iRecordData[0] - iconNumber; + + // Check icon data length + if( ( KIconDataMaxSize > instanceInfo.iLength ) && iconFound ) + { + TBuf8 data( 0 ); + data.Append( iRecordNumber ); + data.Append( iImageInstanceNoInRecord ); + // Pack data + CSatDataPackage dataPackage; + dataPackage.PackData( &data ); + ret = iSatTsy->MessageManager()->HandleRequestL( + ESatTsyGetImageInstance, &dataPackage ); + } + } + + return ret; + } + + +// ----------------------------------------------------------------------------- +// CSatIconTsy::GetClutL +// This method gets the CLUT (Color look-up table) specified +// by aInstanceNumber and Offset. +// ----------------------------------------------------------------------------- +// +TInt CSatIconTsy::GetClutL + ( + const TTsyReqHandle aTsyReqHandle, + RSat::TInstanceNumberAndOffset* /*aNumberAndOffset*/, + TDes8* aClut + ) + { + TFLOGSTRING("CSAT: CSatIconTsy::GetClutL"); + TInt ret = KErrNone; + + // Get possibly existing request handle + TTsyReqHandle reqHandle = iSatTsy->GetSatReqHandleStore()-> + TsyReqHandle( CSatTsy::ESatGetImageInstanceReqType ); + + // In case the request was ongoing, complete right away.. + if ( CSatTsy::ESatReqHandleUnknown != reqHandle ) + { + TFLOGSTRING("CSAT: CSatIcon::GetClutL : KErrServerBusy"); + iSatTsy->ReqCompleted( aTsyReqHandle, KErrServerBusy); + } + else + { + // Save the request handle + iSatTsy->SaveReqHandle( aTsyReqHandle, CSatTsy::ESatGetClutReqType ); + + iIconData = aClut; + iIconReqTypeOngoing = EGetClutReq; + + // Icon sequence number counted + // Check icon data length + if( KIconDataMaxSize > ( *aClut ).MaxLength() ) + { + TBuf8 data( 0 ); + data.Append( iRecordNumber ); + data.Append( iImageInstanceNoInRecord ); + // Pack data + CSatDataPackage dataPackage; + dataPackage.PackData( &data ); + ret = iSatTsy->MessageManager()->HandleRequestL( ESatTsyGetClut, + &dataPackage ); + } + } + + iImageInstanceNoInRecord = 0; + return ret; + } + +// End of File + +