os/boardsupport/haitest/bspsvs/suite/bsp/sound/src/sound_util.cpp
author sl
Tue, 10 Jun 2014 14:32:02 +0200
changeset 1 260cb5ec6c19
permissions -rw-r--r--
Update contrib.
     1 /*
     2 * Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies). 
     3 * All rights reserved.
     4 * This component and the accompanying materials are made available
     5 * under the terms of "Eclipse Public License v1.0"
     6 * which accompanies this distribution, and is available
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
     8 *
     9 * Initial Contributors:
    10 * Nokia Corporation - initial contribution.
    11 *
    12 * Contributors:
    13 *
    14 * Description:
    15 *
    16 */
    17 
    18 #include "sound_util.h"
    19 
    20 // Translation table for RMdaDevSound::TMdaSoundEncoding set
    21 
    22 _LIT(KStrEMdaSoundEncoding8BitPCM,			"EMdaSoundEncoding8BitPCM");
    23 _LIT(KStrEMdaSoundEncoding16BitPCM,			"EMdaSoundEncoding16BitPCM");
    24 _LIT(KStrEMdaSoundEncoding8BitALaw,			"EMdaSoundEncoding8BitALaw");
    25 _LIT(KStrEMdaSoundEncoding8BitMuLaw,		"EMdaSoundEncoding8BitMuLaw");
    26 
    27 // NB! Wrong member for negative testing
    28 _LIT(KStrEMdaSoundEncoding40BitPCM,			"EMdaSoundEncoding40BitPCM");
    29 _LIT(KStrNull,								"");
    30 
    31 const CDataWrapperBase::TEnumEntryTable		TSoundUtil::iEnumTableSoundEncoding[] =
    32 	{
    33 //	Enum as a descriptor					Enum
    34 	KStrEMdaSoundEncoding8BitPCM,			RMdaDevSound::EMdaSoundEncoding8BitPCM,
    35 	KStrEMdaSoundEncoding16BitPCM,			RMdaDevSound::EMdaSoundEncoding16BitPCM,
    36 	KStrEMdaSoundEncoding8BitALaw,			RMdaDevSound::EMdaSoundEncoding8BitALaw,
    37 	KStrEMdaSoundEncoding8BitMuLaw,			RMdaDevSound::EMdaSoundEncoding8BitMuLaw,
    38 	KStrEMdaSoundEncoding40BitPCM,			0x00000040,
    39 	KStrNull,								-1
    40 	};
    41 
    42 /**
    43  * Loading of generinc sound driver required for RMDaDevSound interface
    44  * 
    45  * @param aLll 				LDD driver name
    46  * @param aPdd				PDD driver name
    47  *
    48  * @return					System wide error
    49  *
    50  * @leave					no
    51  */
    52 TInt	TSoundUtil::LoadSoundDrivers(const TDesC& aLdd, const TDesC& aPdd)
    53 	{
    54 	TInt rerr = KErrNone;
    55 	
    56 	rerr = User::LoadPhysicalDevice(aPdd);
    57 	if(rerr != KErrNone && rerr != KErrAlreadyExists)
    58 		{
    59 		return rerr;
    60 		}
    61 	rerr = User::LoadLogicalDevice(aLdd);	
    62 	if(rerr != KErrNone && rerr != KErrAlreadyExists)
    63 		{
    64 		return rerr;
    65 		}
    66 	return KErrNone;	
    67 	}
    68 
    69 /**
    70  * Un-loading of generinc sound driver required for RMDaDevSound interface
    71  * 
    72  * @param aLll 				LDD driver name
    73  * @param aPdd				PDD driver name
    74  *
    75  * @return					System wide error
    76  *
    77  * @leave					no
    78  */
    79 TInt	TSoundUtil::FreeSoundDrivers(const TDesC& aLdd, const TDesC& aPdd)
    80 	{
    81 	TInt rerr = KErrNone;
    82 	
    83 	rerr = User::FreePhysicalDevice(aPdd);
    84 	if(rerr != KErrNone && rerr != KErrAlreadyExists)
    85 		{
    86 		return rerr;
    87 		}
    88 	rerr = User::FreeLogicalDevice(aLdd);	
    89 	if(rerr != KErrNone && rerr != KErrAlreadyExists)
    90 		{
    91 		return rerr;
    92 		}
    93 	return KErrNone;	
    94 	}
    95 
    96 /**
    97  * Store current RBuf8 content into the binary file
    98  * 
    99  * @param aFile 			file name to save audio data
   100  *
   101  * @return					System wide error
   102  *
   103  * @leave					System wide error
   104  */
   105 TInt	TSoundUtil::RAudioBuffer::SaveAudioDataL(const TDesC& aFile)
   106 	{	
   107 	RFs fsSession;
   108 	::CleanupClosePushL(fsSession);
   109 	User::LeaveIfError(fsSession.Connect()); 	
   110 	TInt err = KErrNone;
   111 	RFile file;
   112 	err = file.Create(fsSession, aFile, EFileStream | EFileWrite);
   113 	if (!err)
   114 		{
   115 		err = file.Write(*this);
   116 
   117 		file.Close();
   118 		}	
   119 	fsSession.Close();
   120 	CleanupStack::PopAndDestroy();		
   121 	return err;
   122 	}
   123 
   124 /**
   125  * Load binary file content into RBuf8
   126  * 
   127  * @param aFile 			file name where to load audio data
   128  *
   129  * @return					System wide error
   130  *
   131  * @leave					System wide error
   132  */
   133 TInt	TSoundUtil::RAudioBuffer::LoadAudioDataL(const TDesC& aFile)
   134 	{
   135 	RFs fsSession;
   136 	::CleanupClosePushL(fsSession);
   137 	User::LeaveIfError(fsSession.Connect());	
   138 	TFindFile	findFile(fsSession);
   139 	TInt err = findFile.FindByDir(aFile, KStrNull);
   140 	if ( err == KErrNone )
   141 		{
   142 		const TDesC&	fileName=findFile.File();
   143 		RFile file;
   144 		err = file.Open(fsSession, fileName, EFileStream | EFileRead);
   145 		if (!err)
   146 			{
   147 			err = file.Read(*this);
   148 			file.Close();
   149 			}
   150 		}
   151 	fsSession.Close();
   152 	CleanupStack::PopAndDestroy();		
   153 	return err;	
   154 	}
   155 
   156 /**
   157  * Delete file
   158  * 
   159  * @param aFile 			file name to delete
   160  *
   161  * @return					System wide error
   162  *
   163  * @leave					System wide error
   164  */
   165 TInt	TSoundUtil::DeleteFileL(const TDesC& aFile)
   166 	{
   167 	RFs fsSession;
   168 	CleanupClosePushL(fsSession);
   169 	User::LeaveIfError(fsSession.Connect());
   170 	TInt err;
   171 	err = fsSession.Delete(aFile);	
   172 	fsSession.Close();
   173 	CleanupStack::PopAndDestroy();
   174 	return err;
   175 	}