?? smbmusicapfilemgrrscmgr.cpp
字號:
/* Copyright (C) 2007 Sony Ericsson Mobile Communications Japan, Inc. */
/*-------------------------------------------------------------------------*/
// FileName:
// CSmbMusicAPFileMgrRscMgr.cpp
//
// Description:
// 儈儏乕僕僢僋僼傽僀儖娗棟儕僜乕僗儅僱乕僕儍僋儔僗
/*-------------------------------------------------------------------------*/
//曄峏棜楌
//擔(dān)晅 |曄峏幰 |撪梕
//------------------+---------------+----------------------------------------
//2007/03/08 |SEMC崍綺 |怴婯嶌惉
//2007/03/19 |SEMC崍綺 |儕僜乕僗庢摼忬懺傪捛壛/慡儕僜乕僗僉儍儞僙儖
//2007/04/04 |SEMC崍綺 |儊儌儕儌乕僪儕僜乕僗庢摼幚憰
//------------------+---------------+----------------------------------------
#include "SmbMusicAPFileMgrRscMgr.h"
#include "SmbMusicAPFileMgrDebugLog.h"
#ifndef __SMBMUSICAPFILEMGREXTERNALINTERFACE_H__
#include "SmbMusicAPFileMgrExternalInterface.h"
#endif
USING_NAMESPACE_DCM
USING_NAMESPACE_SEMCJ
///////////////////////////////////////////////////////////////////////////////
/**
僼傽僋僩儕娭悢
* @param 側(cè)偟
* @return 惗惉偟偨僋儔僗偺億僀儞僞
*/
CSmbMusicAPFileMgrRscMgr* CSmbMusicAPFileMgrRscMgr::NewL(MObserver& aObserver)
{
CSmbMusicAPFileMgrRscMgr* self = new(ELeave) CSmbMusicAPFileMgrRscMgr(aObserver);
CleanupStack::PushL(self);
self->ConstructL();
CleanupStack::Pop(self);
return self;
}
/**
* 僐儞僗僩儔僋僞
*/
CSmbMusicAPFileMgrRscMgr::CSmbMusicAPFileMgrRscMgr(MObserver& aObserver)
: iRscMgrRscClient(NULL), iRscResultList(NULL), iObserver(aObserver), iRscStateArray(NULL), iCategory(KErrNotFound)
{
// 摿偵壗傕張棟偟側(cè)偄
}
/**
* 2僼僃乕僘僐儞僗僩儔僋僞
*/
void CSmbMusicAPFileMgrRscMgr::ConstructL()
{
// 儕僜乕僗嫞崌FW惗惉
iRscMgrRscClient = CSmbRscMgrRscClient::NewL(this, this, KSmbMusicAPFileMgrUid);
//忬懺娗棟傾儗僀惗惉
iRscStateArray = new (ELeave) CArrayFixFlat<TSmbMusicAPFileMgrRscMgrState>(ECategoryMax);
//弶婜壔
for(TInt i = 0; i < ECategoryMax; i++)
{
iRscStateArray->AppendL(ERscMgrRscNone);
}
}
/**
* 僨僗僩儔僋僞
*/
CSmbMusicAPFileMgrRscMgr::~CSmbMusicAPFileMgrRscMgr()
{
delete iRscMgrRscClient;
delete iRscResultList;
delete iRscStateArray;
}
/**
* 儕僜乕僗梫媮
*/
TInt CSmbMusicAPFileMgrRscMgr::RequestAllocResourceL(TSmbMusicAPFileMgrRscMgrCategory aCategory)
{
OUTPUT_FUNC;
//梫媮儕僜乕僗ID僙僢僩
TSmbRscMgrRscPriority rscPriority;
switch(aCategory)
{
case ESmbMusicAPFileMgrRscMgrSDBindRscCategory: //SDBind儕僜乕僗梫媮
rscPriority.iRscId = ESmbRscMgrRscSdKeyBind; // SD(Bind)
rscPriority.iPriority = KSmbRscMgrRscPriorityValueLow;
iCategory = ESDBindRscCategory;
break;
case ESmbMusicAPFileMgrRscMgrMemoryModeRscCategory: //儊儌儕儌乕僪儕僜乕僗梫媮
rscPriority.iRscId = ESmbRscMgrRscExtMemoryAccess; // 儊儌儕儌乕僪
rscPriority.iPriority = KSmbRscMgrRscPriorityValueNormal;
iCategory = EMemoryModeRscCategory;
break;
case ESmbMusicAPFileMgrRscMgrMTPModeRscCategory: //MTP儌乕僪儕僜乕僗梫媮
rscPriority.iRscId = ESmbRscMgrRscMTPModeForInternal; // MTP儌乕僪
rscPriority.iPriority = KSmbRscMgrRscPriorityValueNormal;
iCategory = EMTPModeRscCategory;
break;
default:
//堎忢宯
//儘僌弌椡
OUTPUT_LOG_ERROR("CSmbMusicAPFileMgrRscMgr::RequestAllocResourceSyncL()[NG!]");
return KErrArgument;
}
//儕僜乕僗庢摼嵪傒偺応崌
if(ERscMgrAllocRsc == State(iCategory))
{
//儕僜乕僗庢摼嵪傒偺応崌偼惓忢宯偲偟偰僴儞僪儕儞僌
iCategory = KErrNotFound;
return KErrInUse;
}
//儕僜乕僗枹庢摼忬懺埲奜偺応崌
if(ERscMgrRscNone != State(iCategory))
{
OUTPUT_LOG_MUST("ERROR::ERscMgrRscNone != iRscMgrState");
iCategory = KErrNotFound;
return KErrServerBusy;
}
//妉摼儕僜乕僗儕僗僩惗惉
CArrayFixFlat<TSmbRscMgrRscPriority>* rscPriorityList = new (ELeave) CArrayFixFlat<TSmbRscMgrRscPriority>(KSmbRscMgrAppRscListMax);
CleanupStack::PushL(rscPriorityList);
//惗惉嵪傒側(cè)傜偽堦扷嶍彍偟偰惗惉
if (NULL != iRscResultList)
{
delete iRscResultList;
iRscResultList = NULL;
}
iRscResultList = new (ELeave) CArrayFixFlat<TSmbRscMgrRscAllocId>(KSmbRscMgrAppRscListMax);
//梫媮儕僜乕僗傪Append
rscPriorityList->AppendL(rscPriority);
//儕僜乕僗妉摼梫媮
TSmbRscMgrRes rscMgrRes = iRscMgrRscClient->AllocationResourceReqL(rscPriorityList, iRscResultList);
CleanupStack::PopAndDestroy(); //rscPriorityList
if(ESmbRscMgrResultOK != rscMgrRes)
{
//儘僌弌椡
OUTPUT_LOG("CSmbMusicAPFileMgrRscMgr::RequestAllocResourceL()[NG!]");
iCategory = KErrNotFound;
return KErrGeneral;
}
//儕僜乕僗梫媮拞忬懺偵僙僢僩
SetState(iCategory, ERscMgrRequestRscBusy);
return KErrNone;
}
/**
* 儕僜乕僗梫媮乮摨婜乯
*/
TInt CSmbMusicAPFileMgrRscMgr::RequestAllocResourceSyncL(TSmbMusicAPFileMgrRscMgrCategory aCategory, TSmbMusicAPFileMgrRscMgrResponse& aRes)
{
OUTPUT_FUNC;
//梫媮儕僜乕僗ID僙僢僩
TSmbRscMgrRscPriority rscPriority;
TInt category = KErrNotFound;
switch(aCategory)
{
case ESmbMusicAPFileMgrRscMgrSDBindRscCategory: //SDBind儕僜乕僗梫媮
rscPriority.iRscId = ESmbRscMgrRscSdKeyBind; // SD(Bind)
rscPriority.iPriority = KSmbRscMgrRscPriorityValueLow;
category = ESDBindRscCategory;
break;
case ESmbMusicAPFileMgrRscMgrMemoryModeRscCategory: //儊儌儕儌乕僪儕僜乕僗梫媮
rscPriority.iRscId = ESmbRscMgrRscExtMemoryAccess; // 儊儌儕儌乕僪
rscPriority.iPriority = KSmbRscMgrRscPriorityValueNormal;
category = EMemoryModeRscCategory;
break;
case ESmbMusicAPFileMgrRscMgrMTPModeRscCategory: //MTP儌乕僪儕僜乕僗梫媮
rscPriority.iRscId = ESmbRscMgrRscMTPModeForInternal; // MTP儌乕僪
rscPriority.iPriority = KSmbRscMgrRscPriorityValueNormal;
category = EMTPModeRscCategory;
break;
default:
//堎忢宯
//儘僌弌椡
OUTPUT_LOG_ERROR("CSmbMusicAPFileMgrRscMgr::RequestAllocResourceSyncL()[NG!]");
return KErrArgument;
}
//儕僜乕僗庢摼嵪傒偺応崌
if(ERscMgrAllocRsc == State(category))
{
//丂張棟寢壥
aRes = ConvertResultRes(category, ESmbRscMgrRscResultOK);
return KErrNone;
}
//儕僜乕僗庢摼拞忬懺偺応崌
if(ERscMgrRscNone != State(category))
{
OUTPUT_LOG_MUST("ERROR::ERscMgrRscNone != iRscMgrState");
return KErrServerBusy;
}
//妉摼儕僜乕僗儕僗僩惗惉
CArrayFixFlat<TSmbRscMgrRscPriority>* rscPriorityList = new (ELeave) CArrayFixFlat<TSmbRscMgrRscPriority>(KSmbRscMgrAppRscListMax);
CleanupStack::PushL(rscPriorityList);
//惗惉嵪傒側(cè)傜偽堦扷嶍彍偟偰惗惉
if (NULL != iRscResultList)
{
delete iRscResultList;
iRscResultList = NULL;
}
iRscResultList = new (ELeave) CArrayFixFlat<TSmbRscMgrRscAllocId>(KSmbRscMgrAppRscListMax);
//梫媮儕僜乕僗傪Append
rscPriorityList->AppendL(rscPriority);
//儕僜乕僗妉摼梫媮
TSmbRscMgrRscResult result;
TSmbRscMgrRes rscMgrRes = iRscMgrRscClient->AllocationResourceReqSyncL(rscPriorityList, iRscResultList, result);
CleanupStack::PopAndDestroy(); //rscPriorityList
if(ESmbRscMgrResultOK != rscMgrRes)
{
//儘僌弌椡
OUTPUT_LOG("CSmbMusicAPFileMgrRscMgr::RequestAllocResourceL()[NG!]");
return KErrGeneral;
}
//丂張棟寢壥
aRes = ConvertResultRes(category, result);
return KErrNone;
}
/**
* 儕僜乕僗奐曻
*/
void CSmbMusicAPFileMgrRscMgr::ReleaseResourceL(TSmbMusicAPFileMgrRscMgrCategory aCategory)
{
OUTPUT_FUNC;
if (NULL != iRscResultList)
{
//夝曻儕僜乕僗ID僙僢僩
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -