diff -r 000000000000 -r cec860690d41 haitest/bspsvs/suite/bsp/sound/src/sound_util.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/haitest/bspsvs/suite/bsp/sound/src/sound_util.cpp Tue Feb 02 01:39:10 2010 +0200 @@ -0,0 +1,175 @@ +/* +* Copyright (c) 2005-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: +* +*/ + +#include "sound_util.h" + +// Translation table for RMdaDevSound::TMdaSoundEncoding set + +_LIT(KStrEMdaSoundEncoding8BitPCM, "EMdaSoundEncoding8BitPCM"); +_LIT(KStrEMdaSoundEncoding16BitPCM, "EMdaSoundEncoding16BitPCM"); +_LIT(KStrEMdaSoundEncoding8BitALaw, "EMdaSoundEncoding8BitALaw"); +_LIT(KStrEMdaSoundEncoding8BitMuLaw, "EMdaSoundEncoding8BitMuLaw"); + +// NB! Wrong member for negative testing +_LIT(KStrEMdaSoundEncoding40BitPCM, "EMdaSoundEncoding40BitPCM"); +_LIT(KStrNull, ""); + +const CDataWrapperBase::TEnumEntryTable TSoundUtil::iEnumTableSoundEncoding[] = + { +// Enum as a descriptor Enum + KStrEMdaSoundEncoding8BitPCM, RMdaDevSound::EMdaSoundEncoding8BitPCM, + KStrEMdaSoundEncoding16BitPCM, RMdaDevSound::EMdaSoundEncoding16BitPCM, + KStrEMdaSoundEncoding8BitALaw, RMdaDevSound::EMdaSoundEncoding8BitALaw, + KStrEMdaSoundEncoding8BitMuLaw, RMdaDevSound::EMdaSoundEncoding8BitMuLaw, + KStrEMdaSoundEncoding40BitPCM, 0x00000040, + KStrNull, -1 + }; + +/** + * Loading of generinc sound driver required for RMDaDevSound interface + * + * @param aLll LDD driver name + * @param aPdd PDD driver name + * + * @return System wide error + * + * @leave no + */ +TInt TSoundUtil::LoadSoundDrivers(const TDesC& aLdd, const TDesC& aPdd) + { + TInt rerr = KErrNone; + + rerr = User::LoadPhysicalDevice(aPdd); + if(rerr != KErrNone && rerr != KErrAlreadyExists) + { + return rerr; + } + rerr = User::LoadLogicalDevice(aLdd); + if(rerr != KErrNone && rerr != KErrAlreadyExists) + { + return rerr; + } + return KErrNone; + } + +/** + * Un-loading of generinc sound driver required for RMDaDevSound interface + * + * @param aLll LDD driver name + * @param aPdd PDD driver name + * + * @return System wide error + * + * @leave no + */ +TInt TSoundUtil::FreeSoundDrivers(const TDesC& aLdd, const TDesC& aPdd) + { + TInt rerr = KErrNone; + + rerr = User::FreePhysicalDevice(aPdd); + if(rerr != KErrNone && rerr != KErrAlreadyExists) + { + return rerr; + } + rerr = User::FreeLogicalDevice(aLdd); + if(rerr != KErrNone && rerr != KErrAlreadyExists) + { + return rerr; + } + return KErrNone; + } + +/** + * Store current RBuf8 content into the binary file + * + * @param aFile file name to save audio data + * + * @return System wide error + * + * @leave System wide error + */ +TInt TSoundUtil::RAudioBuffer::SaveAudioDataL(const TDesC& aFile) + { + RFs fsSession; + ::CleanupClosePushL(fsSession); + User::LeaveIfError(fsSession.Connect()); + TInt err = KErrNone; + RFile file; + err = file.Create(fsSession, aFile, EFileStream | EFileWrite); + if (!err) + { + err = file.Write(*this); + + file.Close(); + } + fsSession.Close(); + CleanupStack::PopAndDestroy(); + return err; + } + +/** + * Load binary file content into RBuf8 + * + * @param aFile file name where to load audio data + * + * @return System wide error + * + * @leave System wide error + */ +TInt TSoundUtil::RAudioBuffer::LoadAudioDataL(const TDesC& aFile) + { + RFs fsSession; + ::CleanupClosePushL(fsSession); + User::LeaveIfError(fsSession.Connect()); + TFindFile findFile(fsSession); + TInt err = findFile.FindByDir(aFile, KStrNull); + if ( err == KErrNone ) + { + const TDesC& fileName=findFile.File(); + RFile file; + err = file.Open(fsSession, fileName, EFileStream | EFileRead); + if (!err) + { + err = file.Read(*this); + file.Close(); + } + } + fsSession.Close(); + CleanupStack::PopAndDestroy(); + return err; + } + +/** + * Delete file + * + * @param aFile file name to delete + * + * @return System wide error + * + * @leave System wide error + */ +TInt TSoundUtil::DeleteFileL(const TDesC& aFile) + { + RFs fsSession; + CleanupClosePushL(fsSession); + User::LeaveIfError(fsSession.Connect()); + TInt err; + err = fsSession.Delete(aFile); + fsSession.Close(); + CleanupStack::PopAndDestroy(); + return err; + }