mmhais/refacladapt/src/audiocodec/resourcedata.cpp
author hgs
Wed, 13 Oct 2010 12:08:48 +0100
changeset 3 28bdc4aca325
parent 0 79dd3e2336a0
permissions -rw-r--r--
2010wk42_01
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
     1
//audiocodec.cpp
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
     2
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
     3
// Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
     4
// All rights reserved.
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
     5
// This component and the accompanying materials are made available
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
     6
// under the terms of "Eclipse Public License v1.0"
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
     7
// which accompanies this distribution, and is available
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
     8
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
     9
//
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    10
// Initial Contributors:
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    11
// Nokia Corporation - initial contribution.
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    12
//
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    13
// Contributors:
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    14
//
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    15
// Description:
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    16
//
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    17
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    18
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    19
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    20
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    21
// INCLUDES
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    22
#include "resourcedata.h"
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    23
#include <barsc.h>
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    24
#include <a3f/a3f_trace_utils.h>
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    25
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    26
_LIT(KDC_RESOURCE_FILES_DIR, "\\resource\\a3f\\");
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    27
const TInt KAssumedResourceId =1;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    28
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    29
const TSampleRateTableEntry KRateTableLookup[] = {
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    30
							{ 8000, EMMFSampleRate8000Hz },
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    31
							{ 11025, EMMFSampleRate11025Hz },
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    32
							{ 12000, EMMFSampleRate12000Hz },
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    33
							{ 16000, EMMFSampleRate16000Hz },
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    34
							{ 22050, EMMFSampleRate22050Hz },
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    35
							{ 24000, EMMFSampleRate24000Hz },
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    36
							{ 32000, EMMFSampleRate32000Hz },
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    37
							{ 44100, EMMFSampleRate44100Hz },
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    38
							{ 48000, EMMFSampleRate48000Hz },
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    39
							{ 64000, EMMFSampleRate64000Hz },
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    40
							{ 88200, EMMFSampleRate88200Hz },
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    41
							{ 96000, EMMFSampleRate96000Hz },
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    42
						};
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    43
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    44
const TAudioModeTableEntry KModeTableLookup[] = {
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    45
							{ EMMFMono, {KA3FModeMonoValue} },
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    46
							{ EMMFStereo, {KA3FModeStereoNonInterleavedValue} },
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    47
							};
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    48
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    49
const TInt KMaxSampleRateIndex = 11;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    50
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    51
// ============================ MEMBER FUNCTIONS ===============================
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    52
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    53
CResourceData::CResourceData()
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    54
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    55
	TRACE_CREATE();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    56
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    57
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    58
// -----------------------------------------------------------------------------
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    59
// CResourceData::NewL
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    60
// Two-phased constructor.
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    61
// -----------------------------------------------------------------------------
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    62
//
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    63
CResourceData* CResourceData::NewL(TUid aResourceUid)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    64
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    65
	DP_STATIC_CONTEXT( CResourceData::NewL *CD0*, CtxDevSound, DPAPI);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    66
	DP1_IN("aResourceUid = 0x%x", aResourceUid);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    67
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    68
	CResourceData* obj = NULL;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    69
	obj = new ( ELeave ) CResourceData;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    70
	CleanupStack::PushL( obj );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    71
	obj->ConstructL( aResourceUid );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    72
	CleanupStack::Pop(obj);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    73
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    74
	DP0_RET(obj, "obj = 0x%x" );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    75
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    76
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    77
// -----------------------------------------------------------------------------
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    78
// CResourceData::~CResourceData
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    79
// Destructor.
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    80
// -----------------------------------------------------------------------------
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    81
//
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    82
CResourceData::~CResourceData()
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    83
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    84
	DP_CONTEXT(CResourceData::~CResourceData *CD1*, CtxDevSound, DPLOCAL);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    85
	DP_IN();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    86
	delete iResourceData;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    87
	DP_OUT();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    88
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    89
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    90
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    91
// -----------------------------------------------------------------------------
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    92
// CResourceData::GetSModes
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    93
// Reads the capabilities data.
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    94
// -----------------------------------------------------------------------------
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    95
//
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    96
TInt CResourceData::GetSModes(TMode aMode, RArray<TUid>& aModeConfig)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    97
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    98
	DP_CONTEXT( CResourceData::GetSampleModes *CD1*, CtxDevSound, DPLOCAL );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    99
	DP1_IN( "TMode aMode = 0x%x", aMode );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   100
	TInt ret = SeekToMode(aMode);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   101
	if (ret != KErrNone)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   102
		{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   103
		DP0_RET(ret, "%d");
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   104
		}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   105
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   106
	// capability data size
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   107
	TInt capDataSize = iResourceReader.ReadInt16();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   108
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   109
	// sanity check for cap data size
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   110
	if (iResourceReader.Ptr() > iResourceDataEnd-capDataSize)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   111
		{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   112
		DP0( DLERR, "Pointer mismatch with cap data" );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   113
		DP0_RET(KErrCorrupt, "KErrCorrupt" );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   114
		}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   115
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   116
	//Getting new Capabilities so clean the array.
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   117
	aModeConfig.Reset();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   118
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   119
	TInt tempSampleRate = iResourceReader.ReadInt32();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   120
	TInt tempEnconding = iResourceReader.ReadInt32();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   121
	TInt tempMode = iResourceReader.ReadInt32();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   122
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   123
	TInt err(KErrNone);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   124
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   125
	for (TUint i=0; i<=KMaxModeIndex; i++)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   126
		{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   127
		if((KModeTableLookup[i].iAudioModeValue) & tempMode)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   128
			{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   129
			err = aModeConfig.Append(KModeTableLookup[i].iAudioMode);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   130
			if (err != KErrNone)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   131
				{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   132
				break;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   133
				}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   134
			}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   135
		}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   136
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   137
	DP0_RET(err, "");
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   138
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   139
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   140
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   141
// -----------------------------------------------------------------------------
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   142
// CResourceData::GetSSampleRates
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   143
// Reads the capabilities data.
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   144
// -----------------------------------------------------------------------------
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   145
//
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   146
TInt CResourceData::GetSSampleRates(TMode aMode, RArray<TInt>& aSampleRateConfig)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   147
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   148
	DP_CONTEXT( CResourceData::GetSSampleRates *CD1*, CtxDevSound, DPLOCAL );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   149
	DP1_IN( "TMode aMode = 0x%x", aMode );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   150
	//TODO to be change every hwdevice is either decode or encode
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   151
	//By the moment The same resource file has both modes
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   152
	TInt ret = SeekToMode(aMode);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   153
	if (ret != KErrNone)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   154
		{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   155
		DP0_RET(ret, "%d");
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   156
		}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   157
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   158
	// capability data size
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   159
	TInt capDataSize = iResourceReader.ReadInt16();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   160
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   161
	// sanity check for cap data size
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   162
	if (iResourceReader.Ptr() > iResourceDataEnd-capDataSize)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   163
		{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   164
		DP0( DLERR, "Pointer mismatch with cap data" );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   165
		DP0_RET(KErrCorrupt, "KErrCorrupt" );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   166
		}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   167
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   168
	//Getting new Capabilities so clean the array.
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   169
	aSampleRateConfig.Reset();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   170
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   171
	TInt tempSampleRate = iResourceReader.ReadInt32();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   172
	TInt err(KErrNone);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   173
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   174
	for (TUint i=0; i<=KMaxSampleRateIndex; i++)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   175
		{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   176
		if(KRateTableLookup[i].iSampleRate & tempSampleRate)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   177
			{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   178
			err = aSampleRateConfig.Append(KRateTableLookup[i].iSampleRateValue);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   179
			if (err != KErrNone)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   180
				{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   181
				break;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   182
				}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   183
			}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   184
		}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   185
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   186
	DP0_RET(err, "");
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   187
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   188
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   189
// -----------------------------------------------------------------------------
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   190
// CResourceData::ConstructL
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   191
// Symbian 2nd phase constructor can leave.
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   192
// Reads the resource file for the correct UID.
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   193
// -----------------------------------------------------------------------------
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   194
//
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   195
void CResourceData::ConstructL(TUid aResourceUid)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   196
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   197
	DP_CONTEXT( CResourceData::ConstructL *CD1*, CtxDevSound, DPLOCAL );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   198
	DP1_IN( "aResourceUid = 0x%x", aResourceUid );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   199
	// Open a file server session.
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   200
	RFs fs;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   201
	User::LeaveIfError( fs.Connect() );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   202
	CleanupClosePushL( fs );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   203
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   204
	TBuf16<KResFileNameLength> fileName;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   205
	TBuf16<KResFileNameAndPathLength> pathAndFileName (KDrive); // Z:
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   206
	fileName.Format(KFileNameFormat,aResourceUid.iUid); // HwDev0x<UID>
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   207
	pathAndFileName.Append(KDC_RESOURCE_FILES_DIR); /*  \\resource\\ */
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   208
	pathAndFileName.Append(fileName); // HwDevxxx.rsc
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   209
	pathAndFileName.ZeroTerminate();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   210
	HBufC16* fileNamePtr = pathAndFileName.AllocL();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   211
	CleanupStack::PushL( fileNamePtr );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   212
	RResourceFile rscFile;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   213
	rscFile.OpenL(fs, fileNamePtr->Des());
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   214
	CleanupClosePushL(rscFile);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   215
	// read the resource data
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   216
	iResourceData = rscFile.AllocReadL(KAssumedResourceId);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   217
	// initialize the reader
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   218
	iResourceReader.SetBuffer( iResourceData );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   219
	iResourceUid =  aResourceUid;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   220
	CleanupStack::PopAndDestroy( 3, &fs ); // fs, fileNamePtr,rscFile
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   221
	DP_OUT();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   222
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   223
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   224
// -----------------------------------------------------------------------------
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   225
// CResourceData::SeekToMode
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   226
// Utility method for seeking resource to the correct mode. Leaves with
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   227
// KErrNotFound if mode is not found in the opened resource.
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   228
// -----------------------------------------------------------------------------
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   229
//
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   230
TInt CResourceData::SeekToMode(TMode aMode)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   231
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   232
	DP_CONTEXT( CResourceData::SeekToMode *CD1*, CtxDevSound, DPLOCAL );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   233
	DP1_IN( "aMode = 0x%x", aMode );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   234
	// set buffer position to beginning
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   235
	iResourceReader.SetBuffer(iResourceData);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   236
	// read the resource uid
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   237
	TUid resourceUid = {iResourceReader.ReadInt32()};
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   238
	if (resourceUid != iResourceUid)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   239
		{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   240
		DP2( DLERR, "Mismatching resource uids resourceUid = %x iResourceUid = %x",resourceUid.iUid,iResourceUid.iUid );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   241
		DP0_RET(KErrCorrupt, "KErrCorrupt" );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   242
		}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   243
	// read the number of mode-entries in the resource
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   244
	TInt modeCount = iResourceReader.ReadInt16();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   245
	for (TInt modeIndex = 0; modeIndex < modeCount; modeIndex++)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   246
		{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   247
		// read the mode number
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   248
		TMode mode = (TMode) iResourceReader.ReadInt32();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   249
		if (mode == aMode)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   250
			{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   251
			DP0_RET(KErrNone, "" );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   252
			}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   253
		// capability data size
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   254
		TInt capDataSize = iResourceReader.ReadInt16();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   255
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   256
		// skip capability data
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   257
		if (iResourceReader.Ptr() > iResourceDataEnd-capDataSize)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   258
			{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   259
			DP0( DLERR, "Pointer mismatch with cap data" );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   260
			DP0_RET(KErrCorrupt, "KErrCorrupt" );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   261
			}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   262
		iResourceReader.Advance( capDataSize );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   263
		}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   264
	// not found
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   265
	DP1( DLERR, "Mode 0x%x not found?", aMode );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   266
	DP0_RET(KErrNotFound, "KErrNotFound" );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   267
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   268
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   269