--- a/cellularsrvapitest/telephonydevsoundhaitest/devsound/src/T_CMMFDevSoundData.cpp Mon May 03 13:37:20 2010 +0300
+++ b/cellularsrvapitest/telephonydevsoundhaitest/devsound/src/T_CMMFDevSoundData.cpp Thu May 06 15:10:38 2010 +0100
@@ -1,2159 +1,2159 @@
-/*
-* 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 "T_CMMFDevSoundData.h"
-
-/*@{*/
-//Constants for HwDevice
-const TInt KHwDeviceDefaultDataLength = 9;
-const TInt KFourCCLength = 4;
-//Supported Input Data Types
-const TInt KFourCCMaxBitDisplacement = 24;
-const TInt K8Bits = 8;
-const TInt KTFourCC = 4;
-/*@}*/
-
-/*@{*/
-//Command literals
-_LIT(KCmdNewL, "NewL");
-_LIT(KCmdNewLLoopL, "NewLLoopL");
-_LIT(KCmdDestructor, "~");
-_LIT(KCmdCapabilities, "Capabilities");
-_LIT(KCmdConfig, "Config");
-_LIT(KCmdMaxGain, "MaxGain");
-_LIT(KCmdMaxVolume, "MaxVolume");
-_LIT(KCmdGetPlayBalanceL, "GetPlayBalanceL");
-_LIT(KCmdGetRecordBalanceL, "GetRecordBalanceL");
-_LIT(KCmdGetSupportedInputDataTypesL, "GetSupportedInputDataTypesL");
-_LIT(KCmdGetSupportedOutputDataTypesL, "GetSupportedOutputDataTypesL");
-_LIT(KCmdSamplesPlayed, "SamplesPlayed");
-_LIT(KCmdSamplesRecorded, "SamplesRecorded");
-_LIT(KCmdVolume, "Volume");
-_LIT(KCmdGain, "Gain");
-_LIT(KCmdFixedSequenceCount, "FixedSequenceCount");
-_LIT(KCmdFixedSequenceName, "FixedSequenceName");
-_LIT(KCmdSetConfigL, "SetConfigL");
-_LIT(KCmdSetDTMFLengths, "SetDTMFLengths");
-_LIT(KCmdSetGain, "SetGain");
-_LIT(KCmdSetPlayBalanceL, "SetPlayBalanceL");
-_LIT(KCmdSetPrioritySettings, "SetPrioritySettings");
-_LIT(KCmdSetRecordBalanceL, "SetRecordBalanceL");
-_LIT(KCmdSetToneRepeats, "SetToneRepeats");
-_LIT(KCmdSetVolume, "SetVolume");
-_LIT(KCmdSetVolumeRamp, "SetVolumeRamp");
-_LIT(KCmdInitializeL, "InitializeL");
-_LIT(KCmdPlayDTMFStringL, "PlayDTMFStringL");
-_LIT(KCmdPlayData, "PlayData");
-_LIT(KCmdPlayDualToneL, "PlayDualToneL");
-_LIT(KCmdPlayInitL, "PlayInitL");
-_LIT(KCmdPlayToneL, "PlayToneL");
-_LIT(KCmdPlayToneSequenceL, "PlayToneSequenceL");
-_LIT(KCmdRecordData, "RecordData");
-_LIT(KCmdRecordInitL, "RecordInitL");
-_LIT(KCmdStop, "Stop");
-_LIT(KCmdErrorConceal, "ErrorConceal");
-_LIT(KCmdSetVolumeLoop, "SetVolumeLoop");
-/*@}*/
-
-/*@{*/
-//Utility literals
-_LIT(KCmdUtilityReplaceFile, "ReplaceFile");
-_LIT(KCmdUtilityOpenFile, "OpenFile");
-_LIT(KCmdUtilityCloseFile, "CloseFile");
-_LIT(KCmdUtilityFileStartPosition, "FileStartPosition");
-/*@}*/
-
-/*@{*/
-//INI Section name literals
-_LIT(KGainValue, "Gain");
-_LIT(KVolumeValue, "Volume");
-_LIT(KLeftPercentage, "LeftPercentage");
-_LIT(KRightPercentage, "RightPercentage");
-_LIT(KSequenceNumber, "SequenceNumber");
-_LIT(KRate, "Rate");
-_LIT(KEncoding, "Encoding");
-_LIT(KChannels, "Channels");
-_LIT(KBufferSize, "BufferSize");
-_LIT(KToneOnLength, "ToneOnLength");
-_LIT(KToneOffLength, "ToneOffLength");
-_LIT(KPause, "Pause");
-_LIT(KPauseLength, "PauseLength");
-_LIT(KPriority, "Priority");
-_LIT(KPreference, "Preference");
-_LIT(KPriorityState, "PriorityState");
-_LIT(KRepeatCount, "RepeatCount");
-_LIT(KRepeatTrailingSilence, "RepeatTrailingSilence");
-_LIT(KRampDuration, "RampDuration");
-_LIT(KMode, "Mode");
-_LIT(KHwDevice, "HwDevice");
-_LIT(KFourCC, "FourCC");
-_LIT(KFilename, "Filename");
-_LIT(KDTMFString, "DTMFString");
-_LIT(KFrequency, "Frequency");
-_LIT(KFrequencyOne, "FrequencyOne");
-_LIT(KFrequencyTwo, "FrequencyTwo");
-_LIT(KDuration, "Duration");
-_LIT(KLoop, "Loop");
-_LIT(KAllowedError, "AllowedError");
-_LIT(KVolumeList, "VolumeList");
-_LIT(KVolumeLoop, "VolumeLoop");
-/*@}*/
-
-/*@{*/
-//Literals for iEnumChannels
-_LIT(KEMMFStereo, "EMMFStereo");
-_LIT(KEMMFMono, "EMMFMono");
-/*@}*/
-
-const CDataWrapperBase::TEnumEntryTable CT_CMMFDevSoundData::iEnumChannels[] =
- {
- {KEMMFMono, EMMFMono},
- {KEMMFStereo, EMMFStereo}
- };
-
-/*@{*/
-//Literals for iEnumSampleRate
-_LIT(KEMMFSampleRate8000Hz, "EMMFSampleRate8000Hz");
-_LIT(KEMMFSampleRate11025Hz, "EMMFSampleRate11025Hz");
-_LIT(KEMMFSampleRate16000Hz, "EMMFSampleRate16000Hz");
-_LIT(KEMMFSampleRate22050Hz, "EMMFSampleRate22050Hz");
-_LIT(KEMMFSampleRate32000Hz, "EMMFSampleRate32000Hz");
-_LIT(KEMMFSampleRate44100Hz, "EMMFSampleRate44100Hz");
-_LIT(KEMMFSampleRate48000Hz, "EMMFSampleRate48000Hz");
-_LIT(KEMMFSampleRate88200Hz, "EMMFSampleRate88200Hz");
-_LIT(KEMMFSampleRate96000Hz, "EMMFSampleRate96000Hz");
-_LIT(KEMMFSampleRate12000Hz, "EMMFSampleRate12000Hz");
-_LIT(KEMMFSampleRate24000Hz, "EMMFSampleRate24000Hz");
-_LIT(KEMMFSampleRate64000Hz, "EMMFSampleRate64000Hz");
-/*@}*/
-
-const CDataWrapperBase::TEnumEntryTable CT_CMMFDevSoundData::iEnumSampleRate[] =
- {
- {KEMMFSampleRate8000Hz, EMMFSampleRate8000Hz},
- {KEMMFSampleRate11025Hz, EMMFSampleRate11025Hz},
- {KEMMFSampleRate16000Hz, EMMFSampleRate16000Hz},
- {KEMMFSampleRate22050Hz, EMMFSampleRate22050Hz},
- {KEMMFSampleRate32000Hz, EMMFSampleRate32000Hz},
- {KEMMFSampleRate44100Hz, EMMFSampleRate44100Hz},
- {KEMMFSampleRate48000Hz, EMMFSampleRate48000Hz},
- {KEMMFSampleRate88200Hz, EMMFSampleRate88200Hz},
- {KEMMFSampleRate96000Hz, EMMFSampleRate96000Hz},
- {KEMMFSampleRate12000Hz, EMMFSampleRate12000Hz},
- {KEMMFSampleRate24000Hz, EMMFSampleRate24000Hz},
- {KEMMFSampleRate64000Hz, EMMFSampleRate64000Hz}
- };
-
-/*@{*/
-//Literal for iEnumMode
-_LIT(KEMMFStateIdle, "EMMFStateIdle");
-_LIT(KEMMFStatePlaying, "EMMFStatePlaying");
-_LIT(KEMMFStateTonePlaying, "EMMFStateTonePlaying");
-_LIT(KEMMFStateRecording, "EMMFStateRecording");
-_LIT(KEMMFStatePlayingRecording, "EMMFStatePlayingRecording");
-_LIT(KEMMFStateConverting, "EMMFStateConverting");
-/*@}*/
-
-const CDataWrapperBase::TEnumEntryTable CT_CMMFDevSoundData::iEnumMode[] =
- {
- {KEMMFStateIdle, EMMFStateIdle},
- {KEMMFStatePlaying, EMMFStatePlaying},
- {KEMMFStateRecording, EMMFStateRecording},
- {KEMMFStateTonePlaying, EMMFStateTonePlaying},
- {KEMMFStatePlayingRecording, EMMFStatePlayingRecording},
- {KEMMFStateConverting, EMMFStateConverting}
- };
-
-/*@{*/
-//Literals for iEnumInitializeLType
-_LIT(KEInitializeState, "EInitializeState");
-_LIT(KEInitializeHwDeviceMode, "EInitializeHwDeviceMode");
-_LIT(KEInitializeFourCCMode, "EInitializeFourCCMode");
-/*@}*/
-
-enum TMMFInitializeMode
- {
- EInitializeState,
- EInitializeHwDeviceMode,
- EInitializeFourCCMode
- };
-
-const CDataWrapperBase::TEnumEntryTable CT_CMMFDevSoundData::iEnumInitializeLType[] =
- {
- {KEInitializeState, EInitializeState},
- {KEInitializeHwDeviceMode, EInitializeHwDeviceMode},
- {KEInitializeFourCCMode, EInitializeFourCCMode}
- };
-
-/**
- * Two phase constructor
- *
- * @leave system wide error
- */
-CT_CMMFDevSoundData* CT_CMMFDevSoundData::NewL()
- {
- CT_CMMFDevSoundData* ret = new (ELeave) CT_CMMFDevSoundData();
- CleanupStack::PushL(ret);
- ret->ConstructL();
- CleanupStack::Pop(ret);
- return ret;
- }
-
-/**
- * Private constructor. First phase construction
- */
-CT_CMMFDevSoundData::CT_CMMFDevSoundData()
- :
- iDevSound(NULL),
- iPrioritySettings(),
- iCapabilities(),
- iVolumeValue(0),
- iGainValue(0),
- iLeftPercentage(0),
- iRightPercentage(0),
- iFs(),
- iToneFile(),
- iAudiofile(),
- iBuffer(NULL),
- iLastSample(0),
- iPaused(EFalse),
- iErrorConceal(EFalse),
- iEndFile(EFalse),
- iToneSequence(),
- iRecordErrorIndex(0),
- iPlayErrorIndex(0),
- iToneErrorIndex(0),
- iInitializeErrorIndex(0)
- {
- }
-
-/**
- * Second phase construction
- * @internalComponent
- * @return N/A
- * @pre None
- * @post None
- * @leave system wide error
- */
-void CT_CMMFDevSoundData::ConstructL()
- {
- iFs.Connect();
- }
-
-/**
- * Public destructor
- */
-CT_CMMFDevSoundData::~CT_CMMFDevSoundData()
- {
- iFs.Close();
- DestroyData();
- }
-
-/**
- * Helper Destructor
- */
-void CT_CMMFDevSoundData::DestroyData()
- {
- if(iDevSound)
- {
- delete iDevSound;
- iDevSound = NULL;
- }
- }
-
-/**
- * Return a pointer to the object that the data wraps
- *
- * @return pointer to the object that the data wraps
- */
-TAny* CT_CMMFDevSoundData::GetObject()
- {
- return iDevSound;
- }
-
-/**
- * Process a command read from the Ini file
- * @param aCommand - The command to process
- * @param aSection - The section get from the *.ini file of the project T_Wlan
- * @param aAsyncErrorIndex - Command index dor async calls to returns errors to
- * @return TBool - ETrue if the command is process
- * @leave - system wide error
- */
-TBool CT_CMMFDevSoundData::DoCommandL(const TTEFFunction& aCommand, const TTEFSectionName& aSection, const TInt aAsyncErrorIndex)
- {
- TBool ret = ETrue;
-
- if (aCommand == KCmdNewL)
- {
- DoCmdNewL();
- }
- else if(aCommand == KCmdNewLLoopL)
- {
- DoCmdNewLLoopL(aSection);
- }
- else if (aCommand == KCmdDestructor)
- {
- DoCmdDestructor();
- }
- else if (aCommand == KCmdUtilityReplaceFile)
- {
- DoCmdUtilityReplaceFile(aSection);
- }
- else if (aCommand == KCmdUtilityOpenFile)
- {
- DoCmdUtilityOpenFile(aSection);
- }
- else if (aCommand == KCmdUtilityCloseFile)
- {
- DoCmdUtilityCloseFile();
- }
- else if (aCommand == KCmdUtilityFileStartPosition)
- {
- DoCmdUtilityFileStartPosition();
- }
- else if (aCommand == KCmdCapabilities)
- {
- DoCmdCapabilities();
- }
- else if (aCommand == KCmdConfig)
- {
- DoCmdConfig();
- }
- else if (aCommand == KCmdMaxGain)
- {
- DoCmdMaxGain(aSection);
- }
- else if (aCommand == KCmdMaxVolume)
- {
- DoCmdMaxVolume(aSection);
- }
- else if (aCommand == KCmdGetPlayBalanceL)
- {
- DoCmdGetPlayBalanceL(aSection);
- }
- else if (aCommand == KCmdGetRecordBalanceL)
- {
- DoCmdGetRecordBalanceL(aSection);
- }
- else if (aCommand == KCmdGetSupportedInputDataTypesL)
- {
- DoCmdGetSupportedInputDataTypesL();
- }
- else if (aCommand == KCmdGetSupportedOutputDataTypesL)
- {
- DoCmdGetSupportedOutputDataTypesL();
- }
- else if (aCommand == KCmdSamplesPlayed)
- {
- DoCmdSamplesPlayed();
- }
- else if (aCommand == KCmdSamplesRecorded)
- {
- DoCmdSamplesRecorded();
- }
- else if (aCommand == KCmdVolume)
- {
- DoCmdVolume(aSection);
- }
- else if (aCommand == KCmdGain)
- {
- DoCmdGain(aSection);
- }
- else if (aCommand == KCmdFixedSequenceCount)
- {
- DoCmdFixedSequenceCount();
- }
- else if (aCommand == KCmdFixedSequenceName)
- {
- DoCmdFixedSequenceName(aSection);
- }
- else if (aCommand == KCmdSetConfigL)
- {
- DoCmdSetConfigL(aSection);
- }
- else if (aCommand == KCmdSetDTMFLengths)
- {
- DoCmdSetDTMFLengths(aSection);
- }
- else if (aCommand == KCmdSetGain)
- {
- DoCmdSetGain(aSection);
- }
- else if (aCommand == KCmdSetPlayBalanceL)
- {
- DoCmdSetPlayBalanceL(aSection);
- }
- else if (aCommand == KCmdSetPrioritySettings)
- {
- DoCmdSetPrioritySettings(aSection);
- }
- else if (aCommand == KCmdSetRecordBalanceL)
- {
- DoCmdSetRecordBalanceL(aSection);
- }
- else if (aCommand == KCmdSetToneRepeats)
- {
- DoCmdSetToneRepeats(aSection);
- }
- else if (aCommand == KCmdSetVolume)
- {
- DoCmdSetVolume(aSection);
- }
- else if (aCommand == KCmdSetVolumeLoop)
- {
- DoCmdSetVolumeLoop(aSection);
- }
- else if (aCommand == KCmdSetVolumeRamp)
- {
- DoCmdSetVolumeRamp(aSection);
- }
- else if (aCommand == KCmdInitializeL)
- {
- DoCmdInitializeL(aSection,aAsyncErrorIndex);
- }
- else if (aCommand == KCmdPlayDTMFStringL)
- {
- DoCmdPlayDTMFStringL(aSection, aAsyncErrorIndex);
- }
- else if (aCommand == KCmdPlayData)
- {
- DoCmdPlayData();
- }
- else if (aCommand == KCmdPlayDualToneL)
- {
- DoCmdPlayDualToneL(aSection, aAsyncErrorIndex);
- }
- else if (aCommand == KCmdPlayInitL)
- {
- DoCmdPlayInitL(aAsyncErrorIndex);
- }
- else if (aCommand == KCmdPlayToneL)
- {
- DoCmdPlayToneL(aSection, aAsyncErrorIndex);
- }
- else if (aCommand == KCmdPlayToneSequenceL)
- {
- DoCmdPlayToneSequenceL(aSection,aAsyncErrorIndex);
- }
- else if (aCommand == KCmdRecordData)
- {
- DoCmdRecordData();
- }
- else if (aCommand == KCmdRecordInitL)
- {
- DoCmdRecordInitL(aAsyncErrorIndex);
- }
- else if (aCommand == KCmdStop)
- {
- DoCmdStop(aSection);
- }
- else if(aCommand == KCmdErrorConceal)
- {
- DoCmdUtilityErrorConceal();
- }
- else
- {
- ERR_PRINTF1(_L("Unknown command."));
- ret=EFalse;
- }
- return ret;
- }
-
-/**
- * Handles initialization completion event.
- * CMMFDevSound object calls this function when its InitializeL() function
- * completes.
- * @param aError - Error code. KErrNone if successful. Other values are possible
- * indicating a problem initializing CMMFDevSound object.
- * @return void
- */
-
-void CT_CMMFDevSoundData::InitializeComplete(TInt aError)
- {
- INFO_PRINTF1(_L("*START*CT_CMMFDevSoundData::InitializeComplete"));
- if(KErrNone != aError)
- {
- ERR_PRINTF2(_L("InitializeComplete callback failed with error %d"), aError);
- SetAsyncError(iInitializeErrorIndex, aError);
- iInitializeErrorIndex = 0;
- }
- if(Outstanding())
- {
- DecOutstanding();
- }
- INFO_PRINTF1(_L("*END*CT_CMMFDevSoundData::InitializeComplete"));
- }
-
-/**
- * It's needed for playing o converting
- * @param aBuffer - Buffer into which data should be read. The amount of data that is
- * needed is specified in CMMFBuffer::RequestSize().
- */
-void CT_CMMFDevSoundData::BufferToBeFilled(CMMFBuffer* aBuffer)
- {
- if (!aBuffer)
- {
- ERR_PRINTF1(_L("BufferToBeFilled callback received a NULL CMMFBuffer!"));
- SetBlockResult(EFail);
- }
- else
- {
- TBool dataOk = ETrue;
- iBuffer = aBuffer;
- iBuffer->SetLastBuffer(EFalse);
- CMMFDataBuffer* buffer = static_cast <CMMFDataBuffer*> (iBuffer);
- if (iPaused)
- {
- iPaused=EFalse;
- TInt error = iAudiofile.Read(iLastSample,buffer->Data());
- if (error != KErrNone)
- {
- ERR_PRINTF2(_L("ERROR : iFile.Read() failed with %d"), error);
- SetBlockResult(EFail);
- dataOk = EFalse;
- }
- }
- else
- {
- TInt error = iAudiofile.Read(buffer->Data());
- if (error != KErrNone)
- {
- ERR_PRINTF2(_L("ERROR : iFile.Read() failed with %d"), error);
- SetBlockResult(EFail);
- dataOk =EFalse;
- }
- }
- if(dataOk)
- {
- if (buffer->Data().Length() != buffer->RequestSize())
- {
- iBuffer->SetLastBuffer(ETrue);
- }
- if (iErrorConceal)
- {
- iErrorConceal=EFalse;
- buffer->Data().Zero();
- INFO_PRINTF1(_L("buffer->Data().Zero()"));
- }
- PlayData();
- TInt pos=0;
- iLastSample=iAudiofile.Seek(ESeekCurrent ,pos);
- INFO_PRINTF2(_L("Number of samples played so far: %d"), pos);
- iLastSample=pos;
- }
- }
- }
-
-/**
-* Handles play completion or cancel event.
-*
-* CMMFDevSound object calls this function when an attempt to play audio sample
-* has completed, successfully or otherwise.
-*
-* @param aError - Error code. The status of playback. KErrUnderflow playing of the
-* audio sample is complete. KErrAccessDenied the sound device is in
-* use by another higher priority client.
-*/
-void CT_CMMFDevSoundData::PlayError(TInt aError)
- {
- INFO_PRINTF1(_L("*START*CT_CMMFDevSoundData::PlayError"));
- if(Outstanding())
- {
- DecOutstanding();
- }
- if(aError != KErrNone && aError != KErrUnderflow)
- {
- ERR_PRINTF2(_L("Playback completed with error %d"), aError);
- SetAsyncError(iPlayErrorIndex, aError);
- iPlayErrorIndex = 0;
- }
- INFO_PRINTF1(_L("*END*CT_CMMFDevSoundData::PlayError"));
- }
-
-
-/**
- * Handles tone play completion event.
- *
- *
- * CMMFDevSound object calls this function when an attempt to play tone has
- * completed, successfully or otherwise.
- *
- * The following are the play tone functions; PlayToneL(), PlayDMTFStringL(),
- * PlayToneSequenceL(), and PlayFixedSequenceL().
- *
- * @param aError - Error code. The status of tone playback. KErrUnderflow playing of
- * the tone is complete. KErrAccessDenied the sound device is in use by
- * another higher priority client. KErrCancel playing of the audio
- * sample is stopped by DevSound client another higher priority client.
- *
- */
-
-void CT_CMMFDevSoundData::ToneFinished(TInt aError)
- {
- INFO_PRINTF1(_L("*START*CT_CMMFDevSoundData::ToneFinished"));
- if(Outstanding())
- {
- DecOutstanding();
- }
- if(aError != KErrNone)
- {
- ERR_PRINTF2(_L("Tone finished with error %d"), aError);
- SetAsyncError(iToneErrorIndex, aError);
- iToneErrorIndex = 0;
- }
- iToneFile.Close();
- INFO_PRINTF1(_L("*END*CT_CMMFDevSoundData::ToneFinished"));
- }
-
-/**
- * Handles CMMFDevSound object's data request event.
- *
- * CMMFDevSound object calls this function when the buffer, aBuffer gets filled
- * while recording or converting. The observer should notify CMMFDevSound
- * object as quickly as possible after data in the buffer is processed by
- * calling RecordData(), otherwise the implementation might callback
- * the function RecordError() on derived class object with error code KErrOverflow.
- *
- * @param aBuffer - Buffer containing processed (recorded or converted) data. The amount
- * of data that is available is specified in CMMFBuffer::RequestSize().
- */
-
-void CT_CMMFDevSoundData::BufferToBeEmptied(CMMFBuffer* aBuffer)
- {
- if (!aBuffer)
- {
- INFO_PRINTF1(_L("BufferToBeEmptied callback received a NULL CMMFBuffer"));
- SetBlockResult(EFail);
- }
- else
- {
- iBuffer = aBuffer;
- CMMFDataBuffer* buffer = static_cast <CMMFDataBuffer*> (iBuffer);
- TInt error = iAudiofile.Write(buffer->Data());
- if(error == KErrNone)
- {
- if (!aBuffer->LastBuffer())
- {
- RecordData();
- }
- else{
- Stop();
- }
- }
- else
- {
- ERR_PRINTF2(_L("iFile.Write() returned the error %d"), error);
- SetBlockResult(EFail);
- }
- }
- }
-
-/**
- * Stops the ongoing operation (Play, Record, TonePlay, Convert).
- * This function should be synchronous and invoke no callbacks through MDevSoundObserver.
- */
-void CT_CMMFDevSoundData::Stop()
- {
- INFO_PRINTF1(_L("*START*CT_CMMFDevSoundData::Stop()"));
- iDevSound->Stop();
- if(Outstanding())
- {
- DecOutstanding();
- }
- INFO_PRINTF1(_L("*END*CT_CMMFDevSoundData::Stop()"));
- }
-
-/**
- * Handles record completion or cancel event.
- *
- * CMMFDevSound object calls this function when an attempt to record audio sample
- * has completed, successfully or otherwise.
- *
- * @param aError - Error code. The status of recording. KErrOverflow audio devices
- * runs out of internal buffer. KErrAccessDenied the sound device is
- * in use by another higher priority client.
- *
- */
-
-void CT_CMMFDevSoundData::RecordError(TInt aError)
- {
- INFO_PRINTF1(_L("*START*CT_CMMFDevSoundData::RecordError"));
- if(aError != KErrNone)
- {
- ERR_PRINTF2(_L("Record failed with error %d"), aError);
- SetAsyncError(iRecordErrorIndex , aError);
- iRecordErrorIndex = 0;
- }
- INFO_PRINTF1(_L("*END*CT_CMMFDevSoundData::RecordError"));
- }
-
-
-/**
- * Handles conversion completion or cancel event.
- *
- * CMMFDevSound object calls this function when an attempt to convert data from
- * source format to destination format has completed, successfully or otherwise.
- *
- * @param aError - Error code. KErrCancel conversion operation is cancelled. KErrNone
- * conversion is complete. Other values are possible indicating a
- * problem converting data.
- */
-
-void CT_CMMFDevSoundData::ConvertError(TInt aError)
- {
- INFO_PRINTF1(_L("*START*CT_CMMFDevSoundData::ConvertError"));
- ERR_PRINTF1(_L("Invalid Callback call"));
- if (aError == KErrNone)
- {
- INFO_PRINTF1(_L("Data conversion completed successfully."));
- }
- if (aError == KErrCancel)
- {
- INFO_PRINTF1(_L("Data conversion operation was cancelled."));
- }
- INFO_PRINTF1(_L("*END*CT_CMMFDevSoundData::ConvertError"));
- }
-
-/**
- * Handles device event.
- *
- * CMMFDevSound object calls this function when a message is received from the
- * audio hardware device.
- *
- * @param aMessageType - Defines the type of message. Used to determine how to
- * interpret the contents of aMsg.
- * @param aMsg - Message that is packed in the Descriptor format.
- */
-
-
-void CT_CMMFDevSoundData::DeviceMessage(TUid aMessageType, const TDesC8& aMsg)
- {
- INFO_PRINTF1(_L("*START*CT_CMMFDevSoundData::DeviceMessage"));
- INFO_PRINTF2(_L("Message type: %d"), aMessageType.iUid);
- INFO_PRINTF2(_L("Message type: %S"), &aMsg);
- INFO_PRINTF1(_L("*END*CT_CMMFDevSoundData::DeviceMessage"));
- }
-
-
-/**
- * Create a new or Replace the existing file
- *
- */
-void CT_CMMFDevSoundData::DoCmdUtilityReplaceFile(const TTEFSectionName& aSection)
- {
- INFO_PRINTF1(_L("*START* CT_CMMFDevSoundData::DoCmdUtilityReplaceFile()"));
- TPtrC fileName;
- TBool dataOk = ETrue;
- if (!GetStringFromConfig(aSection, KFilename, fileName))
- {
- ERR_PRINTF2(_L("Error in getting parameter %S from INI file"), &KFilename);
- SetBlockResult(EFail);
- dataOk =EFalse;
- }
- if(dataOk)
- {
- TInt error = iAudiofile.Replace(iFs, fileName, EFileRead);
- if (error != KErrNone)
- {
- ERR_PRINTF2(_L("Could not open input file. Error = %d"), error);
- SetError(error);
- }
- }
-
- INFO_PRINTF1(_L("*END* CT_CMMFDevSoundData::DoCmdUtilityReplaceFile()"));
- }
-
-/**
- * Open a file
- */
-void CT_CMMFDevSoundData::DoCmdUtilityOpenFile(const TTEFSectionName& aSection)
- {
-
- INFO_PRINTF1(_L("*START* CT_CMMFDevSoundData::DoCmdUtilityOpenFile()"));
- TPtrC fileName;
- TBool dataOk = ETrue;
- if (!GetStringFromConfig(aSection, KFilename, fileName))
- {
- ERR_PRINTF2(_L("Error in getting parameter %S from INI file"), &KFilename);
- SetBlockResult(EFail);
- dataOk =EFalse;
- }
- if(dataOk)
- {
- TInt error = iAudiofile.Open(iFs, fileName, EFileRead);
- if (error != KErrNone)
- {
- ERR_PRINTF2(_L("Could not open input file. Error = %d"), error);
- iFs.Close();
- SetError(error);
- }
- }
- INFO_PRINTF1(_L("*END* CT_CMMFDevSoundData::DoCmdUtilityOpenFile()"));
- }
-
-/**
- * Close the opened file
- */
-void CT_CMMFDevSoundData::DoCmdUtilityCloseFile()
- {
- INFO_PRINTF1(_L("*START* CT_CMMFDevSoundData::DoCmdUtilityCloseFile()"));
- iAudiofile.Close();
- INFO_PRINTF1(_L("*END* CT_CMMFDevSoundData::DoCmdUtilityCloseFile()"));
- }
-
-/**
- * Place the the pointer file at the begining
- *
- */
-void CT_CMMFDevSoundData::DoCmdUtilityFileStartPosition()
- {
- INFO_PRINTF1(_L("*START* CT_CMMFDevSoundData::DoCmdUtilityFileStartPosition()"));
- TInt filePosition = 0;
- TBool dataOk = ETrue;
- TInt error = iAudiofile.Seek(ESeekStart, filePosition);
- if (error != KErrNone)
- {
- ERR_PRINTF2(_L("Could not set file to the start position. Error = %d"), error);
- SetError(error);
- dataOk =EFalse;
- }
- if(dataOk)
- {
- INFO_PRINTF2(_L("File Position: %d"), filePosition);
- }
- INFO_PRINTF1(_L("*END* CT_CMMFDevSoundData::DoCmdUtilityFileStartPosition()"));
- }
-
-
-/**
- * Creates "n" instance of CMMFDevSound
- * @param aSection - Section to read from the ini file
- * @return void
- */
-void CT_CMMFDevSoundData::DoCmdNewLLoopL(const TTEFSectionName&aSection)
- {
- INFO_PRINTF1(_L("*START*CT_CMMFDevSoundData::DoCmdNewLLoopL"));
- CMMFDevSound* devSound = NULL;
- TBool dataOk = ETrue;
- TInt loop= 0;
- if (!GetIntFromConfig(aSection, KLoop, loop))
- {
- ERR_PRINTF2(_L("Error in getting parameter %S from INI file"), &KLoop);
- SetBlockResult(EFail);
- dataOk = EFalse;
- }
- TInt allowedError=0;
- if ( !GetIntFromConfig(aSection, KAllowedError, allowedError) )
- {
- ERR_PRINTF2(_L("Error in getting parameter %S from INI file"), &KAllowedError);
- SetBlockResult(EFail);
- dataOk = EFalse;
- }
- if(dataOk)
- {
- for(TInt i=0; i<loop; i++)
- {
- TRAPD(error,devSound = CMMFDevSound::NewL());
- if(error == KErrNone)
- {
- INFO_PRINTF2(_L("Instance %d of DevSound was created"),i);
- CleanupStack::PushL(devSound);
- iObjectsDevSound.AppendL(devSound);
- CleanupStack::Pop(devSound);
- }
- else if(error == allowedError)
- {
- INFO_PRINTF2(_L(" Allowing Error: %d"), error);
- ERR_PRINTF2(_L(" Could not create CMMFDevSound due to error: %d"), error);
- i = loop;
- }
- else if((error != KErrNone) && (error!=allowedError))
- {
- ERR_PRINTF2(_L("> Could not create CMMFDevSound: %d"), error);
- SetError(error);
- }
- }
- iObjectsDevSound.ResetAndDestroy();
- INFO_PRINTF2(_L("%d DevSound instances were deleted"),loop);
- }
- INFO_PRINTF1(_L("*END*CT_CMMFDevSoundData::DoCmdNewLLoopL"));
- }
-
-
-/**
- * Create an instance of CMMFDevSound
- */
-void CT_CMMFDevSoundData::DoCmdNewL()
- {
- INFO_PRINTF1(_L("*START*CT_CMMFDevSoundData::DoCmdNewL"));
- DestroyData();
- TRAPD(error,iDevSound = CMMFDevSound::NewL());
- if(error!= KErrNone)
- {
- ERR_PRINTF2(_L("> Could not create CMMFDevSound: %d"), error);
- SetError(error);
- }
- else
- {
- iPaused= EFalse;
- iErrorConceal = EFalse;
- }
- INFO_PRINTF1(_L("*END*CT_CMMFDevSoundData::DoCmdNewL"));
- }
-/**
- * Destroy an instance of CMMFDevSound
- */
-
-void CT_CMMFDevSoundData::DoCmdDestructor()
- {
- INFO_PRINTF1(_L("*START*CT_CMMFDevSoundData::DoCmdDestroyData"));
- DestroyData();
- INFO_PRINTF1(_L("*END*CT_CMMFDevSoundData::DoCmdDestroyData"));
- }
-
-/**
- * Show the supported Audio settings ie. encoding, sample rates, mono/stereo operation, buffer
- * size, etc.
- * @param none
- * @return none
- */
-void CT_CMMFDevSoundData::DoCmdCapabilities()
- {
- INFO_PRINTF1(_L("*START*CT_CMMFDevSoundData::DoCmdCapabilities"));
- iCapabilities = iDevSound->Capabilities();
- INFO_PRINTF5(_L("Supported Audio settings: buffsize=%d, channels=0x%x, encoding=0x%x and rate=0x%x"),
- iCapabilities.iBufferSize,
- iCapabilities.iChannels,
- iCapabilities.iEncoding,
- iCapabilities.iRate);
- INFO_PRINTF1(_L("*END*CT_CMMFDevSoundData::DoCmdCapabilities"));
- }
-
-
-/**
- * Shows the current device configuration.
- * @params none
- * @return none
- */
-void CT_CMMFDevSoundData::DoCmdConfig()
- {
- INFO_PRINTF1(_L("*START*CT_CMMFDevSoundData::DoCmdConfig"));
- TMMFCapabilities currentConfiguration = iDevSound->Config();
- INFO_PRINTF5(_L("Current device configuration: buffsize=%d, channels=0x%x, encoding=0x%x and rate=0x%x"),
- currentConfiguration.iBufferSize,
- currentConfiguration.iChannels,
- currentConfiguration.iEncoding,
- currentConfiguration.iRate);
- INFO_PRINTF1(_L("*END*CT_CMMFDevSoundData::DoCmdConfig"));
- }
-
-
-/**
- * Shows an integer representing the maximum gain the device supports.
- * This is the maximum value which can be passed to CMMFDevSound::SetGain.
- * @param aSection - The section to read the params from the ini file
- * @return none
- */
-
-void CT_CMMFDevSoundData::DoCmdMaxGain(const TTEFSectionName& aSection)
- {
- INFO_PRINTF1(_L("*START*CT_CMMFDevSoundData::DoCmdMaxGain"));
- TBool dataOk = ETrue;
- TInt expectedGainValue=0;
- if (!GetIntFromConfig(aSection, KGainValue, expectedGainValue))
- {
- ERR_PRINTF2(_L("Error in getting parameter %S from INI file"), &KGainValue);
- SetBlockResult(EFail);
- dataOk = EFalse;
- }
- if(dataOk)
- {
- iGainValue = iDevSound->MaxGain();
- INFO_PRINTF2(_L("Retrieved maximum gain value: %d"), iGainValue);
- if (expectedGainValue != iGainValue)
- {
- ERR_PRINTF3(_L("Expected gain value %d is different from retrieved gain value %d"), expectedGainValue, iGainValue);
- SetBlockResult(EFail);
- }
- }
- INFO_PRINTF1(_L("*END*CT_CMMFDevSoundData::DoCmdMaxGain"));
- }
-
-/**
- * Shows an integer representing the maximum volume device supports.
- * This is the maximum value which can be passed to CMMFDevSound::SetVolume.
- * @param aSection - Section to read params from the ini file
- * @return none
- */
-
-void CT_CMMFDevSoundData::DoCmdMaxVolume(const TTEFSectionName& aSection)
- {
- INFO_PRINTF1(_L("*START*CT_CMMFDevSoundData::DoCmdMaxVolume"));
- TBool dataOk = ETrue;
- TInt expectedVolumeValue=0;
- if(!GetIntFromConfig(aSection, KVolumeValue, expectedVolumeValue))
- {
- ERR_PRINTF2(_L("Error in getting parameter %S from INI file"), &KVolumeValue);
- SetBlockResult(EFail);
- dataOk = EFalse;
- }
- if(dataOk)
- {
- iVolumeValue = iDevSound->MaxVolume();
- INFO_PRINTF2(_L("Retrieved maximum volume value: %d"), iVolumeValue);
- if(expectedVolumeValue != iVolumeValue)
- {
- ERR_PRINTF3(_L("Expected volume value %d is different from retrieved volume value %d"), expectedVolumeValue, iVolumeValue);
- SetBlockResult(EFail);
- }
- }
- INFO_PRINTF1(_L("*END*CT_CMMFDevSoundData::DoCmdMaxVolume"));
- }
-
-/**
- * Shows the speaker balance set for playing.
- * @param aSection - Section to read params from the ini file
- * @return none
- */
-
-void CT_CMMFDevSoundData::DoCmdGetPlayBalanceL(const TTEFSectionName& aSection)
- {
- INFO_PRINTF1(_L("*START*CT_CMMFDevSoundData::DoCmdGetPlayBalanceL"));
- TBool dataOk = ETrue;
- TInt expectedLeftPercentage=0;
- if (!GetIntFromConfig(aSection, KLeftPercentage, expectedLeftPercentage))
- {
- ERR_PRINTF2(_L("Error in getting parameter %S from INI file"), &KLeftPercentage);
- SetBlockResult(EFail);
- dataOk = EFalse;
- }
- TInt expectedRightPercentage=0;
- if (!GetIntFromConfig(aSection, KRightPercentage, expectedRightPercentage))
- {
- ERR_PRINTF2(_L("Error in getting parameter %S from INI file"), &KRightPercentage);
- SetBlockResult(EFail);
- dataOk = EFalse;
- }
- if(dataOk)
- {
- TRAPD(error, iDevSound->GetPlayBalanceL(iLeftPercentage, iRightPercentage));
- if (error != KErrNone)
- {
- ERR_PRINTF2(_L("GetPlayBalanceL left with error %d"), error);
- SetError(error);
- }
- else
- {
- INFO_PRINTF3(_L("> Retrieved play balance values are left: %d, right:%d"), iLeftPercentage, iRightPercentage);
- if (expectedLeftPercentage !=iLeftPercentage)
- {
- ERR_PRINTF3(_L("Expected left percentage value %d is different from retrieved value %d"), expectedLeftPercentage, iLeftPercentage);
- SetBlockResult(EFail);
- }
- if (expectedRightPercentage !=iRightPercentage)
- {
- ERR_PRINTF3(_L("Expected right percentage value %d is different from retrieved value %d"), expectedRightPercentage, iRightPercentage);
- SetBlockResult(EFail);
- }
- }
- }
-
- INFO_PRINTF1(_L("*END*CT_CMMFDevSoundData::DoCmdGetPlayBalanceL"));
- }
-
-
-/**
- * Shows the microphone gain balance set for recording.
- * @param aSection - Section to read params from the ini file
- * @return none
- */
-void CT_CMMFDevSoundData::DoCmdGetRecordBalanceL(const TTEFSectionName& aSection)
- {
- INFO_PRINTF1(_L("*START*CT_CMMFDevSoundData::DoCmdGetRecordBalanceL"));
- TBool dataOk = ETrue;
- TInt expectedLeftPercentage=0;
- if(!GetIntFromConfig(aSection, KLeftPercentage, expectedLeftPercentage))
- {
- ERR_PRINTF2(_L("Error in getting parameter %S from INI file"), &KLeftPercentage);
- SetBlockResult(EFail);
- dataOk = EFalse;
- }
- TInt expectedRightPercentage=0;
- if(!GetIntFromConfig(aSection, KRightPercentage, expectedRightPercentage))
- {
- ERR_PRINTF2(_L("Error in getting parameter %S from INI file"), &KRightPercentage);
- SetBlockResult(EFail);
- dataOk = EFalse;
- }
- if(dataOk)
- {
- TRAPD(error, iDevSound->GetRecordBalanceL(iLeftPercentage, iRightPercentage));
- if (error != KErrNone)
- {
- ERR_PRINTF2(_L("GetRecordBalanceL left with error %d"), error);
- SetError(error);
- }
- else
- {
- INFO_PRINTF3(_L("> Retrieved record balance values are left: %d, right:%d"), iLeftPercentage, iRightPercentage);
- if(expectedLeftPercentage !=iLeftPercentage)
- {
- ERR_PRINTF3(_L("Expected left percentage value %d is different from retrieved value %d"), expectedLeftPercentage, iLeftPercentage);
- SetBlockResult(EFail);
- }
- if(expectedRightPercentage !=iRightPercentage)
- {
- ERR_PRINTF3(_L("Expected right ercentage value %d is different from retrieved value %d"), expectedRightPercentage, iRightPercentage);
- SetBlockResult(EFail);
- }
- }
-
- }
- INFO_PRINTF1(_L("*END*CT_CMMFDevSoundData::DoCmdGetRecordBalanceL"));
- }
-
-/**
- * Shows a list of the supported input datatypes that can be sent to DevSound for playing audio.
- * The datatypes returned are those that the DevSound supports given the priority settings passed
- * in aPrioritySettings.
- * @params none
- * @return none
- */
-void CT_CMMFDevSoundData::DoCmdGetSupportedInputDataTypesL()
- {
- TUid outputUid= {0x0};
- INFO_PRINTF1(_L("*START*CT_CMMFDevSoundData::DoCmdGetSupportedInputDataTypesL"));
- RArray< TFourCC > supportedDataTypes;
- TRAPD(error, iDevSound->GetSupportedInputDataTypesL(supportedDataTypes, iPrioritySettings));
- if (error != KErrNone)
- {
- ERR_PRINTF2(_L("GetSupportedInputDataTypesL left with error %d"), error);
- SetError(error);
- }
- else
- {
- INFO_PRINTF1(_L("List of the supported input datatypes that can be sent to DevSound for playing audio."));
- for (TInt i=0; i<supportedDataTypes.Count(); i++)
- {
- TFourCC fourCC = supportedDataTypes[i];
- TBuf<4> name;
- for(TInt j=0; j<= KFourCCMaxBitDisplacement; j+=K8Bits)
- {
- name.Append((TUint8)(fourCC.FourCC() >> j));
- }
- INFO_PRINTF3(_L("Supported Input Data types: 0x%x %S "), fourCC.FourCC(), &name);
- UtilityFourCCToHwDeviceUidL(name,EDecoder, outputUid);
- if(outputUid.iUid != 0)
- {
- INFO_PRINTF3(_L("\nHwDevice Uid=0x%08x for %S"),outputUid.iUid,&name);
- }
- else
- {
- INFO_PRINTF1(_L("Not Found"));
- }
- }
- supportedDataTypes.Reset();
- }
- INFO_PRINTF1(_L("*END*CT_CMMFDevSoundData::DoCmdGetSupportedInputDataTypesL"));
- }
-
-/**
- * Shows a list of the supported output dataypes that can be received from DevSound for
- * recording audio. The datatypes returned are those that the DevSound supports given the priority
- * settings passed in aPrioritySettings.
- * @param none
- * @return none
- */
-void CT_CMMFDevSoundData::DoCmdGetSupportedOutputDataTypesL()
- {
- TUid outputUid= {0x0};
- INFO_PRINTF1(_L("*START*CT_CMMFDevSoundData::DoCmdGetSupportedOutputDataTypesL"));
- RArray< TFourCC > supportedDataTypes;
- TRAPD(error, iDevSound->GetSupportedOutputDataTypesL(supportedDataTypes, iPrioritySettings));
- if (error != KErrNone)
- {
- ERR_PRINTF2(_L("GetSupportedOutputDataTypesL left with error %d"), error);
- SetError(error);
- }
- else
- {
- INFO_PRINTF1(_L("List of the supported output dataypes that can be received from DevSound for recording audio."));
- for (TInt i=0; i<supportedDataTypes.Count(); i++)
- {
- TFourCC fourCC = supportedDataTypes[i];
- TBuf<4> name;
- for(TInt j=0; j<=KFourCCMaxBitDisplacement; j+=K8Bits)
- {
- name.Append((TUint8)(fourCC.FourCC() >> j));
- }
- INFO_PRINTF3(_L("Supported Output Data types: 0x%x %S "), fourCC.FourCC(), &name);
- UtilityFourCCToHwDeviceUidL(name, EEncoder, outputUid);
- if(outputUid.iUid != 0)
- {
- INFO_PRINTF3(_L("\nHwDevice Uid=0x%08x for %S"),outputUid.iUid,&name);
- }
- else
- {
- INFO_PRINTF1(_L("Not Found"));
- }
- }
- supportedDataTypes.Reset();
- }
- INFO_PRINTF1(_L("*END*CT_CMMFDevSoundData::DoCmdGetSupportedOutputDataTypesL"));
- }
-
-/**
- * Shows the number of samples played
- * @param none
- * @return none
- */
-void CT_CMMFDevSoundData::DoCmdSamplesPlayed()
- {
- INFO_PRINTF1(_L("*START*CT_CMMFDevSoundData::DoCmdSamplesPlayed"));
- INFO_PRINTF2(_L("Number of samples played so far: %d"),iDevSound->SamplesPlayed());
- INFO_PRINTF1(_L("*END*CT_CMMFDevSoundData::DoCmdSamplesPlayed"));
- }
-
-/**
- * Shows the number of samples recorded
- * @param none
- * @return none
- */
-void CT_CMMFDevSoundData::DoCmdSamplesRecorded()
- {
- INFO_PRINTF1(_L("*START*CT_CMMFDevSoundData::DoCmdSamplesRecorded"));
- INFO_PRINTF2(_L("Number of samples recorded so far: %d"), iDevSound->SamplesRecorded());
- INFO_PRINTF1(_L("*END*CT_CMMFDevSoundData::DoCmdSamplesRecorded"));
- }
-
-/**
- * Shows an integer representing the current volume.
- * @param aSection - Section to read param from the ini file
- * @return none
- */
-void CT_CMMFDevSoundData::DoCmdVolume(const TTEFSectionName& aSection)
- {
- INFO_PRINTF1(_L("*START*CT_CMMFDevSoundData::DoCmdVolume"));
- TBool dataOk = ETrue;
- TInt expectedVolumeValue=0;
- if(!GetIntFromConfig(aSection, KVolumeValue, expectedVolumeValue))
- {
- ERR_PRINTF2(_L("Error in getting parameter %S from INI file"), &KVolumeValue);
- SetBlockResult(EFail);
- dataOk = EFalse;
- }
- if(dataOk)
- {
- iVolumeValue = iDevSound->Volume();
- INFO_PRINTF2(_L("Retrieved volume value: %d"), iVolumeValue);
- if(expectedVolumeValue != iVolumeValue)
- {
- ERR_PRINTF3(_L("Expected volume value %d is different from retrieved volume value %d"), expectedVolumeValue, iVolumeValue);
- SetBlockResult(EFail);
- }
- }
- INFO_PRINTF1(_L("*END*CT_CMMFDevSoundData::DoCmdVolume"));
- }
-
-/**
- * Shows an integer representing the current gain.
- * @param aSection - Section to read param from the ini file
- * @return none
- */
-void CT_CMMFDevSoundData::DoCmdGain(const TTEFSectionName& aSection)
- {
- INFO_PRINTF1(_L("*START*CT_CMMFDevSoundData::DoCmdGain"));
- TBool dataOk = ETrue;
- TInt expectedGainValue=0;
- if(!GetIntFromConfig(aSection, KGainValue, expectedGainValue))
- {
- ERR_PRINTF2(_L("Error in getting parameter %S from INI file"), &KGainValue);
- SetBlockResult(EFail);
- dataOk = EFalse;
- }
- if(dataOk)
- {
- iGainValue = iDevSound->Gain();
- INFO_PRINTF2(_L("Retrieved gain value: %d"), iGainValue);
- if(expectedGainValue != iGainValue)
- {
- ERR_PRINTF3(_L("Expected gain value %d is different from retrieved gain value %d"), expectedGainValue, iGainValue);
- SetBlockResult(EFail);
- }
- }
- INFO_PRINTF1(_L("*END*CT_CMMFDevSoundData::DoCmdGain"));
- }
-
-/**
- * Shows the number of available pre-defined tone sequences
- * @param none
- * @return none
- */
-void CT_CMMFDevSoundData::DoCmdFixedSequenceCount()
- {
- INFO_PRINTF1(_L("*START*CT_CMMFDevSoundData::DoCmdFixedSequenceCount"));
- INFO_PRINTF2(_L("Number of available pre-defined tone sequences: %d"), iDevSound->FixedSequenceCount());
- INFO_PRINTF1(_L("*END*CT_CMMFDevSoundData::DoCmdFixedSequenceCount"));
- }
-
-/**
- * Shows the name assigned to a specific pre-defined tone sequence.
- * This is the number of the fixed sequence supported by DevSound by default.
- * @param aSection - Section to read params from the ini file
- * @return none
- */
-void CT_CMMFDevSoundData::DoCmdFixedSequenceName(const TTEFSectionName& aSection)
- {
- INFO_PRINTF1(_L("*START*CT_CMMFDevSoundData::DoCmdFixedSequenceName"));
- TBool dataOk =ETrue;
- TInt sequenceNumber=0;
- if(!GetIntFromConfig(aSection, KSequenceNumber, sequenceNumber))
- {
- ERR_PRINTF2(_L("Error in getting parameter %S from INI file"), &KSequenceNumber);
- SetBlockResult(EFail);
- dataOk =EFalse;
- }
- if(dataOk)
- {
- INFO_PRINTF2(_L("Name assigned to a specific pre-defined tone sequence returned: %S"),
- &iDevSound->FixedSequenceName(sequenceNumber));
- }
- INFO_PRINTF1(_L("*END*CT_CMMFDevSoundData::DoCmdFixedSequenceName"));
- }
-
-
-/**
- * Configure CMMFDevSound object with the settings in aConfig.
- * Use this to set sampling rate, encoding and mono/stereo.
- * @param aSection - Section to read params from the ini file
- * @return none
- */
-void CT_CMMFDevSoundData::DoCmdSetConfigL(const TTEFSectionName& aSection)
- {
- INFO_PRINTF1(_L("*START*CT_CMMFDevSoundData::DoCmdSetConfigL"));
-
- TInt rate=0;
- INFO_PRINTF1(_L("To use default values run Capabilities before SetConfigL"));
- if (!GetEnumFromConfig(aSection, KRate, iEnumSampleRate, rate))
- {
- INFO_PRINTF2(_L("Rate value was not overwritten, using default value %d."), iCapabilities.iRate);
- }
- else
- {
- iCapabilities.iRate = rate;
- }
-
- TInt encoding=0;
- if (!GetIntFromConfig(aSection, KEncoding, encoding))
- {
- INFO_PRINTF2(_L("Encoding value was not overwritten, using default value %d."), iCapabilities.iEncoding);
- }
- else
- {
- iCapabilities.iEncoding = encoding;
- }
-
- TInt channels=0;
- if (!GetEnumFromConfig(aSection, KChannels, iEnumChannels, channels))
- {
- INFO_PRINTF2(_L("Channels value was not overwritten, using default value %d ."), iCapabilities.iChannels);
- }
- else
- {
- iCapabilities.iChannels = channels;
- }
-
- TInt bufferSize=0;
- if (!GetIntFromConfig(aSection, KBufferSize, bufferSize))
- {
- INFO_PRINTF2(_L("BufferSize value was not overwritten, using default value %d"), iCapabilities.iBufferSize);
- }
- else
- {
- iCapabilities.iBufferSize = bufferSize;
- }
- TRAPD(error,iDevSound->SetConfigL(iCapabilities))
- if(error != KErrNone)
- {
- ERR_PRINTF2(_L("SetConfigL left with error %d"), error);
- SetError(error);
- }
- INFO_PRINTF1(_L("*END*CT_CMMFDevSoundData::DoCmdSetConfigL"));
- }
-
-
-/**
- * Defines the duration of tone on, tone off and tone pause to be used during the
- * DTMF tone playback operation.
- * Supported only during tone playing.
- * @param aSection - Section to read param from the ini file
- * @return none
- */
-void CT_CMMFDevSoundData::DoCmdSetDTMFLengths(const TTEFSectionName& aSection)
- {
- INFO_PRINTF1(_L("*START*CT_CMMFDevSoundData::DoCmdSetDTMFLengths"));
- TInt time=0;
- TBool dataOk = ETrue;
- if (!GetIntFromConfig(aSection, KToneOnLength, time))
- {
- ERR_PRINTF2(_L("Error in getting parameter %S from INI file"), &KToneOnLength);
- SetBlockResult(EFail);
- dataOk = EFalse;
- }
- TTimeIntervalMicroSeconds32 toneOnLength(time);
-
- if (!GetIntFromConfig(aSection, KToneOffLength, time))
- {
- ERR_PRINTF2(_L("Error in getting parameter %S from INI file"), &KToneOffLength);
- SetBlockResult(EFail);
- dataOk = EFalse;
- }
- TTimeIntervalMicroSeconds32 toneOffLength(time);
-
- if (!GetIntFromConfig(aSection, KPauseLength, time))
- {
- ERR_PRINTF2(_L("Error in getting parameter %S from INI file"), &KPauseLength);
- SetBlockResult(EFail);
- dataOk = EFalse;
- }
- TTimeIntervalMicroSeconds32 pauseLength(time);
- if(dataOk)
- {
- iDevSound->SetDTMFLengths(toneOnLength, toneOffLength, pauseLength);
- }
- INFO_PRINTF1(_L("*END*CT_CMMFDevSoundData::DoCmdSetDTMFLengths"));
- }
-
-
-/**
- * Changes the current recording gain to a specified value.
- * The gain can be changed before or during recording and is effective
- * immediately.
- * @params aSection - Section to read param from the ini file
- */
-void CT_CMMFDevSoundData::DoCmdSetGain(const TTEFSectionName& aSection)
- {
- INFO_PRINTF1(_L("*START*CT_CMMFDevSoundData::DoCmdSetGain"));
- TInt gainValue = iGainValue;
- if(!GetIntFromConfig(aSection, KGainValue, gainValue))
- {
- INFO_PRINTF1(_L("The Gain value was not found in the ini file, using default value"));
- }
- INFO_PRINTF2(_L("Setting gain value to %d"), gainValue);
- iDevSound->SetGain(gainValue);
- INFO_PRINTF1(_L("*END*CT_CMMFDevSoundData::DoCmdSetGain"));
- }
-
-/**
- * Sets the speaker balance for playing.
- * The speaker balance can be changed before or during playback and is
- * effective immediately.
- * @param aSection - The section to read params from the ini file
- * @return none
- */
-void CT_CMMFDevSoundData::DoCmdSetPlayBalanceL(const TTEFSectionName& aSection)
- {
- INFO_PRINTF1(_L("*START*CT_CMMFDevSoundData::DoCmdSetPlayBalanceL"));
- TInt leftPercentage = iLeftPercentage;
- if(!GetIntFromConfig(aSection, KLeftPercentage, leftPercentage))
- {
- INFO_PRINTF1(_L("The Left percentage was not found in the ini file, using default value"));
- }
- TInt rightPercentage = iRightPercentage;
- if(!GetIntFromConfig(aSection, KRightPercentage, rightPercentage))
- {
- INFO_PRINTF1(_L("The Right percentage was not found in the ini file, using default value"));
- }
- INFO_PRINTF3(_L("Setting play balance to left: %d, right: %d values"), leftPercentage, rightPercentage);
- TRAPD(error, iDevSound->SetPlayBalanceL(leftPercentage, rightPercentage));
- if(error != KErrNone)
- {
- ERR_PRINTF2(_L("SetPlayBalanceL left with error %d"), error);
- SetError(error);
- }
- INFO_PRINTF1(_L("*END*CT_CMMFDevSoundData::DoCmdSetPlayBalanceL"));
- }
-
-/**
- * Defines the priority settings that should be used for this instance.
- * @param aSection - Section to read params from the ini file
- * @return none
- */
-void CT_CMMFDevSoundData::DoCmdSetPrioritySettings(const TTEFSectionName& aSection)
- {
- INFO_PRINTF1(_L("*START*CT_CMMFDevSoundData::DoCmdSetPrioritySettings"));
- TBool dataOk = ETrue;
- if(!GetIntFromConfig(aSection, KPriority, iPrioritySettings.iPriority))
- {
- ERR_PRINTF2(_L("Error in getting parameter %S from INI file"), &KPriority);
- SetBlockResult(EFail);
- dataOk = EFalse;
- }
- TInt preference=0;
- if (!GetHexFromConfig(aSection, KPreference, preference))
- {
- ERR_PRINTF2(_L("%S parameter was not found in INI file"), &KPreference);
- SetBlockResult(EFail);
- dataOk = EFalse;
- }
- iPrioritySettings.iPref = (TMdaPriorityPreference)preference;
- TInt state=0;
- if (!GetEnumFromConfig(aSection, KPriorityState, iEnumMode, state))
- {
- ERR_PRINTF2(_L("Error in getting parameter %S from INI file"), &KPriorityState);
- SetBlockResult(EFail);
- dataOk = EFalse;
- }
- iPrioritySettings.iState = (TMMFState)state;
- if(dataOk)
- {
- iDevSound->SetPrioritySettings(iPrioritySettings);
- }
- INFO_PRINTF1(_L("*END*CT_CMMFDevSoundData::DoCmdSetPrioritySettings"));
- }
-
-/**
- * Sets the microphone gain balance for recording.
- * The microphone gain balance can be changed before or during recording and
- * is effective immediately.
- * @param aSection - Section to read params from the ini file
- * @return none
- */
-void CT_CMMFDevSoundData::DoCmdSetRecordBalanceL(const TTEFSectionName& aSection)
- {
- INFO_PRINTF1(_L("*START*CT_CMMFDevSoundData::DoCmdSetRecordBalanceL"));
- TInt leftPercentage = iLeftPercentage;
- if (!GetIntFromConfig(aSection, KLeftPercentage, leftPercentage))
- {
- INFO_PRINTF1(_L("The Left value was not found in the ini file, using default value"));
- }
- TInt rightPercentage = iRightPercentage;
- if (!GetIntFromConfig(aSection, KRightPercentage, rightPercentage))
- {
- INFO_PRINTF1(_L("The Right value was not found in the ini file, using default value"));
- }
- INFO_PRINTF3(_L("Setting record balance to left: %d, right: %d values"), leftPercentage, rightPercentage);
- TRAPD(error, iDevSound->SetRecordBalanceL(leftPercentage, rightPercentage));
- if (KErrNone != error)
- {
- ERR_PRINTF2(_L("SetRecordBalanceL left with error %d"), error);
- SetError(error);
- }
- INFO_PRINTF1(_L("*END*CT_CMMFDevSoundData::DoCmdSetRecordBalanceL"));
- }
-
-/**
- * Defines the number of times the audio is to be repeated during the tone
- * playback operation.
- * A period of silence can follow each playing of a tone. The tone playing can
- * be repeated indefinitely.
- * @param aSection - Section to read params from the ini file
- * @return none
- */
-void CT_CMMFDevSoundData::DoCmdSetToneRepeats(const TTEFSectionName& aSection)
- {
- INFO_PRINTF1(_L("*START*CT_CMMFDevSoundData::DoCmdSetToneRepeats"));
- TInt repeatCount=0;
- TBool dataOk = ETrue;
- if (!GetIntFromConfig(aSection, KRepeatCount, repeatCount))
- {
- ERR_PRINTF2(_L("Error in getting parameter %S from INI file"), &KRepeatCount);
- SetBlockResult(EFail);
- dataOk = EFalse;
- }
-
- TInt tempValue=0;
- if (!GetIntFromConfig(aSection, KRepeatTrailingSilence, tempValue))
- {
- ERR_PRINTF2(_L("Error in getting parameter %S from INI file"), &KRepeatTrailingSilence);
- SetBlockResult(EFail);
- dataOk = EFalse;
- }
- TTimeIntervalMicroSeconds repeatTrailingSilence(tempValue);
-
- if(dataOk)
- {
- iDevSound->SetToneRepeats(repeatCount, repeatTrailingSilence);
- }
- INFO_PRINTF1(_L("*END*CT_CMMFDevSoundData::DoCmdSetToneRepeats"));
- }
-
-/**
- * Defines the period over which the volume level is to rise smoothly from
- * nothing to the normal volume level.
- * The function is only available while the tone is playing.
- * @param aSection - Section to read params from the ini file
- * @return none
- */
-void CT_CMMFDevSoundData::DoCmdSetVolume(const TTEFSectionName& aSection)
- {
- INFO_PRINTF1(_L("*START*CT_CMMFDevSoundData::DoCmdSetVolume"));
- TInt volume = iVolumeValue;
- if(!GetIntFromConfig(aSection, KVolumeValue, volume))
- {
- INFO_PRINTF1(_L("The Volume value was not found in the ini file, using default value"));
- }
- INFO_PRINTF2(_L("Setting volume value to %d"), volume);
- iDevSound->SetVolume(volume);
- INFO_PRINTF1(_L("*END*CT_CMMFDevSoundData::DoCmdSetVolume"));
- }
-
-/**
- * Defines the loop over which the volume level is to rise smoothly from
- * nothing to the normal volume level.
- * @param aSection - Section to read params from the ini file
- * @return none
- */
-void CT_CMMFDevSoundData::DoCmdSetVolumeLoop(const TTEFSectionName& aSection)
- {
- INFO_PRINTF1(_L("*START*CT_CMMFDevSoundData::DoCmdSetVolumeLoop"));
- TInt volLoop=0;
- TBool dataOk = ETrue;
- if (!GetIntFromConfig(aSection, KVolumeLoop, volLoop))
- {
- ERR_PRINTF2(_L("Error in getting parameter %S from INI file"), &KVolumeLoop);
- SetBlockResult(EFail);
- dataOk = EFalse;
- }
- if(dataOk)
- {
- TPtrC parVolume;
- TInt volumeValue=0;
- RPointerArray<HBufC> volumeList;
- for (TInt i=0; i<volLoop; i++)
- {
- if (!GetArrayRectFromConfig(aSection, KVolumeList, volumeList))
- {
- ERR_PRINTF2(_L("Error in getting parameter %S from INI file"), &KVolumeList);
- volumeList.ResetAndDestroy();
- SetBlockResult(EFail);
- dataOk = EFalse;
- }
- if(dataOk)
- {
- for (TInt j=0; j<volumeList.Count(); j++)
- {
- parVolume.Set(*volumeList[j]);
- TLex lex(parVolume);
- TInt error = lex.Val(volumeValue);
- if (error != KErrNone)
- {
- ERR_PRINTF2(_L("Obtaining volume value failed with error %d"), error);
- SetError(error);
- volumeList.ResetAndDestroy();
- }
- else
- {
- INFO_PRINTF3(_L("Setting volume number %d in the iteration number %d"), j, i);
- iDevSound->SetVolume(volumeValue);
- }
- }
- }
- }
- volumeList.ResetAndDestroy();
- }
- INFO_PRINTF1(_L("*END*CT_CMMFDevSoundData::DoCmdSetVolumeLoop"));
- }
-
-/**
- * Defines the period over which the volume level is to rise smoothly from
- * nothing to the normal volume level.
- * The function is only available while the tone is playing.
- * @param aSection - Section to read param from the ini file
- * @return none
- */
-void CT_CMMFDevSoundData::DoCmdSetVolumeRamp(const TTEFSectionName& aSection)
- {
- INFO_PRINTF1(_L("*START*CT_CMMFDevSoundData::DoCmdSetVolumeRamp"));
- TInt tempValue=0;
- TBool dataOk = ETrue;
- if (!GetIntFromConfig(aSection, KRampDuration, tempValue))
- {
- ERR_PRINTF2(_L("Error in getting parameter %S from INI file"), &KRampDuration);
- SetBlockResult(EFail);
- dataOk = EFalse;
- }
- TTimeIntervalMicroSeconds rampDuration(tempValue);
-
- if(dataOk)
- {
- iDevSound->SetVolumeRamp(rampDuration);
- }
- INFO_PRINTF1(_L("*END*CT_CMMFDevSoundData::DoCmdSetVolumeRamp"));
- }
-
-/**
- * Initializes DevSound object for the mode aMode for processing audio data
- * with hardware device aHWDev and supporting FourCC.
- * Too Initializes CMMFDevSound object to play and record PCM16 raw audio data
- * with sampling rate of 8 KHz.
- * @param aSection - Section to read params from the ini file
- */
-void CT_CMMFDevSoundData::DoCmdInitializeL(const TTEFSectionName& aSection, const TInt aAsyncErrorIndex)
- {
- INFO_PRINTF1(_L("*START*CT_CMMFDevSoundData::DoCmdInitializeL"));
- TBool dataOk = ETrue;
- TInt mode=0;
- if (!GetEnumFromConfig(aSection, KMode, iEnumMode, mode))
- {
- ERR_PRINTF2(_L("Error in getting parameter %S from INI file"), &KMode);
- SetBlockResult(EFail);
- dataOk = EFalse;
- }
- else
- {
- TInt hwDeviceInt=0;
- if (!GetHexFromConfig(aSection, KHwDevice, hwDeviceInt))
- {
- INFO_PRINTF2(_L("%S parameter was not found in INI file"), &KHwDevice);
- TPtrC fourCCIniString;
- if (!GetStringFromConfig(aSection, KFourCC, fourCCIniString))
- {
- INFO_PRINTF2(_L("%S parameter was not found in INI file"), &KFourCC);
- if (dataOk)
- {
- INFO_PRINTF1(_L("Initializing DevSound with overload: void InitializeL(MDevSoundObserver &aDevSoundObserver, TMMFState aMode)"));
- TRAPD(error, iDevSound->InitializeL(*this, (TMMFState)mode));
- if(KErrNone != error)
- {
- ERR_PRINTF2(_L("InitializeL(aMDevSoundObserver, mode) left with error %d"), error);
- SetError(error);
- }
- }
- }
- else
- {
- if (fourCCIniString.Length() > KTFourCC)
- {
- ERR_PRINTF2(_L("FourCC obtained from INI file exceeded the valid length in %d"), fourCCIniString.Length());
- SetBlockResult(EFail);
- dataOk = EFalse;
- }
- if (dataOk)
- {
- TBuf<256> fourCCString;
- fourCCString.Copy(fourCCIniString);
- while (fourCCString.Length() < KTFourCC)
- {
- fourCCString.Insert(0, _L(" "));
- }
- TFourCC fourCC;
- fourCC = TFourCC(fourCCString[3] << 24 | fourCCString[2] << 16 | fourCCString[1] << 8 | fourCCString[0]);
- INFO_PRINTF1(_L("Initializing DevSound with overload: void InitializeL(MDevSoundObserver &aDevSoundObserver, TFourCC aDesiredFourCC, TMMFState aMode)"));
- TRAPD(error, iDevSound->InitializeL(*this, fourCC, (TMMFState)mode));
- if(KErrNone!=error)
- {
- ERR_PRINTF2(_L("InitializeL(aMDevSoundObserver, fourCC, mode) left with error %d"), error);
- ERR_PRINTF2(_L(" %S Not supported in this device"), &fourCCString);
- SetError(error);
- SetBlockResult(EFail);
- }
- }
- }
- }
- else
- {
- if (dataOk)
- {
- TUid hwDevice;
- hwDevice.iUid = hwDeviceInt;
- INFO_PRINTF1(_L("Initializing DevSound with overload: void InitializeL(MDevSoundObserver &aDevSoundObserver, TUid aHWDev, TMMFState aMode)"));
- TRAPD(error, iDevSound->InitializeL(*this, hwDevice, (TMMFState)mode));
- if(KErrNone != error)
- {
- ERR_PRINTF2(_L("InitializeL(aMDevSoundObserver, hwDevice, mode) left with error %d"), error);
- SetError(error);
- }
- }
- }
- }
-
- if (dataOk)
- {
- IncOutstanding();
- iInitializeErrorIndex = aAsyncErrorIndex;
- }
- INFO_PRINTF1(_L("*END*CT_CMMFDevSoundData::DoCmdInitializeL"));
- }
-
-
-/**
- * Initializes the audio device and starts playing the DTMF string aDTMFString.
- * @param aSection - Section to read param from the ini file
- * @return none
- */
-void CT_CMMFDevSoundData::DoCmdPlayDTMFStringL(const TTEFSectionName& aSection, const TInt aAsyncErrorIndex)
- {
- INFO_PRINTF1(_L("*START*CT_CMMFDevSoundData::DoCmdPlayDTMFStringL"));
- TBool dataOk = ETrue;
- TPtrC dtmfString;
- if (!GetStringFromConfig(aSection, KDTMFString, dtmfString) )
- {
- ERR_PRINTF2(_L("Error in getting parameter %S from INI file"), &KDTMFString);
- SetBlockResult(EFail);
- dataOk = EFalse;
- }
- if(dataOk)
- {
- TRAPD( error, iDevSound->PlayDTMFStringL(dtmfString) );
- if(error != KErrNone)
- {
- ERR_PRINTF2(_L("Play DTMF string failed with error: %d "), error);
- SetError(error);
- }
- else
- {
- iToneErrorIndex = aAsyncErrorIndex;
- IncOutstanding();
- }
- }
-
- INFO_PRINTF1(_L("*END*CT_CMMFDevSoundData::DoCmdPlayDTMFStringL"));
- }
-
-/**
- * Plays data in the buffer at the current volume.
- * @param
- * @return
- */
-void CT_CMMFDevSoundData::DoCmdPlayData()
- {
- INFO_PRINTF1(_L("*START*CT_CMMFDevSoundData::DoCmdPlayData"));
- PlayData();
- INFO_PRINTF1(_L("*END*CT_CMMFDevSoundData::DoCmdPlayData"));
- }
-
-/**
- * Helper for the DoCmdPlayData command
- */
-void CT_CMMFDevSoundData::PlayData()
- {
- INFO_PRINTF1(_L("CT_CMMFDevSoundData::PlayData()"));
- iDevSound->PlayData();
- }
-
-/**
- * Initializes audio device and starts playing a dual tone.
- * The generated tone consists of two sine waves of different frequencies summed together.
- * Dual Tone is played with the specified frequencies and for the specified duration.
- * @param aSection - Section to read params from the ini file.
- * @return none
- */
-void CT_CMMFDevSoundData::DoCmdPlayDualToneL(const TTEFSectionName& aSection , const TInt aAsyncErrorIndex)
- {
- INFO_PRINTF1(_L("*START*CT_CMMFDevSoundData::DoCmdPlayDualToneL"));
- TBool dataOk = ETrue;
- TInt frequencyOne=0;
- if (!GetIntFromConfig(aSection, KFrequencyOne, frequencyOne) )
- {
- ERR_PRINTF2(_L("Error in getting parameter %S from INI file"), &KFrequencyOne);
- SetBlockResult(EFail);
- dataOk = EFalse;
- }
-
- TInt frequencyTwo=0;
- if (!GetIntFromConfig(aSection, KFrequencyTwo, frequencyTwo) )
- {
- ERR_PRINTF2(_L("Error in getting parameter %S from INI file"), &KFrequencyTwo);
- SetBlockResult(EFail);
- dataOk = EFalse;
- }
-
- TInt duration=0;
- if (!GetIntFromConfig(aSection, KDuration, duration) )
- {
- ERR_PRINTF2(_L("Error in getting parameter %S from INI file"), &KDuration);
- SetBlockResult(EFail);
- dataOk = EFalse;
- }
- if(dataOk)
- {
- TRAPD( error, iDevSound->PlayDualToneL(frequencyOne, frequencyTwo, duration) );
- if(error != KErrNone)
- {
- ERR_PRINTF2(_L("Play dual tone failed with error %d"), error);
- SetError(error);
- }
- else
- {
- iToneErrorIndex = aAsyncErrorIndex;
- IncOutstanding();
- }
- }
-
- INFO_PRINTF1(_L("*END*CT_CMMFDevSoundData::DoCmdPlayDualToneL"));
- }
-
-
-/**
- * Initializes the audio device and starts the play process.
- *
- * This function queries and acquires the audio policy before initializing audio device. If there was
- * an error during policy initialization, PlayError() function will be called on the observer with
- * error code KErrAccessDenied, otherwise BufferToBeFilled() function will be called with a buffer
- * reference. After reading data into the buffer reference passed, the client should call PlayData() to play data.
- *
- * The amount of data that can be played is specified in CMMFBuffer::RequestSize(). Any data that is read into
- * buffer beyond this size will be ignored.
- * @param none
- * @return none
- */
-void CT_CMMFDevSoundData::DoCmdPlayInitL(const TInt aAsyncErrorIndex)
- {
- INFO_PRINTF1(_L("*START*CT_CMMFDevSoundData::DoCmdPlayInitL"));
- TRAPD(error, iDevSound->PlayInitL());
- if (error != KErrNone)
- {
- ERR_PRINTF2(_L("PlayInitL left with error %d"), error);
- SetError(error);
- }
- else
- {
- iPlayErrorIndex = aAsyncErrorIndex;
- IncOutstanding();
- }
- INFO_PRINTF1(_L("*END*CT_CMMFDevSoundData::DoCmdPlayInitL"));
- }
-
-/**
- * Initializes the audio device and starts playing a tone. The tone is played with the
- * frequency and duration specified.
- * @param aSection - Section to read params from the ini file
- * @return none
- */
-void CT_CMMFDevSoundData::DoCmdPlayToneL(const TTEFSectionName& aSection , const TInt aAsyncErrorIndex)
- {
- INFO_PRINTF1(_L("*START*CT_CMMFDevSoundData::DoCmdPlayToneL"));
- TBool dataOk = ETrue;
- TInt frequency=0;
- if (!GetIntFromConfig(aSection, KFrequency, frequency))
- {
- ERR_PRINTF2(_L("Error in getting parameter %S from INI file"), &KFrequency);
- SetBlockResult(EFail);
- dataOk = EFalse;
- }
-
- TInt duration=0;
- if (!GetIntFromConfig(aSection, KDuration, duration))
- {
- ERR_PRINTF2(_L("Error in getting parameter %S from INI file"), &KDuration);
- SetBlockResult(EFail);
- dataOk = EFalse;
- }
- if(dataOk)
- {
- TRAPD(error, iDevSound->PlayToneL(frequency, duration));
- if (error != KErrNone)
- {
- ERR_PRINTF2(_L("Play tone failed with error %d"), error);
- SetError(error);
- }
- else
- {
- iToneErrorIndex = aAsyncErrorIndex;
- IncOutstanding();
- }
- }
- INFO_PRINTF1(_L("*END*CT_CMMFDevSoundData::DoCmdPlayToneL"));
- }
-
-/**
- * Initializes the audio device and starts playing a tone sequence.
- * @param aSection - Section to read param from the ini file
- * @return none
- */
-void CT_CMMFDevSoundData::DoCmdPlayToneSequenceL(const TTEFSectionName& aSection , const TInt aAsyncErrorIndex)
- {
- INFO_PRINTF1(_L("*START*CT_CMMFDevSoundData::DoCmdPlayToneSequenceL"));
- TBool dataOk = ETrue;
- TPtrC toneFileParameter;
- if (!GetStringFromConfig(aSection, KFilename, toneFileParameter))
- {
- ERR_PRINTF2(_L("Error in getting parameter %S from INI file"), &KFilename);
- SetBlockResult(EFail);
- dataOk = EFalse;
- }
- if(dataOk)
- {
- TInt error = iToneFile.Open(iFs, toneFileParameter, EFileRead);
- if (error != KErrNone)
- {
- ERR_PRINTF2(_L("Open file failed with error %d"), error);
- SetError(EFail);
- }
- else
- {
- error = iToneFile.Read(iToneSequence);
- if (error != KErrNone)
- {
- ERR_PRINTF2(_L("Read file failed with error %d"), error);
- SetError(EFail);
- }
- else
- {
- TRAP(error, iDevSound->PlayToneSequenceL(iToneSequence));
- if (error != KErrNone)
- {
- ERR_PRINTF2(_L("Play tone sequence failed with error %d"), error);
- SetError(error);
- }
- else
- {
- iToneErrorIndex = aAsyncErrorIndex;
- IncOutstanding();
- }
- }
- }
- }
- INFO_PRINTF1(_L("*END*CT_CMMFDevSoundData::DoCmdPlayToneSequenceL"));
- }
-
-/**
- * Contine the process of recording.
- *
- * Once the buffer is filled with recorded data, the Observer gets a reference to the buffer along
- * with the callback function BufferToBeEmptied(). After processing the buffer (copying over to a
- * different buffer or writing to file) the client should call this function to continue the
- * recording process.
- * @param none
- * @return none
- */
-void CT_CMMFDevSoundData::DoCmdRecordData()
- {
- INFO_PRINTF1(_L("*START*CT_CMMFDevSoundData::DoCmdRecordData"));
- RecordData();
- INFO_PRINTF1(_L("*END*CT_CMMFDevSoundData::DoCmdRecordData"));
- }
-
-/**
- * Helper method to DoCmdRecordData command
- */
-void CT_CMMFDevSoundData::RecordData()
- {
- iDevSound->RecordData();
- }
-
-/**
- * Initializes audio device and starts the recording process.
- *
- * This command queries and acquires the audio policy before initializing audio device. If there
- * was an error during policy initialization, RecordError() function will be called on the observer
- * with error code KErrAccessDenied, otherwise BufferToBeEmptied() function will be called with a
- * buffer reference. This buffer contains recorded or encoded data. After processing data in the
- * buffer reference passed, the client should call RecordData() to continue recording process.
- *
- * The amount of data that is available is specified in CMMFBuffer::RequestSize().
- * @param none
- * @return none
- */
-void CT_CMMFDevSoundData::DoCmdRecordInitL(const TInt aAsyncErrorIndex)
- {
- INFO_PRINTF1(_L("*START*CT_CMMFDevSoundData::DoCmdRecordInitL"));
- iRecordErrorIndex = aAsyncErrorIndex;
- TRAPD(error, iDevSound->RecordInitL());
- if (error != KErrNone)
- {
- ERR_PRINTF2(_L("RecordInitL left with error %d"), error);
- SetError(error);
- }
- INFO_PRINTF1(_L("*END*CT_CMMFDevSoundData::DoCmdRecordInitL"));
- }
-
-
-/**
- * Conceal an error
- * @param none
- * @return none
- */
-void CT_CMMFDevSoundData::DoCmdUtilityErrorConceal()
- {
- INFO_PRINTF1(_L("*START*CT_CMMFDevSoundData::DoCmdErrorConceal"));
- iErrorConceal=ETrue;
- INFO_PRINTF1(_L("*END*CT_CMMFDevSoundData::DoCmdErrorConceal"));
- }
-
-/**
- * Stop an audio file
- * @param none
- * @return none
- */
-void CT_CMMFDevSoundData::DoCmdStop(const TTEFSectionName& aSection)
- {
- INFO_PRINTF1(_L("*START*CT_CMMFDevSoundData::DoCmdStop"));
- TBool pause;
- if(!GetBoolFromConfig(aSection,KPause,pause))
- {
- INFO_PRINTF1(_L("The DoCmdStop command will be execute"));
- pause = EFalse;
- }
- iPaused=pause;
- if(iPaused)
- {
- INFO_PRINTF1(_L("a Pause was required"));
- }
- Stop();
- INFO_PRINTF1(_L("*END*CT_CMMFDevSoundData::DoCmdStop"));
- }
-
-
-
-
-/**
- * Utility for get the HwDevice for play and recording
- */
-
-void CT_CMMFDevSoundData::UtilityFourCCToHwDeviceUidL(const TDesC& aFourCC, THwDeviceType aType, TUid& aHwDeviceUid)
- {
- TPtrC8 fourCCPtr(0,0);
- TPtrC8 fourCCP16Ptr(0,0);
- RImplInfoPtrArray impArray;
- CleanupResetAndDestroyPushL(impArray);
- REComSession::ListImplementationsL(TUid::Uid(KMmfUidPluginInterfaceHwDevice), impArray);
- TBuf<KHwDeviceDefaultDataLength> datatype;
- for(TInt i = 0; i < impArray.Count(); ++i)
- {
- CImplementationInformation& entry = *(impArray[i]);
- // Validate lenght
- if (entry.DataType().Length() == KHwDeviceDefaultDataLength)
- {
- INFO_PRINTF2(_L("Implementation UID=0x%08x"),entry.ImplementationUid());
- datatype.Copy(entry.DataType());
- INFO_PRINTF2(_L("Default data (fourCCs)=%S"), &datatype);
- // Extract FourCC
- if(aType == EDecoder)
- {
- fourCCPtr.Set(entry.DataType().Left(KFourCCLength));
- fourCCP16Ptr.Set(entry.DataType().Right(KFourCCLength));
- }
- else if (aType == EEncoder)
- {
- fourCCPtr.Set(entry.DataType().Right(KFourCCLength));
- fourCCP16Ptr.Set(entry.DataType().Left(KFourCCLength));
- }
- // Compare FourCC
- TBuf16<4> foundFourCC;
- foundFourCC.Copy(fourCCPtr);
- if(aFourCC.CompareF(foundFourCC) == 0)
- {
- aHwDeviceUid = entry.ImplementationUid();
- break;
- }
- }
- }
- CleanupStack::PopAndDestroy(&impArray);
- REComSession::FinalClose();
- }
+/*
+* 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 "T_CMMFDevSoundData.h"
+
+/*@{*/
+//Constants for HwDevice
+const TInt KHwDeviceDefaultDataLength = 9;
+const TInt KFourCCLength = 4;
+//Supported Input Data Types
+const TInt KFourCCMaxBitDisplacement = 24;
+const TInt K8Bits = 8;
+const TInt KTFourCC = 4;
+/*@}*/
+
+/*@{*/
+//Command literals
+_LIT(KCmdNewL, "NewL");
+_LIT(KCmdNewLLoopL, "NewLLoopL");
+_LIT(KCmdDestructor, "~");
+_LIT(KCmdCapabilities, "Capabilities");
+_LIT(KCmdConfig, "Config");
+_LIT(KCmdMaxGain, "MaxGain");
+_LIT(KCmdMaxVolume, "MaxVolume");
+_LIT(KCmdGetPlayBalanceL, "GetPlayBalanceL");
+_LIT(KCmdGetRecordBalanceL, "GetRecordBalanceL");
+_LIT(KCmdGetSupportedInputDataTypesL, "GetSupportedInputDataTypesL");
+_LIT(KCmdGetSupportedOutputDataTypesL, "GetSupportedOutputDataTypesL");
+_LIT(KCmdSamplesPlayed, "SamplesPlayed");
+_LIT(KCmdSamplesRecorded, "SamplesRecorded");
+_LIT(KCmdVolume, "Volume");
+_LIT(KCmdGain, "Gain");
+_LIT(KCmdFixedSequenceCount, "FixedSequenceCount");
+_LIT(KCmdFixedSequenceName, "FixedSequenceName");
+_LIT(KCmdSetConfigL, "SetConfigL");
+_LIT(KCmdSetDTMFLengths, "SetDTMFLengths");
+_LIT(KCmdSetGain, "SetGain");
+_LIT(KCmdSetPlayBalanceL, "SetPlayBalanceL");
+_LIT(KCmdSetPrioritySettings, "SetPrioritySettings");
+_LIT(KCmdSetRecordBalanceL, "SetRecordBalanceL");
+_LIT(KCmdSetToneRepeats, "SetToneRepeats");
+_LIT(KCmdSetVolume, "SetVolume");
+_LIT(KCmdSetVolumeRamp, "SetVolumeRamp");
+_LIT(KCmdInitializeL, "InitializeL");
+_LIT(KCmdPlayDTMFStringL, "PlayDTMFStringL");
+_LIT(KCmdPlayData, "PlayData");
+_LIT(KCmdPlayDualToneL, "PlayDualToneL");
+_LIT(KCmdPlayInitL, "PlayInitL");
+_LIT(KCmdPlayToneL, "PlayToneL");
+_LIT(KCmdPlayToneSequenceL, "PlayToneSequenceL");
+_LIT(KCmdRecordData, "RecordData");
+_LIT(KCmdRecordInitL, "RecordInitL");
+_LIT(KCmdStop, "Stop");
+_LIT(KCmdErrorConceal, "ErrorConceal");
+_LIT(KCmdSetVolumeLoop, "SetVolumeLoop");
+/*@}*/
+
+/*@{*/
+//Utility literals
+_LIT(KCmdUtilityReplaceFile, "ReplaceFile");
+_LIT(KCmdUtilityOpenFile, "OpenFile");
+_LIT(KCmdUtilityCloseFile, "CloseFile");
+_LIT(KCmdUtilityFileStartPosition, "FileStartPosition");
+/*@}*/
+
+/*@{*/
+//INI Section name literals
+_LIT(KGainValue, "Gain");
+_LIT(KVolumeValue, "Volume");
+_LIT(KLeftPercentage, "LeftPercentage");
+_LIT(KRightPercentage, "RightPercentage");
+_LIT(KSequenceNumber, "SequenceNumber");
+_LIT(KRate, "Rate");
+_LIT(KEncoding, "Encoding");
+_LIT(KChannels, "Channels");
+_LIT(KBufferSize, "BufferSize");
+_LIT(KToneOnLength, "ToneOnLength");
+_LIT(KToneOffLength, "ToneOffLength");
+_LIT(KPause, "Pause");
+_LIT(KPauseLength, "PauseLength");
+_LIT(KPriority, "Priority");
+_LIT(KPreference, "Preference");
+_LIT(KPriorityState, "PriorityState");
+_LIT(KRepeatCount, "RepeatCount");
+_LIT(KRepeatTrailingSilence, "RepeatTrailingSilence");
+_LIT(KRampDuration, "RampDuration");
+_LIT(KMode, "Mode");
+_LIT(KHwDevice, "HwDevice");
+_LIT(KFourCC, "FourCC");
+_LIT(KFilename, "Filename");
+_LIT(KDTMFString, "DTMFString");
+_LIT(KFrequency, "Frequency");
+_LIT(KFrequencyOne, "FrequencyOne");
+_LIT(KFrequencyTwo, "FrequencyTwo");
+_LIT(KDuration, "Duration");
+_LIT(KLoop, "Loop");
+_LIT(KAllowedError, "AllowedError");
+_LIT(KVolumeList, "VolumeList");
+_LIT(KVolumeLoop, "VolumeLoop");
+/*@}*/
+
+/*@{*/
+//Literals for iEnumChannels
+_LIT(KEMMFStereo, "EMMFStereo");
+_LIT(KEMMFMono, "EMMFMono");
+/*@}*/
+
+const CDataWrapperBase::TEnumEntryTable CT_CMMFDevSoundData::iEnumChannels[] =
+ {
+ {KEMMFMono, EMMFMono},
+ {KEMMFStereo, EMMFStereo}
+ };
+
+/*@{*/
+//Literals for iEnumSampleRate
+_LIT(KEMMFSampleRate8000Hz, "EMMFSampleRate8000Hz");
+_LIT(KEMMFSampleRate11025Hz, "EMMFSampleRate11025Hz");
+_LIT(KEMMFSampleRate16000Hz, "EMMFSampleRate16000Hz");
+_LIT(KEMMFSampleRate22050Hz, "EMMFSampleRate22050Hz");
+_LIT(KEMMFSampleRate32000Hz, "EMMFSampleRate32000Hz");
+_LIT(KEMMFSampleRate44100Hz, "EMMFSampleRate44100Hz");
+_LIT(KEMMFSampleRate48000Hz, "EMMFSampleRate48000Hz");
+_LIT(KEMMFSampleRate88200Hz, "EMMFSampleRate88200Hz");
+_LIT(KEMMFSampleRate96000Hz, "EMMFSampleRate96000Hz");
+_LIT(KEMMFSampleRate12000Hz, "EMMFSampleRate12000Hz");
+_LIT(KEMMFSampleRate24000Hz, "EMMFSampleRate24000Hz");
+_LIT(KEMMFSampleRate64000Hz, "EMMFSampleRate64000Hz");
+/*@}*/
+
+const CDataWrapperBase::TEnumEntryTable CT_CMMFDevSoundData::iEnumSampleRate[] =
+ {
+ {KEMMFSampleRate8000Hz, EMMFSampleRate8000Hz},
+ {KEMMFSampleRate11025Hz, EMMFSampleRate11025Hz},
+ {KEMMFSampleRate16000Hz, EMMFSampleRate16000Hz},
+ {KEMMFSampleRate22050Hz, EMMFSampleRate22050Hz},
+ {KEMMFSampleRate32000Hz, EMMFSampleRate32000Hz},
+ {KEMMFSampleRate44100Hz, EMMFSampleRate44100Hz},
+ {KEMMFSampleRate48000Hz, EMMFSampleRate48000Hz},
+ {KEMMFSampleRate88200Hz, EMMFSampleRate88200Hz},
+ {KEMMFSampleRate96000Hz, EMMFSampleRate96000Hz},
+ {KEMMFSampleRate12000Hz, EMMFSampleRate12000Hz},
+ {KEMMFSampleRate24000Hz, EMMFSampleRate24000Hz},
+ {KEMMFSampleRate64000Hz, EMMFSampleRate64000Hz}
+ };
+
+/*@{*/
+//Literal for iEnumMode
+_LIT(KEMMFStateIdle, "EMMFStateIdle");
+_LIT(KEMMFStatePlaying, "EMMFStatePlaying");
+_LIT(KEMMFStateTonePlaying, "EMMFStateTonePlaying");
+_LIT(KEMMFStateRecording, "EMMFStateRecording");
+_LIT(KEMMFStatePlayingRecording, "EMMFStatePlayingRecording");
+_LIT(KEMMFStateConverting, "EMMFStateConverting");
+/*@}*/
+
+const CDataWrapperBase::TEnumEntryTable CT_CMMFDevSoundData::iEnumMode[] =
+ {
+ {KEMMFStateIdle, EMMFStateIdle},
+ {KEMMFStatePlaying, EMMFStatePlaying},
+ {KEMMFStateRecording, EMMFStateRecording},
+ {KEMMFStateTonePlaying, EMMFStateTonePlaying},
+ {KEMMFStatePlayingRecording, EMMFStatePlayingRecording},
+ {KEMMFStateConverting, EMMFStateConverting}
+ };
+
+/*@{*/
+//Literals for iEnumInitializeLType
+_LIT(KEInitializeState, "EInitializeState");
+_LIT(KEInitializeHwDeviceMode, "EInitializeHwDeviceMode");
+_LIT(KEInitializeFourCCMode, "EInitializeFourCCMode");
+/*@}*/
+
+enum TMMFInitializeMode
+ {
+ EInitializeState,
+ EInitializeHwDeviceMode,
+ EInitializeFourCCMode
+ };
+
+const CDataWrapperBase::TEnumEntryTable CT_CMMFDevSoundData::iEnumInitializeLType[] =
+ {
+ {KEInitializeState, EInitializeState},
+ {KEInitializeHwDeviceMode, EInitializeHwDeviceMode},
+ {KEInitializeFourCCMode, EInitializeFourCCMode}
+ };
+
+/**
+ * Two phase constructor
+ *
+ * @leave system wide error
+ */
+CT_CMMFDevSoundData* CT_CMMFDevSoundData::NewL()
+ {
+ CT_CMMFDevSoundData* ret = new (ELeave) CT_CMMFDevSoundData();
+ CleanupStack::PushL(ret);
+ ret->ConstructL();
+ CleanupStack::Pop(ret);
+ return ret;
+ }
+
+/**
+ * Private constructor. First phase construction
+ */
+CT_CMMFDevSoundData::CT_CMMFDevSoundData()
+ :
+ iDevSound(NULL),
+ iPrioritySettings(),
+ iCapabilities(),
+ iVolumeValue(0),
+ iGainValue(0),
+ iLeftPercentage(0),
+ iRightPercentage(0),
+ iFs(),
+ iToneFile(),
+ iAudiofile(),
+ iBuffer(NULL),
+ iLastSample(0),
+ iPaused(EFalse),
+ iErrorConceal(EFalse),
+ iEndFile(EFalse),
+ iToneSequence(),
+ iRecordErrorIndex(0),
+ iPlayErrorIndex(0),
+ iToneErrorIndex(0),
+ iInitializeErrorIndex(0)
+ {
+ }
+
+/**
+ * Second phase construction
+ * @internalComponent
+ * @return N/A
+ * @pre None
+ * @post None
+ * @leave system wide error
+ */
+void CT_CMMFDevSoundData::ConstructL()
+ {
+ iFs.Connect();
+ }
+
+/**
+ * Public destructor
+ */
+CT_CMMFDevSoundData::~CT_CMMFDevSoundData()
+ {
+ iFs.Close();
+ DestroyData();
+ }
+
+/**
+ * Helper Destructor
+ */
+void CT_CMMFDevSoundData::DestroyData()
+ {
+ if(iDevSound)
+ {
+ delete iDevSound;
+ iDevSound = NULL;
+ }
+ }
+
+/**
+ * Return a pointer to the object that the data wraps
+ *
+ * @return pointer to the object that the data wraps
+ */
+TAny* CT_CMMFDevSoundData::GetObject()
+ {
+ return iDevSound;
+ }
+
+/**
+ * Process a command read from the Ini file
+ * @param aCommand - The command to process
+ * @param aSection - The section get from the *.ini file of the project T_Wlan
+ * @param aAsyncErrorIndex - Command index dor async calls to returns errors to
+ * @return TBool - ETrue if the command is process
+ * @leave - system wide error
+ */
+TBool CT_CMMFDevSoundData::DoCommandL(const TTEFFunction& aCommand, const TTEFSectionName& aSection, const TInt aAsyncErrorIndex)
+ {
+ TBool ret = ETrue;
+
+ if (aCommand == KCmdNewL)
+ {
+ DoCmdNewL();
+ }
+ else if(aCommand == KCmdNewLLoopL)
+ {
+ DoCmdNewLLoopL(aSection);
+ }
+ else if (aCommand == KCmdDestructor)
+ {
+ DoCmdDestructor();
+ }
+ else if (aCommand == KCmdUtilityReplaceFile)
+ {
+ DoCmdUtilityReplaceFile(aSection);
+ }
+ else if (aCommand == KCmdUtilityOpenFile)
+ {
+ DoCmdUtilityOpenFile(aSection);
+ }
+ else if (aCommand == KCmdUtilityCloseFile)
+ {
+ DoCmdUtilityCloseFile();
+ }
+ else if (aCommand == KCmdUtilityFileStartPosition)
+ {
+ DoCmdUtilityFileStartPosition();
+ }
+ else if (aCommand == KCmdCapabilities)
+ {
+ DoCmdCapabilities();
+ }
+ else if (aCommand == KCmdConfig)
+ {
+ DoCmdConfig();
+ }
+ else if (aCommand == KCmdMaxGain)
+ {
+ DoCmdMaxGain(aSection);
+ }
+ else if (aCommand == KCmdMaxVolume)
+ {
+ DoCmdMaxVolume(aSection);
+ }
+ else if (aCommand == KCmdGetPlayBalanceL)
+ {
+ DoCmdGetPlayBalanceL(aSection);
+ }
+ else if (aCommand == KCmdGetRecordBalanceL)
+ {
+ DoCmdGetRecordBalanceL(aSection);
+ }
+ else if (aCommand == KCmdGetSupportedInputDataTypesL)
+ {
+ DoCmdGetSupportedInputDataTypesL();
+ }
+ else if (aCommand == KCmdGetSupportedOutputDataTypesL)
+ {
+ DoCmdGetSupportedOutputDataTypesL();
+ }
+ else if (aCommand == KCmdSamplesPlayed)
+ {
+ DoCmdSamplesPlayed();
+ }
+ else if (aCommand == KCmdSamplesRecorded)
+ {
+ DoCmdSamplesRecorded();
+ }
+ else if (aCommand == KCmdVolume)
+ {
+ DoCmdVolume(aSection);
+ }
+ else if (aCommand == KCmdGain)
+ {
+ DoCmdGain(aSection);
+ }
+ else if (aCommand == KCmdFixedSequenceCount)
+ {
+ DoCmdFixedSequenceCount();
+ }
+ else if (aCommand == KCmdFixedSequenceName)
+ {
+ DoCmdFixedSequenceName(aSection);
+ }
+ else if (aCommand == KCmdSetConfigL)
+ {
+ DoCmdSetConfigL(aSection);
+ }
+ else if (aCommand == KCmdSetDTMFLengths)
+ {
+ DoCmdSetDTMFLengths(aSection);
+ }
+ else if (aCommand == KCmdSetGain)
+ {
+ DoCmdSetGain(aSection);
+ }
+ else if (aCommand == KCmdSetPlayBalanceL)
+ {
+ DoCmdSetPlayBalanceL(aSection);
+ }
+ else if (aCommand == KCmdSetPrioritySettings)
+ {
+ DoCmdSetPrioritySettings(aSection);
+ }
+ else if (aCommand == KCmdSetRecordBalanceL)
+ {
+ DoCmdSetRecordBalanceL(aSection);
+ }
+ else if (aCommand == KCmdSetToneRepeats)
+ {
+ DoCmdSetToneRepeats(aSection);
+ }
+ else if (aCommand == KCmdSetVolume)
+ {
+ DoCmdSetVolume(aSection);
+ }
+ else if (aCommand == KCmdSetVolumeLoop)
+ {
+ DoCmdSetVolumeLoop(aSection);
+ }
+ else if (aCommand == KCmdSetVolumeRamp)
+ {
+ DoCmdSetVolumeRamp(aSection);
+ }
+ else if (aCommand == KCmdInitializeL)
+ {
+ DoCmdInitializeL(aSection,aAsyncErrorIndex);
+ }
+ else if (aCommand == KCmdPlayDTMFStringL)
+ {
+ DoCmdPlayDTMFStringL(aSection, aAsyncErrorIndex);
+ }
+ else if (aCommand == KCmdPlayData)
+ {
+ DoCmdPlayData();
+ }
+ else if (aCommand == KCmdPlayDualToneL)
+ {
+ DoCmdPlayDualToneL(aSection, aAsyncErrorIndex);
+ }
+ else if (aCommand == KCmdPlayInitL)
+ {
+ DoCmdPlayInitL(aAsyncErrorIndex);
+ }
+ else if (aCommand == KCmdPlayToneL)
+ {
+ DoCmdPlayToneL(aSection, aAsyncErrorIndex);
+ }
+ else if (aCommand == KCmdPlayToneSequenceL)
+ {
+ DoCmdPlayToneSequenceL(aSection,aAsyncErrorIndex);
+ }
+ else if (aCommand == KCmdRecordData)
+ {
+ DoCmdRecordData();
+ }
+ else if (aCommand == KCmdRecordInitL)
+ {
+ DoCmdRecordInitL(aAsyncErrorIndex);
+ }
+ else if (aCommand == KCmdStop)
+ {
+ DoCmdStop(aSection);
+ }
+ else if(aCommand == KCmdErrorConceal)
+ {
+ DoCmdUtilityErrorConceal();
+ }
+ else
+ {
+ ERR_PRINTF1(_L("Unknown command."));
+ ret=EFalse;
+ }
+ return ret;
+ }
+
+/**
+ * Handles initialization completion event.
+ * CMMFDevSound object calls this function when its InitializeL() function
+ * completes.
+ * @param aError - Error code. KErrNone if successful. Other values are possible
+ * indicating a problem initializing CMMFDevSound object.
+ * @return void
+ */
+
+void CT_CMMFDevSoundData::InitializeComplete(TInt aError)
+ {
+ INFO_PRINTF1(_L("*START*CT_CMMFDevSoundData::InitializeComplete"));
+ if(KErrNone != aError)
+ {
+ ERR_PRINTF2(_L("InitializeComplete callback failed with error %d"), aError);
+ SetAsyncError(iInitializeErrorIndex, aError);
+ iInitializeErrorIndex = 0;
+ }
+ if(Outstanding())
+ {
+ DecOutstanding();
+ }
+ INFO_PRINTF1(_L("*END*CT_CMMFDevSoundData::InitializeComplete"));
+ }
+
+/**
+ * It's needed for playing o converting
+ * @param aBuffer - Buffer into which data should be read. The amount of data that is
+ * needed is specified in CMMFBuffer::RequestSize().
+ */
+void CT_CMMFDevSoundData::BufferToBeFilled(CMMFBuffer* aBuffer)
+ {
+ if (!aBuffer)
+ {
+ ERR_PRINTF1(_L("BufferToBeFilled callback received a NULL CMMFBuffer!"));
+ SetBlockResult(EFail);
+ }
+ else
+ {
+ TBool dataOk = ETrue;
+ iBuffer = aBuffer;
+ iBuffer->SetLastBuffer(EFalse);
+ CMMFDataBuffer* buffer = static_cast <CMMFDataBuffer*> (iBuffer);
+ if (iPaused)
+ {
+ iPaused=EFalse;
+ TInt error = iAudiofile.Read(iLastSample,buffer->Data());
+ if (error != KErrNone)
+ {
+ ERR_PRINTF2(_L("ERROR : iFile.Read() failed with %d"), error);
+ SetBlockResult(EFail);
+ dataOk = EFalse;
+ }
+ }
+ else
+ {
+ TInt error = iAudiofile.Read(buffer->Data());
+ if (error != KErrNone)
+ {
+ ERR_PRINTF2(_L("ERROR : iFile.Read() failed with %d"), error);
+ SetBlockResult(EFail);
+ dataOk =EFalse;
+ }
+ }
+ if(dataOk)
+ {
+ if (buffer->Data().Length() != buffer->RequestSize())
+ {
+ iBuffer->SetLastBuffer(ETrue);
+ }
+ if (iErrorConceal)
+ {
+ iErrorConceal=EFalse;
+ buffer->Data().Zero();
+ INFO_PRINTF1(_L("buffer->Data().Zero()"));
+ }
+ PlayData();
+ TInt pos=0;
+ iLastSample=iAudiofile.Seek(ESeekCurrent ,pos);
+ INFO_PRINTF2(_L("Number of samples played so far: %d"), pos);
+ iLastSample=pos;
+ }
+ }
+ }
+
+/**
+* Handles play completion or cancel event.
+*
+* CMMFDevSound object calls this function when an attempt to play audio sample
+* has completed, successfully or otherwise.
+*
+* @param aError - Error code. The status of playback. KErrUnderflow playing of the
+* audio sample is complete. KErrAccessDenied the sound device is in
+* use by another higher priority client.
+*/
+void CT_CMMFDevSoundData::PlayError(TInt aError)
+ {
+ INFO_PRINTF1(_L("*START*CT_CMMFDevSoundData::PlayError"));
+ if(Outstanding())
+ {
+ DecOutstanding();
+ }
+ if(aError != KErrNone && aError != KErrUnderflow)
+ {
+ ERR_PRINTF2(_L("Playback completed with error %d"), aError);
+ SetAsyncError(iPlayErrorIndex, aError);
+ iPlayErrorIndex = 0;
+ }
+ INFO_PRINTF1(_L("*END*CT_CMMFDevSoundData::PlayError"));
+ }
+
+
+/**
+ * Handles tone play completion event.
+ *
+ *
+ * CMMFDevSound object calls this function when an attempt to play tone has
+ * completed, successfully or otherwise.
+ *
+ * The following are the play tone functions; PlayToneL(), PlayDMTFStringL(),
+ * PlayToneSequenceL(), and PlayFixedSequenceL().
+ *
+ * @param aError - Error code. The status of tone playback. KErrUnderflow playing of
+ * the tone is complete. KErrAccessDenied the sound device is in use by
+ * another higher priority client. KErrCancel playing of the audio
+ * sample is stopped by DevSound client another higher priority client.
+ *
+ */
+
+void CT_CMMFDevSoundData::ToneFinished(TInt aError)
+ {
+ INFO_PRINTF1(_L("*START*CT_CMMFDevSoundData::ToneFinished"));
+ if(Outstanding())
+ {
+ DecOutstanding();
+ }
+ if(aError != KErrNone)
+ {
+ ERR_PRINTF2(_L("Tone finished with error %d"), aError);
+ SetAsyncError(iToneErrorIndex, aError);
+ iToneErrorIndex = 0;
+ }
+ iToneFile.Close();
+ INFO_PRINTF1(_L("*END*CT_CMMFDevSoundData::ToneFinished"));
+ }
+
+/**
+ * Handles CMMFDevSound object's data request event.
+ *
+ * CMMFDevSound object calls this function when the buffer, aBuffer gets filled
+ * while recording or converting. The observer should notify CMMFDevSound
+ * object as quickly as possible after data in the buffer is processed by
+ * calling RecordData(), otherwise the implementation might callback
+ * the function RecordError() on derived class object with error code KErrOverflow.
+ *
+ * @param aBuffer - Buffer containing processed (recorded or converted) data. The amount
+ * of data that is available is specified in CMMFBuffer::RequestSize().
+ */
+
+void CT_CMMFDevSoundData::BufferToBeEmptied(CMMFBuffer* aBuffer)
+ {
+ if (!aBuffer)
+ {
+ INFO_PRINTF1(_L("BufferToBeEmptied callback received a NULL CMMFBuffer"));
+ SetBlockResult(EFail);
+ }
+ else
+ {
+ iBuffer = aBuffer;
+ CMMFDataBuffer* buffer = static_cast <CMMFDataBuffer*> (iBuffer);
+ TInt error = iAudiofile.Write(buffer->Data());
+ if(error == KErrNone)
+ {
+ if (!aBuffer->LastBuffer())
+ {
+ RecordData();
+ }
+ else{
+ Stop();
+ }
+ }
+ else
+ {
+ ERR_PRINTF2(_L("iFile.Write() returned the error %d"), error);
+ SetBlockResult(EFail);
+ }
+ }
+ }
+
+/**
+ * Stops the ongoing operation (Play, Record, TonePlay, Convert).
+ * This function should be synchronous and invoke no callbacks through MDevSoundObserver.
+ */
+void CT_CMMFDevSoundData::Stop()
+ {
+ INFO_PRINTF1(_L("*START*CT_CMMFDevSoundData::Stop()"));
+ iDevSound->Stop();
+ if(Outstanding())
+ {
+ DecOutstanding();
+ }
+ INFO_PRINTF1(_L("*END*CT_CMMFDevSoundData::Stop()"));
+ }
+
+/**
+ * Handles record completion or cancel event.
+ *
+ * CMMFDevSound object calls this function when an attempt to record audio sample
+ * has completed, successfully or otherwise.
+ *
+ * @param aError - Error code. The status of recording. KErrOverflow audio devices
+ * runs out of internal buffer. KErrAccessDenied the sound device is
+ * in use by another higher priority client.
+ *
+ */
+
+void CT_CMMFDevSoundData::RecordError(TInt aError)
+ {
+ INFO_PRINTF1(_L("*START*CT_CMMFDevSoundData::RecordError"));
+ if(aError != KErrNone)
+ {
+ ERR_PRINTF2(_L("Record failed with error %d"), aError);
+ SetAsyncError(iRecordErrorIndex , aError);
+ iRecordErrorIndex = 0;
+ }
+ INFO_PRINTF1(_L("*END*CT_CMMFDevSoundData::RecordError"));
+ }
+
+
+/**
+ * Handles conversion completion or cancel event.
+ *
+ * CMMFDevSound object calls this function when an attempt to convert data from
+ * source format to destination format has completed, successfully or otherwise.
+ *
+ * @param aError - Error code. KErrCancel conversion operation is cancelled. KErrNone
+ * conversion is complete. Other values are possible indicating a
+ * problem converting data.
+ */
+
+void CT_CMMFDevSoundData::ConvertError(TInt aError)
+ {
+ INFO_PRINTF1(_L("*START*CT_CMMFDevSoundData::ConvertError"));
+ ERR_PRINTF1(_L("Invalid Callback call"));
+ if (aError == KErrNone)
+ {
+ INFO_PRINTF1(_L("Data conversion completed successfully."));
+ }
+ if (aError == KErrCancel)
+ {
+ INFO_PRINTF1(_L("Data conversion operation was cancelled."));
+ }
+ INFO_PRINTF1(_L("*END*CT_CMMFDevSoundData::ConvertError"));
+ }
+
+/**
+ * Handles device event.
+ *
+ * CMMFDevSound object calls this function when a message is received from the
+ * audio hardware device.
+ *
+ * @param aMessageType - Defines the type of message. Used to determine how to
+ * interpret the contents of aMsg.
+ * @param aMsg - Message that is packed in the Descriptor format.
+ */
+
+
+void CT_CMMFDevSoundData::DeviceMessage(TUid aMessageType, const TDesC8& aMsg)
+ {
+ INFO_PRINTF1(_L("*START*CT_CMMFDevSoundData::DeviceMessage"));
+ INFO_PRINTF2(_L("Message type: %d"), aMessageType.iUid);
+ INFO_PRINTF2(_L("Message type: %S"), &aMsg);
+ INFO_PRINTF1(_L("*END*CT_CMMFDevSoundData::DeviceMessage"));
+ }
+
+
+/**
+ * Create a new or Replace the existing file
+ *
+ */
+void CT_CMMFDevSoundData::DoCmdUtilityReplaceFile(const TTEFSectionName& aSection)
+ {
+ INFO_PRINTF1(_L("*START* CT_CMMFDevSoundData::DoCmdUtilityReplaceFile()"));
+ TPtrC fileName;
+ TBool dataOk = ETrue;
+ if (!GetStringFromConfig(aSection, KFilename, fileName))
+ {
+ ERR_PRINTF2(_L("Error in getting parameter %S from INI file"), &KFilename);
+ SetBlockResult(EFail);
+ dataOk =EFalse;
+ }
+ if(dataOk)
+ {
+ TInt error = iAudiofile.Replace(iFs, fileName, EFileRead);
+ if (error != KErrNone)
+ {
+ ERR_PRINTF2(_L("Could not open input file. Error = %d"), error);
+ SetError(error);
+ }
+ }
+
+ INFO_PRINTF1(_L("*END* CT_CMMFDevSoundData::DoCmdUtilityReplaceFile()"));
+ }
+
+/**
+ * Open a file
+ */
+void CT_CMMFDevSoundData::DoCmdUtilityOpenFile(const TTEFSectionName& aSection)
+ {
+
+ INFO_PRINTF1(_L("*START* CT_CMMFDevSoundData::DoCmdUtilityOpenFile()"));
+ TPtrC fileName;
+ TBool dataOk = ETrue;
+ if (!GetStringFromConfig(aSection, KFilename, fileName))
+ {
+ ERR_PRINTF2(_L("Error in getting parameter %S from INI file"), &KFilename);
+ SetBlockResult(EFail);
+ dataOk =EFalse;
+ }
+ if(dataOk)
+ {
+ TInt error = iAudiofile.Open(iFs, fileName, EFileRead);
+ if (error != KErrNone)
+ {
+ ERR_PRINTF2(_L("Could not open input file. Error = %d"), error);
+ iFs.Close();
+ SetError(error);
+ }
+ }
+ INFO_PRINTF1(_L("*END* CT_CMMFDevSoundData::DoCmdUtilityOpenFile()"));
+ }
+
+/**
+ * Close the opened file
+ */
+void CT_CMMFDevSoundData::DoCmdUtilityCloseFile()
+ {
+ INFO_PRINTF1(_L("*START* CT_CMMFDevSoundData::DoCmdUtilityCloseFile()"));
+ iAudiofile.Close();
+ INFO_PRINTF1(_L("*END* CT_CMMFDevSoundData::DoCmdUtilityCloseFile()"));
+ }
+
+/**
+ * Place the the pointer file at the begining
+ *
+ */
+void CT_CMMFDevSoundData::DoCmdUtilityFileStartPosition()
+ {
+ INFO_PRINTF1(_L("*START* CT_CMMFDevSoundData::DoCmdUtilityFileStartPosition()"));
+ TInt filePosition = 0;
+ TBool dataOk = ETrue;
+ TInt error = iAudiofile.Seek(ESeekStart, filePosition);
+ if (error != KErrNone)
+ {
+ ERR_PRINTF2(_L("Could not set file to the start position. Error = %d"), error);
+ SetError(error);
+ dataOk =EFalse;
+ }
+ if(dataOk)
+ {
+ INFO_PRINTF2(_L("File Position: %d"), filePosition);
+ }
+ INFO_PRINTF1(_L("*END* CT_CMMFDevSoundData::DoCmdUtilityFileStartPosition()"));
+ }
+
+
+/**
+ * Creates "n" instance of CMMFDevSound
+ * @param aSection - Section to read from the ini file
+ * @return void
+ */
+void CT_CMMFDevSoundData::DoCmdNewLLoopL(const TTEFSectionName&aSection)
+ {
+ INFO_PRINTF1(_L("*START*CT_CMMFDevSoundData::DoCmdNewLLoopL"));
+ CMMFDevSound* devSound = NULL;
+ TBool dataOk = ETrue;
+ TInt loop= 0;
+ if (!GetIntFromConfig(aSection, KLoop, loop))
+ {
+ ERR_PRINTF2(_L("Error in getting parameter %S from INI file"), &KLoop);
+ SetBlockResult(EFail);
+ dataOk = EFalse;
+ }
+ TInt allowedError=0;
+ if ( !GetIntFromConfig(aSection, KAllowedError, allowedError) )
+ {
+ ERR_PRINTF2(_L("Error in getting parameter %S from INI file"), &KAllowedError);
+ SetBlockResult(EFail);
+ dataOk = EFalse;
+ }
+ if(dataOk)
+ {
+ for(TInt i=0; i<loop; i++)
+ {
+ TRAPD(error,devSound = CMMFDevSound::NewL());
+ if(error == KErrNone)
+ {
+ INFO_PRINTF2(_L("Instance %d of DevSound was created"),i);
+ CleanupStack::PushL(devSound);
+ iObjectsDevSound.AppendL(devSound);
+ CleanupStack::Pop(devSound);
+ }
+ else if(error == allowedError)
+ {
+ INFO_PRINTF2(_L(" Allowing Error: %d"), error);
+ ERR_PRINTF2(_L(" Could not create CMMFDevSound due to error: %d"), error);
+ i = loop;
+ }
+ else if((error != KErrNone) && (error!=allowedError))
+ {
+ ERR_PRINTF2(_L("> Could not create CMMFDevSound: %d"), error);
+ SetError(error);
+ }
+ }
+ iObjectsDevSound.ResetAndDestroy();
+ INFO_PRINTF2(_L("%d DevSound instances were deleted"),loop);
+ }
+ INFO_PRINTF1(_L("*END*CT_CMMFDevSoundData::DoCmdNewLLoopL"));
+ }
+
+
+/**
+ * Create an instance of CMMFDevSound
+ */
+void CT_CMMFDevSoundData::DoCmdNewL()
+ {
+ INFO_PRINTF1(_L("*START*CT_CMMFDevSoundData::DoCmdNewL"));
+ DestroyData();
+ TRAPD(error,iDevSound = CMMFDevSound::NewL());
+ if(error!= KErrNone)
+ {
+ ERR_PRINTF2(_L("> Could not create CMMFDevSound: %d"), error);
+ SetError(error);
+ }
+ else
+ {
+ iPaused= EFalse;
+ iErrorConceal = EFalse;
+ }
+ INFO_PRINTF1(_L("*END*CT_CMMFDevSoundData::DoCmdNewL"));
+ }
+/**
+ * Destroy an instance of CMMFDevSound
+ */
+
+void CT_CMMFDevSoundData::DoCmdDestructor()
+ {
+ INFO_PRINTF1(_L("*START*CT_CMMFDevSoundData::DoCmdDestroyData"));
+ DestroyData();
+ INFO_PRINTF1(_L("*END*CT_CMMFDevSoundData::DoCmdDestroyData"));
+ }
+
+/**
+ * Show the supported Audio settings ie. encoding, sample rates, mono/stereo operation, buffer
+ * size, etc.
+ * @param none
+ * @return none
+ */
+void CT_CMMFDevSoundData::DoCmdCapabilities()
+ {
+ INFO_PRINTF1(_L("*START*CT_CMMFDevSoundData::DoCmdCapabilities"));
+ iCapabilities = iDevSound->Capabilities();
+ INFO_PRINTF5(_L("Supported Audio settings: buffsize=%d, channels=0x%x, encoding=0x%x and rate=0x%x"),
+ iCapabilities.iBufferSize,
+ iCapabilities.iChannels,
+ iCapabilities.iEncoding,
+ iCapabilities.iRate);
+ INFO_PRINTF1(_L("*END*CT_CMMFDevSoundData::DoCmdCapabilities"));
+ }
+
+
+/**
+ * Shows the current device configuration.
+ * @params none
+ * @return none
+ */
+void CT_CMMFDevSoundData::DoCmdConfig()
+ {
+ INFO_PRINTF1(_L("*START*CT_CMMFDevSoundData::DoCmdConfig"));
+ TMMFCapabilities currentConfiguration = iDevSound->Config();
+ INFO_PRINTF5(_L("Current device configuration: buffsize=%d, channels=0x%x, encoding=0x%x and rate=0x%x"),
+ currentConfiguration.iBufferSize,
+ currentConfiguration.iChannels,
+ currentConfiguration.iEncoding,
+ currentConfiguration.iRate);
+ INFO_PRINTF1(_L("*END*CT_CMMFDevSoundData::DoCmdConfig"));
+ }
+
+
+/**
+ * Shows an integer representing the maximum gain the device supports.
+ * This is the maximum value which can be passed to CMMFDevSound::SetGain.
+ * @param aSection - The section to read the params from the ini file
+ * @return none
+ */
+
+void CT_CMMFDevSoundData::DoCmdMaxGain(const TTEFSectionName& aSection)
+ {
+ INFO_PRINTF1(_L("*START*CT_CMMFDevSoundData::DoCmdMaxGain"));
+ TBool dataOk = ETrue;
+ TInt expectedGainValue=0;
+ if (!GetIntFromConfig(aSection, KGainValue, expectedGainValue))
+ {
+ ERR_PRINTF2(_L("Error in getting parameter %S from INI file"), &KGainValue);
+ SetBlockResult(EFail);
+ dataOk = EFalse;
+ }
+ if(dataOk)
+ {
+ iGainValue = iDevSound->MaxGain();
+ INFO_PRINTF2(_L("Retrieved maximum gain value: %d"), iGainValue);
+ if (expectedGainValue != iGainValue)
+ {
+ ERR_PRINTF3(_L("Expected gain value %d is different from retrieved gain value %d"), expectedGainValue, iGainValue);
+ SetBlockResult(EFail);
+ }
+ }
+ INFO_PRINTF1(_L("*END*CT_CMMFDevSoundData::DoCmdMaxGain"));
+ }
+
+/**
+ * Shows an integer representing the maximum volume device supports.
+ * This is the maximum value which can be passed to CMMFDevSound::SetVolume.
+ * @param aSection - Section to read params from the ini file
+ * @return none
+ */
+
+void CT_CMMFDevSoundData::DoCmdMaxVolume(const TTEFSectionName& aSection)
+ {
+ INFO_PRINTF1(_L("*START*CT_CMMFDevSoundData::DoCmdMaxVolume"));
+ TBool dataOk = ETrue;
+ TInt expectedVolumeValue=0;
+ if(!GetIntFromConfig(aSection, KVolumeValue, expectedVolumeValue))
+ {
+ ERR_PRINTF2(_L("Error in getting parameter %S from INI file"), &KVolumeValue);
+ SetBlockResult(EFail);
+ dataOk = EFalse;
+ }
+ if(dataOk)
+ {
+ iVolumeValue = iDevSound->MaxVolume();
+ INFO_PRINTF2(_L("Retrieved maximum volume value: %d"), iVolumeValue);
+ if(expectedVolumeValue != iVolumeValue)
+ {
+ ERR_PRINTF3(_L("Expected volume value %d is different from retrieved volume value %d"), expectedVolumeValue, iVolumeValue);
+ SetBlockResult(EFail);
+ }
+ }
+ INFO_PRINTF1(_L("*END*CT_CMMFDevSoundData::DoCmdMaxVolume"));
+ }
+
+/**
+ * Shows the speaker balance set for playing.
+ * @param aSection - Section to read params from the ini file
+ * @return none
+ */
+
+void CT_CMMFDevSoundData::DoCmdGetPlayBalanceL(const TTEFSectionName& aSection)
+ {
+ INFO_PRINTF1(_L("*START*CT_CMMFDevSoundData::DoCmdGetPlayBalanceL"));
+ TBool dataOk = ETrue;
+ TInt expectedLeftPercentage=0;
+ if (!GetIntFromConfig(aSection, KLeftPercentage, expectedLeftPercentage))
+ {
+ ERR_PRINTF2(_L("Error in getting parameter %S from INI file"), &KLeftPercentage);
+ SetBlockResult(EFail);
+ dataOk = EFalse;
+ }
+ TInt expectedRightPercentage=0;
+ if (!GetIntFromConfig(aSection, KRightPercentage, expectedRightPercentage))
+ {
+ ERR_PRINTF2(_L("Error in getting parameter %S from INI file"), &KRightPercentage);
+ SetBlockResult(EFail);
+ dataOk = EFalse;
+ }
+ if(dataOk)
+ {
+ TRAPD(error, iDevSound->GetPlayBalanceL(iLeftPercentage, iRightPercentage));
+ if (error != KErrNone)
+ {
+ ERR_PRINTF2(_L("GetPlayBalanceL left with error %d"), error);
+ SetError(error);
+ }
+ else
+ {
+ INFO_PRINTF3(_L("> Retrieved play balance values are left: %d, right:%d"), iLeftPercentage, iRightPercentage);
+ if (expectedLeftPercentage !=iLeftPercentage)
+ {
+ ERR_PRINTF3(_L("Expected left percentage value %d is different from retrieved value %d"), expectedLeftPercentage, iLeftPercentage);
+ SetBlockResult(EFail);
+ }
+ if (expectedRightPercentage !=iRightPercentage)
+ {
+ ERR_PRINTF3(_L("Expected right percentage value %d is different from retrieved value %d"), expectedRightPercentage, iRightPercentage);
+ SetBlockResult(EFail);
+ }
+ }
+ }
+
+ INFO_PRINTF1(_L("*END*CT_CMMFDevSoundData::DoCmdGetPlayBalanceL"));
+ }
+
+
+/**
+ * Shows the microphone gain balance set for recording.
+ * @param aSection - Section to read params from the ini file
+ * @return none
+ */
+void CT_CMMFDevSoundData::DoCmdGetRecordBalanceL(const TTEFSectionName& aSection)
+ {
+ INFO_PRINTF1(_L("*START*CT_CMMFDevSoundData::DoCmdGetRecordBalanceL"));
+ TBool dataOk = ETrue;
+ TInt expectedLeftPercentage=0;
+ if(!GetIntFromConfig(aSection, KLeftPercentage, expectedLeftPercentage))
+ {
+ ERR_PRINTF2(_L("Error in getting parameter %S from INI file"), &KLeftPercentage);
+ SetBlockResult(EFail);
+ dataOk = EFalse;
+ }
+ TInt expectedRightPercentage=0;
+ if(!GetIntFromConfig(aSection, KRightPercentage, expectedRightPercentage))
+ {
+ ERR_PRINTF2(_L("Error in getting parameter %S from INI file"), &KRightPercentage);
+ SetBlockResult(EFail);
+ dataOk = EFalse;
+ }
+ if(dataOk)
+ {
+ TRAPD(error, iDevSound->GetRecordBalanceL(iLeftPercentage, iRightPercentage));
+ if (error != KErrNone)
+ {
+ ERR_PRINTF2(_L("GetRecordBalanceL left with error %d"), error);
+ SetError(error);
+ }
+ else
+ {
+ INFO_PRINTF3(_L("> Retrieved record balance values are left: %d, right:%d"), iLeftPercentage, iRightPercentage);
+ if(expectedLeftPercentage !=iLeftPercentage)
+ {
+ ERR_PRINTF3(_L("Expected left percentage value %d is different from retrieved value %d"), expectedLeftPercentage, iLeftPercentage);
+ SetBlockResult(EFail);
+ }
+ if(expectedRightPercentage !=iRightPercentage)
+ {
+ ERR_PRINTF3(_L("Expected right ercentage value %d is different from retrieved value %d"), expectedRightPercentage, iRightPercentage);
+ SetBlockResult(EFail);
+ }
+ }
+
+ }
+ INFO_PRINTF1(_L("*END*CT_CMMFDevSoundData::DoCmdGetRecordBalanceL"));
+ }
+
+/**
+ * Shows a list of the supported input datatypes that can be sent to DevSound for playing audio.
+ * The datatypes returned are those that the DevSound supports given the priority settings passed
+ * in aPrioritySettings.
+ * @params none
+ * @return none
+ */
+void CT_CMMFDevSoundData::DoCmdGetSupportedInputDataTypesL()
+ {
+ TUid outputUid= {0x0};
+ INFO_PRINTF1(_L("*START*CT_CMMFDevSoundData::DoCmdGetSupportedInputDataTypesL"));
+ RArray< TFourCC > supportedDataTypes;
+ TRAPD(error, iDevSound->GetSupportedInputDataTypesL(supportedDataTypes, iPrioritySettings));
+ if (error != KErrNone)
+ {
+ ERR_PRINTF2(_L("GetSupportedInputDataTypesL left with error %d"), error);
+ SetError(error);
+ }
+ else
+ {
+ INFO_PRINTF1(_L("List of the supported input datatypes that can be sent to DevSound for playing audio."));
+ for (TInt i=0; i<supportedDataTypes.Count(); i++)
+ {
+ TFourCC fourCC = supportedDataTypes[i];
+ TBuf<4> name;
+ for(TInt j=0; j<= KFourCCMaxBitDisplacement; j+=K8Bits)
+ {
+ name.Append((TUint8)(fourCC.FourCC() >> j));
+ }
+ INFO_PRINTF3(_L("Supported Input Data types: 0x%x %S "), fourCC.FourCC(), &name);
+ UtilityFourCCToHwDeviceUidL(name,EDecoder, outputUid);
+ if(outputUid.iUid != 0)
+ {
+ INFO_PRINTF3(_L("\nHwDevice Uid=0x%08x for %S"),outputUid.iUid,&name);
+ }
+ else
+ {
+ INFO_PRINTF1(_L("Not Found"));
+ }
+ }
+ supportedDataTypes.Reset();
+ }
+ INFO_PRINTF1(_L("*END*CT_CMMFDevSoundData::DoCmdGetSupportedInputDataTypesL"));
+ }
+
+/**
+ * Shows a list of the supported output dataypes that can be received from DevSound for
+ * recording audio. The datatypes returned are those that the DevSound supports given the priority
+ * settings passed in aPrioritySettings.
+ * @param none
+ * @return none
+ */
+void CT_CMMFDevSoundData::DoCmdGetSupportedOutputDataTypesL()
+ {
+ TUid outputUid= {0x0};
+ INFO_PRINTF1(_L("*START*CT_CMMFDevSoundData::DoCmdGetSupportedOutputDataTypesL"));
+ RArray< TFourCC > supportedDataTypes;
+ TRAPD(error, iDevSound->GetSupportedOutputDataTypesL(supportedDataTypes, iPrioritySettings));
+ if (error != KErrNone)
+ {
+ ERR_PRINTF2(_L("GetSupportedOutputDataTypesL left with error %d"), error);
+ SetError(error);
+ }
+ else
+ {
+ INFO_PRINTF1(_L("List of the supported output dataypes that can be received from DevSound for recording audio."));
+ for (TInt i=0; i<supportedDataTypes.Count(); i++)
+ {
+ TFourCC fourCC = supportedDataTypes[i];
+ TBuf<4> name;
+ for(TInt j=0; j<=KFourCCMaxBitDisplacement; j+=K8Bits)
+ {
+ name.Append((TUint8)(fourCC.FourCC() >> j));
+ }
+ INFO_PRINTF3(_L("Supported Output Data types: 0x%x %S "), fourCC.FourCC(), &name);
+ UtilityFourCCToHwDeviceUidL(name, EEncoder, outputUid);
+ if(outputUid.iUid != 0)
+ {
+ INFO_PRINTF3(_L("\nHwDevice Uid=0x%08x for %S"),outputUid.iUid,&name);
+ }
+ else
+ {
+ INFO_PRINTF1(_L("Not Found"));
+ }
+ }
+ supportedDataTypes.Reset();
+ }
+ INFO_PRINTF1(_L("*END*CT_CMMFDevSoundData::DoCmdGetSupportedOutputDataTypesL"));
+ }
+
+/**
+ * Shows the number of samples played
+ * @param none
+ * @return none
+ */
+void CT_CMMFDevSoundData::DoCmdSamplesPlayed()
+ {
+ INFO_PRINTF1(_L("*START*CT_CMMFDevSoundData::DoCmdSamplesPlayed"));
+ INFO_PRINTF2(_L("Number of samples played so far: %d"),iDevSound->SamplesPlayed());
+ INFO_PRINTF1(_L("*END*CT_CMMFDevSoundData::DoCmdSamplesPlayed"));
+ }
+
+/**
+ * Shows the number of samples recorded
+ * @param none
+ * @return none
+ */
+void CT_CMMFDevSoundData::DoCmdSamplesRecorded()
+ {
+ INFO_PRINTF1(_L("*START*CT_CMMFDevSoundData::DoCmdSamplesRecorded"));
+ INFO_PRINTF2(_L("Number of samples recorded so far: %d"), iDevSound->SamplesRecorded());
+ INFO_PRINTF1(_L("*END*CT_CMMFDevSoundData::DoCmdSamplesRecorded"));
+ }
+
+/**
+ * Shows an integer representing the current volume.
+ * @param aSection - Section to read param from the ini file
+ * @return none
+ */
+void CT_CMMFDevSoundData::DoCmdVolume(const TTEFSectionName& aSection)
+ {
+ INFO_PRINTF1(_L("*START*CT_CMMFDevSoundData::DoCmdVolume"));
+ TBool dataOk = ETrue;
+ TInt expectedVolumeValue=0;
+ if(!GetIntFromConfig(aSection, KVolumeValue, expectedVolumeValue))
+ {
+ ERR_PRINTF2(_L("Error in getting parameter %S from INI file"), &KVolumeValue);
+ SetBlockResult(EFail);
+ dataOk = EFalse;
+ }
+ if(dataOk)
+ {
+ iVolumeValue = iDevSound->Volume();
+ INFO_PRINTF2(_L("Retrieved volume value: %d"), iVolumeValue);
+ if(expectedVolumeValue != iVolumeValue)
+ {
+ ERR_PRINTF3(_L("Expected volume value %d is different from retrieved volume value %d"), expectedVolumeValue, iVolumeValue);
+ SetBlockResult(EFail);
+ }
+ }
+ INFO_PRINTF1(_L("*END*CT_CMMFDevSoundData::DoCmdVolume"));
+ }
+
+/**
+ * Shows an integer representing the current gain.
+ * @param aSection - Section to read param from the ini file
+ * @return none
+ */
+void CT_CMMFDevSoundData::DoCmdGain(const TTEFSectionName& aSection)
+ {
+ INFO_PRINTF1(_L("*START*CT_CMMFDevSoundData::DoCmdGain"));
+ TBool dataOk = ETrue;
+ TInt expectedGainValue=0;
+ if(!GetIntFromConfig(aSection, KGainValue, expectedGainValue))
+ {
+ ERR_PRINTF2(_L("Error in getting parameter %S from INI file"), &KGainValue);
+ SetBlockResult(EFail);
+ dataOk = EFalse;
+ }
+ if(dataOk)
+ {
+ iGainValue = iDevSound->Gain();
+ INFO_PRINTF2(_L("Retrieved gain value: %d"), iGainValue);
+ if(expectedGainValue != iGainValue)
+ {
+ ERR_PRINTF3(_L("Expected gain value %d is different from retrieved gain value %d"), expectedGainValue, iGainValue);
+ SetBlockResult(EFail);
+ }
+ }
+ INFO_PRINTF1(_L("*END*CT_CMMFDevSoundData::DoCmdGain"));
+ }
+
+/**
+ * Shows the number of available pre-defined tone sequences
+ * @param none
+ * @return none
+ */
+void CT_CMMFDevSoundData::DoCmdFixedSequenceCount()
+ {
+ INFO_PRINTF1(_L("*START*CT_CMMFDevSoundData::DoCmdFixedSequenceCount"));
+ INFO_PRINTF2(_L("Number of available pre-defined tone sequences: %d"), iDevSound->FixedSequenceCount());
+ INFO_PRINTF1(_L("*END*CT_CMMFDevSoundData::DoCmdFixedSequenceCount"));
+ }
+
+/**
+ * Shows the name assigned to a specific pre-defined tone sequence.
+ * This is the number of the fixed sequence supported by DevSound by default.
+ * @param aSection - Section to read params from the ini file
+ * @return none
+ */
+void CT_CMMFDevSoundData::DoCmdFixedSequenceName(const TTEFSectionName& aSection)
+ {
+ INFO_PRINTF1(_L("*START*CT_CMMFDevSoundData::DoCmdFixedSequenceName"));
+ TBool dataOk =ETrue;
+ TInt sequenceNumber=0;
+ if(!GetIntFromConfig(aSection, KSequenceNumber, sequenceNumber))
+ {
+ ERR_PRINTF2(_L("Error in getting parameter %S from INI file"), &KSequenceNumber);
+ SetBlockResult(EFail);
+ dataOk =EFalse;
+ }
+ if(dataOk)
+ {
+ INFO_PRINTF2(_L("Name assigned to a specific pre-defined tone sequence returned: %S"),
+ &iDevSound->FixedSequenceName(sequenceNumber));
+ }
+ INFO_PRINTF1(_L("*END*CT_CMMFDevSoundData::DoCmdFixedSequenceName"));
+ }
+
+
+/**
+ * Configure CMMFDevSound object with the settings in aConfig.
+ * Use this to set sampling rate, encoding and mono/stereo.
+ * @param aSection - Section to read params from the ini file
+ * @return none
+ */
+void CT_CMMFDevSoundData::DoCmdSetConfigL(const TTEFSectionName& aSection)
+ {
+ INFO_PRINTF1(_L("*START*CT_CMMFDevSoundData::DoCmdSetConfigL"));
+
+ TInt rate=0;
+ INFO_PRINTF1(_L("To use default values run Capabilities before SetConfigL"));
+ if (!GetEnumFromConfig(aSection, KRate, iEnumSampleRate, rate))
+ {
+ INFO_PRINTF2(_L("Rate value was not overwritten, using default value %d."), iCapabilities.iRate);
+ }
+ else
+ {
+ iCapabilities.iRate = rate;
+ }
+
+ TInt encoding=0;
+ if (!GetIntFromConfig(aSection, KEncoding, encoding))
+ {
+ INFO_PRINTF2(_L("Encoding value was not overwritten, using default value %d."), iCapabilities.iEncoding);
+ }
+ else
+ {
+ iCapabilities.iEncoding = encoding;
+ }
+
+ TInt channels=0;
+ if (!GetEnumFromConfig(aSection, KChannels, iEnumChannels, channels))
+ {
+ INFO_PRINTF2(_L("Channels value was not overwritten, using default value %d ."), iCapabilities.iChannels);
+ }
+ else
+ {
+ iCapabilities.iChannels = channels;
+ }
+
+ TInt bufferSize=0;
+ if (!GetIntFromConfig(aSection, KBufferSize, bufferSize))
+ {
+ INFO_PRINTF2(_L("BufferSize value was not overwritten, using default value %d"), iCapabilities.iBufferSize);
+ }
+ else
+ {
+ iCapabilities.iBufferSize = bufferSize;
+ }
+ TRAPD(error,iDevSound->SetConfigL(iCapabilities))
+ if(error != KErrNone)
+ {
+ ERR_PRINTF2(_L("SetConfigL left with error %d"), error);
+ SetError(error);
+ }
+ INFO_PRINTF1(_L("*END*CT_CMMFDevSoundData::DoCmdSetConfigL"));
+ }
+
+
+/**
+ * Defines the duration of tone on, tone off and tone pause to be used during the
+ * DTMF tone playback operation.
+ * Supported only during tone playing.
+ * @param aSection - Section to read param from the ini file
+ * @return none
+ */
+void CT_CMMFDevSoundData::DoCmdSetDTMFLengths(const TTEFSectionName& aSection)
+ {
+ INFO_PRINTF1(_L("*START*CT_CMMFDevSoundData::DoCmdSetDTMFLengths"));
+ TInt time=0;
+ TBool dataOk = ETrue;
+ if (!GetIntFromConfig(aSection, KToneOnLength, time))
+ {
+ ERR_PRINTF2(_L("Error in getting parameter %S from INI file"), &KToneOnLength);
+ SetBlockResult(EFail);
+ dataOk = EFalse;
+ }
+ TTimeIntervalMicroSeconds32 toneOnLength(time);
+
+ if (!GetIntFromConfig(aSection, KToneOffLength, time))
+ {
+ ERR_PRINTF2(_L("Error in getting parameter %S from INI file"), &KToneOffLength);
+ SetBlockResult(EFail);
+ dataOk = EFalse;
+ }
+ TTimeIntervalMicroSeconds32 toneOffLength(time);
+
+ if (!GetIntFromConfig(aSection, KPauseLength, time))
+ {
+ ERR_PRINTF2(_L("Error in getting parameter %S from INI file"), &KPauseLength);
+ SetBlockResult(EFail);
+ dataOk = EFalse;
+ }
+ TTimeIntervalMicroSeconds32 pauseLength(time);
+ if(dataOk)
+ {
+ iDevSound->SetDTMFLengths(toneOnLength, toneOffLength, pauseLength);
+ }
+ INFO_PRINTF1(_L("*END*CT_CMMFDevSoundData::DoCmdSetDTMFLengths"));
+ }
+
+
+/**
+ * Changes the current recording gain to a specified value.
+ * The gain can be changed before or during recording and is effective
+ * immediately.
+ * @params aSection - Section to read param from the ini file
+ */
+void CT_CMMFDevSoundData::DoCmdSetGain(const TTEFSectionName& aSection)
+ {
+ INFO_PRINTF1(_L("*START*CT_CMMFDevSoundData::DoCmdSetGain"));
+ TInt gainValue = iGainValue;
+ if(!GetIntFromConfig(aSection, KGainValue, gainValue))
+ {
+ INFO_PRINTF1(_L("The Gain value was not found in the ini file, using default value"));
+ }
+ INFO_PRINTF2(_L("Setting gain value to %d"), gainValue);
+ iDevSound->SetGain(gainValue);
+ INFO_PRINTF1(_L("*END*CT_CMMFDevSoundData::DoCmdSetGain"));
+ }
+
+/**
+ * Sets the speaker balance for playing.
+ * The speaker balance can be changed before or during playback and is
+ * effective immediately.
+ * @param aSection - The section to read params from the ini file
+ * @return none
+ */
+void CT_CMMFDevSoundData::DoCmdSetPlayBalanceL(const TTEFSectionName& aSection)
+ {
+ INFO_PRINTF1(_L("*START*CT_CMMFDevSoundData::DoCmdSetPlayBalanceL"));
+ TInt leftPercentage = iLeftPercentage;
+ if(!GetIntFromConfig(aSection, KLeftPercentage, leftPercentage))
+ {
+ INFO_PRINTF1(_L("The Left percentage was not found in the ini file, using default value"));
+ }
+ TInt rightPercentage = iRightPercentage;
+ if(!GetIntFromConfig(aSection, KRightPercentage, rightPercentage))
+ {
+ INFO_PRINTF1(_L("The Right percentage was not found in the ini file, using default value"));
+ }
+ INFO_PRINTF3(_L("Setting play balance to left: %d, right: %d values"), leftPercentage, rightPercentage);
+ TRAPD(error, iDevSound->SetPlayBalanceL(leftPercentage, rightPercentage));
+ if(error != KErrNone)
+ {
+ ERR_PRINTF2(_L("SetPlayBalanceL left with error %d"), error);
+ SetError(error);
+ }
+ INFO_PRINTF1(_L("*END*CT_CMMFDevSoundData::DoCmdSetPlayBalanceL"));
+ }
+
+/**
+ * Defines the priority settings that should be used for this instance.
+ * @param aSection - Section to read params from the ini file
+ * @return none
+ */
+void CT_CMMFDevSoundData::DoCmdSetPrioritySettings(const TTEFSectionName& aSection)
+ {
+ INFO_PRINTF1(_L("*START*CT_CMMFDevSoundData::DoCmdSetPrioritySettings"));
+ TBool dataOk = ETrue;
+ if(!GetIntFromConfig(aSection, KPriority, iPrioritySettings.iPriority))
+ {
+ ERR_PRINTF2(_L("Error in getting parameter %S from INI file"), &KPriority);
+ SetBlockResult(EFail);
+ dataOk = EFalse;
+ }
+ TInt preference=0;
+ if (!GetHexFromConfig(aSection, KPreference, preference))
+ {
+ ERR_PRINTF2(_L("%S parameter was not found in INI file"), &KPreference);
+ SetBlockResult(EFail);
+ dataOk = EFalse;
+ }
+ iPrioritySettings.iPref = (TMdaPriorityPreference)preference;
+ TInt state=0;
+ if (!GetEnumFromConfig(aSection, KPriorityState, iEnumMode, state))
+ {
+ ERR_PRINTF2(_L("Error in getting parameter %S from INI file"), &KPriorityState);
+ SetBlockResult(EFail);
+ dataOk = EFalse;
+ }
+ iPrioritySettings.iState = (TMMFState)state;
+ if(dataOk)
+ {
+ iDevSound->SetPrioritySettings(iPrioritySettings);
+ }
+ INFO_PRINTF1(_L("*END*CT_CMMFDevSoundData::DoCmdSetPrioritySettings"));
+ }
+
+/**
+ * Sets the microphone gain balance for recording.
+ * The microphone gain balance can be changed before or during recording and
+ * is effective immediately.
+ * @param aSection - Section to read params from the ini file
+ * @return none
+ */
+void CT_CMMFDevSoundData::DoCmdSetRecordBalanceL(const TTEFSectionName& aSection)
+ {
+ INFO_PRINTF1(_L("*START*CT_CMMFDevSoundData::DoCmdSetRecordBalanceL"));
+ TInt leftPercentage = iLeftPercentage;
+ if (!GetIntFromConfig(aSection, KLeftPercentage, leftPercentage))
+ {
+ INFO_PRINTF1(_L("The Left value was not found in the ini file, using default value"));
+ }
+ TInt rightPercentage = iRightPercentage;
+ if (!GetIntFromConfig(aSection, KRightPercentage, rightPercentage))
+ {
+ INFO_PRINTF1(_L("The Right value was not found in the ini file, using default value"));
+ }
+ INFO_PRINTF3(_L("Setting record balance to left: %d, right: %d values"), leftPercentage, rightPercentage);
+ TRAPD(error, iDevSound->SetRecordBalanceL(leftPercentage, rightPercentage));
+ if (KErrNone != error)
+ {
+ ERR_PRINTF2(_L("SetRecordBalanceL left with error %d"), error);
+ SetError(error);
+ }
+ INFO_PRINTF1(_L("*END*CT_CMMFDevSoundData::DoCmdSetRecordBalanceL"));
+ }
+
+/**
+ * Defines the number of times the audio is to be repeated during the tone
+ * playback operation.
+ * A period of silence can follow each playing of a tone. The tone playing can
+ * be repeated indefinitely.
+ * @param aSection - Section to read params from the ini file
+ * @return none
+ */
+void CT_CMMFDevSoundData::DoCmdSetToneRepeats(const TTEFSectionName& aSection)
+ {
+ INFO_PRINTF1(_L("*START*CT_CMMFDevSoundData::DoCmdSetToneRepeats"));
+ TInt repeatCount=0;
+ TBool dataOk = ETrue;
+ if (!GetIntFromConfig(aSection, KRepeatCount, repeatCount))
+ {
+ ERR_PRINTF2(_L("Error in getting parameter %S from INI file"), &KRepeatCount);
+ SetBlockResult(EFail);
+ dataOk = EFalse;
+ }
+
+ TInt tempValue=0;
+ if (!GetIntFromConfig(aSection, KRepeatTrailingSilence, tempValue))
+ {
+ ERR_PRINTF2(_L("Error in getting parameter %S from INI file"), &KRepeatTrailingSilence);
+ SetBlockResult(EFail);
+ dataOk = EFalse;
+ }
+ TTimeIntervalMicroSeconds repeatTrailingSilence(tempValue);
+
+ if(dataOk)
+ {
+ iDevSound->SetToneRepeats(repeatCount, repeatTrailingSilence);
+ }
+ INFO_PRINTF1(_L("*END*CT_CMMFDevSoundData::DoCmdSetToneRepeats"));
+ }
+
+/**
+ * Defines the period over which the volume level is to rise smoothly from
+ * nothing to the normal volume level.
+ * The function is only available while the tone is playing.
+ * @param aSection - Section to read params from the ini file
+ * @return none
+ */
+void CT_CMMFDevSoundData::DoCmdSetVolume(const TTEFSectionName& aSection)
+ {
+ INFO_PRINTF1(_L("*START*CT_CMMFDevSoundData::DoCmdSetVolume"));
+ TInt volume = iVolumeValue;
+ if(!GetIntFromConfig(aSection, KVolumeValue, volume))
+ {
+ INFO_PRINTF1(_L("The Volume value was not found in the ini file, using default value"));
+ }
+ INFO_PRINTF2(_L("Setting volume value to %d"), volume);
+ iDevSound->SetVolume(volume);
+ INFO_PRINTF1(_L("*END*CT_CMMFDevSoundData::DoCmdSetVolume"));
+ }
+
+/**
+ * Defines the loop over which the volume level is to rise smoothly from
+ * nothing to the normal volume level.
+ * @param aSection - Section to read params from the ini file
+ * @return none
+ */
+void CT_CMMFDevSoundData::DoCmdSetVolumeLoop(const TTEFSectionName& aSection)
+ {
+ INFO_PRINTF1(_L("*START*CT_CMMFDevSoundData::DoCmdSetVolumeLoop"));
+ TInt volLoop=0;
+ TBool dataOk = ETrue;
+ if (!GetIntFromConfig(aSection, KVolumeLoop, volLoop))
+ {
+ ERR_PRINTF2(_L("Error in getting parameter %S from INI file"), &KVolumeLoop);
+ SetBlockResult(EFail);
+ dataOk = EFalse;
+ }
+ if(dataOk)
+ {
+ TPtrC parVolume;
+ TInt volumeValue=0;
+ RPointerArray<HBufC> volumeList;
+ for (TInt i=0; i<volLoop; i++)
+ {
+ if (!GetArrayRectFromConfig(aSection, KVolumeList, volumeList))
+ {
+ ERR_PRINTF2(_L("Error in getting parameter %S from INI file"), &KVolumeList);
+ volumeList.ResetAndDestroy();
+ SetBlockResult(EFail);
+ dataOk = EFalse;
+ }
+ if(dataOk)
+ {
+ for (TInt j=0; j<volumeList.Count(); j++)
+ {
+ parVolume.Set(*volumeList[j]);
+ TLex lex(parVolume);
+ TInt error = lex.Val(volumeValue);
+ if (error != KErrNone)
+ {
+ ERR_PRINTF2(_L("Obtaining volume value failed with error %d"), error);
+ SetError(error);
+ volumeList.ResetAndDestroy();
+ }
+ else
+ {
+ INFO_PRINTF3(_L("Setting volume number %d in the iteration number %d"), j, i);
+ iDevSound->SetVolume(volumeValue);
+ }
+ }
+ }
+ }
+ volumeList.ResetAndDestroy();
+ }
+ INFO_PRINTF1(_L("*END*CT_CMMFDevSoundData::DoCmdSetVolumeLoop"));
+ }
+
+/**
+ * Defines the period over which the volume level is to rise smoothly from
+ * nothing to the normal volume level.
+ * The function is only available while the tone is playing.
+ * @param aSection - Section to read param from the ini file
+ * @return none
+ */
+void CT_CMMFDevSoundData::DoCmdSetVolumeRamp(const TTEFSectionName& aSection)
+ {
+ INFO_PRINTF1(_L("*START*CT_CMMFDevSoundData::DoCmdSetVolumeRamp"));
+ TInt tempValue=0;
+ TBool dataOk = ETrue;
+ if (!GetIntFromConfig(aSection, KRampDuration, tempValue))
+ {
+ ERR_PRINTF2(_L("Error in getting parameter %S from INI file"), &KRampDuration);
+ SetBlockResult(EFail);
+ dataOk = EFalse;
+ }
+ TTimeIntervalMicroSeconds rampDuration(tempValue);
+
+ if(dataOk)
+ {
+ iDevSound->SetVolumeRamp(rampDuration);
+ }
+ INFO_PRINTF1(_L("*END*CT_CMMFDevSoundData::DoCmdSetVolumeRamp"));
+ }
+
+/**
+ * Initializes DevSound object for the mode aMode for processing audio data
+ * with hardware device aHWDev and supporting FourCC.
+ * Too Initializes CMMFDevSound object to play and record PCM16 raw audio data
+ * with sampling rate of 8 KHz.
+ * @param aSection - Section to read params from the ini file
+ */
+void CT_CMMFDevSoundData::DoCmdInitializeL(const TTEFSectionName& aSection, const TInt aAsyncErrorIndex)
+ {
+ INFO_PRINTF1(_L("*START*CT_CMMFDevSoundData::DoCmdInitializeL"));
+ TBool dataOk = ETrue;
+ TInt mode=0;
+ if (!GetEnumFromConfig(aSection, KMode, iEnumMode, mode))
+ {
+ ERR_PRINTF2(_L("Error in getting parameter %S from INI file"), &KMode);
+ SetBlockResult(EFail);
+ dataOk = EFalse;
+ }
+ else
+ {
+ TInt hwDeviceInt=0;
+ if (!GetHexFromConfig(aSection, KHwDevice, hwDeviceInt))
+ {
+ INFO_PRINTF2(_L("%S parameter was not found in INI file"), &KHwDevice);
+ TPtrC fourCCIniString;
+ if (!GetStringFromConfig(aSection, KFourCC, fourCCIniString))
+ {
+ INFO_PRINTF2(_L("%S parameter was not found in INI file"), &KFourCC);
+ if (dataOk)
+ {
+ INFO_PRINTF1(_L("Initializing DevSound with overload: void InitializeL(MDevSoundObserver &aDevSoundObserver, TMMFState aMode)"));
+ TRAPD(error, iDevSound->InitializeL(*this, (TMMFState)mode));
+ if(KErrNone != error)
+ {
+ ERR_PRINTF2(_L("InitializeL(aMDevSoundObserver, mode) left with error %d"), error);
+ SetError(error);
+ }
+ }
+ }
+ else
+ {
+ if (fourCCIniString.Length() > KTFourCC)
+ {
+ ERR_PRINTF2(_L("FourCC obtained from INI file exceeded the valid length in %d"), fourCCIniString.Length());
+ SetBlockResult(EFail);
+ dataOk = EFalse;
+ }
+ if (dataOk)
+ {
+ TBuf<256> fourCCString;
+ fourCCString.Copy(fourCCIniString);
+ while (fourCCString.Length() < KTFourCC)
+ {
+ fourCCString.Insert(0, _L(" "));
+ }
+ TFourCC fourCC;
+ fourCC = TFourCC(fourCCString[3] << 24 | fourCCString[2] << 16 | fourCCString[1] << 8 | fourCCString[0]);
+ INFO_PRINTF1(_L("Initializing DevSound with overload: void InitializeL(MDevSoundObserver &aDevSoundObserver, TFourCC aDesiredFourCC, TMMFState aMode)"));
+ TRAPD(error, iDevSound->InitializeL(*this, fourCC, (TMMFState)mode));
+ if(KErrNone!=error)
+ {
+ ERR_PRINTF2(_L("InitializeL(aMDevSoundObserver, fourCC, mode) left with error %d"), error);
+ ERR_PRINTF2(_L(" %S Not supported in this device"), &fourCCString);
+ SetError(error);
+ SetBlockResult(EFail);
+ }
+ }
+ }
+ }
+ else
+ {
+ if (dataOk)
+ {
+ TUid hwDevice;
+ hwDevice.iUid = hwDeviceInt;
+ INFO_PRINTF1(_L("Initializing DevSound with overload: void InitializeL(MDevSoundObserver &aDevSoundObserver, TUid aHWDev, TMMFState aMode)"));
+ TRAPD(error, iDevSound->InitializeL(*this, hwDevice, (TMMFState)mode));
+ if(KErrNone != error)
+ {
+ ERR_PRINTF2(_L("InitializeL(aMDevSoundObserver, hwDevice, mode) left with error %d"), error);
+ SetError(error);
+ }
+ }
+ }
+ }
+
+ if (dataOk)
+ {
+ IncOutstanding();
+ iInitializeErrorIndex = aAsyncErrorIndex;
+ }
+ INFO_PRINTF1(_L("*END*CT_CMMFDevSoundData::DoCmdInitializeL"));
+ }
+
+
+/**
+ * Initializes the audio device and starts playing the DTMF string aDTMFString.
+ * @param aSection - Section to read param from the ini file
+ * @return none
+ */
+void CT_CMMFDevSoundData::DoCmdPlayDTMFStringL(const TTEFSectionName& aSection, const TInt aAsyncErrorIndex)
+ {
+ INFO_PRINTF1(_L("*START*CT_CMMFDevSoundData::DoCmdPlayDTMFStringL"));
+ TBool dataOk = ETrue;
+ TPtrC dtmfString;
+ if (!GetStringFromConfig(aSection, KDTMFString, dtmfString) )
+ {
+ ERR_PRINTF2(_L("Error in getting parameter %S from INI file"), &KDTMFString);
+ SetBlockResult(EFail);
+ dataOk = EFalse;
+ }
+ if(dataOk)
+ {
+ TRAPD( error, iDevSound->PlayDTMFStringL(dtmfString) );
+ if(error != KErrNone)
+ {
+ ERR_PRINTF2(_L("Play DTMF string failed with error: %d "), error);
+ SetError(error);
+ }
+ else
+ {
+ iToneErrorIndex = aAsyncErrorIndex;
+ IncOutstanding();
+ }
+ }
+
+ INFO_PRINTF1(_L("*END*CT_CMMFDevSoundData::DoCmdPlayDTMFStringL"));
+ }
+
+/**
+ * Plays data in the buffer at the current volume.
+ * @param
+ * @return
+ */
+void CT_CMMFDevSoundData::DoCmdPlayData()
+ {
+ INFO_PRINTF1(_L("*START*CT_CMMFDevSoundData::DoCmdPlayData"));
+ PlayData();
+ INFO_PRINTF1(_L("*END*CT_CMMFDevSoundData::DoCmdPlayData"));
+ }
+
+/**
+ * Helper for the DoCmdPlayData command
+ */
+void CT_CMMFDevSoundData::PlayData()
+ {
+ INFO_PRINTF1(_L("CT_CMMFDevSoundData::PlayData()"));
+ iDevSound->PlayData();
+ }
+
+/**
+ * Initializes audio device and starts playing a dual tone.
+ * The generated tone consists of two sine waves of different frequencies summed together.
+ * Dual Tone is played with the specified frequencies and for the specified duration.
+ * @param aSection - Section to read params from the ini file.
+ * @return none
+ */
+void CT_CMMFDevSoundData::DoCmdPlayDualToneL(const TTEFSectionName& aSection , const TInt aAsyncErrorIndex)
+ {
+ INFO_PRINTF1(_L("*START*CT_CMMFDevSoundData::DoCmdPlayDualToneL"));
+ TBool dataOk = ETrue;
+ TInt frequencyOne=0;
+ if (!GetIntFromConfig(aSection, KFrequencyOne, frequencyOne) )
+ {
+ ERR_PRINTF2(_L("Error in getting parameter %S from INI file"), &KFrequencyOne);
+ SetBlockResult(EFail);
+ dataOk = EFalse;
+ }
+
+ TInt frequencyTwo=0;
+ if (!GetIntFromConfig(aSection, KFrequencyTwo, frequencyTwo) )
+ {
+ ERR_PRINTF2(_L("Error in getting parameter %S from INI file"), &KFrequencyTwo);
+ SetBlockResult(EFail);
+ dataOk = EFalse;
+ }
+
+ TInt duration=0;
+ if (!GetIntFromConfig(aSection, KDuration, duration) )
+ {
+ ERR_PRINTF2(_L("Error in getting parameter %S from INI file"), &KDuration);
+ SetBlockResult(EFail);
+ dataOk = EFalse;
+ }
+ if(dataOk)
+ {
+ TRAPD( error, iDevSound->PlayDualToneL(frequencyOne, frequencyTwo, duration) );
+ if(error != KErrNone)
+ {
+ ERR_PRINTF2(_L("Play dual tone failed with error %d"), error);
+ SetError(error);
+ }
+ else
+ {
+ iToneErrorIndex = aAsyncErrorIndex;
+ IncOutstanding();
+ }
+ }
+
+ INFO_PRINTF1(_L("*END*CT_CMMFDevSoundData::DoCmdPlayDualToneL"));
+ }
+
+
+/**
+ * Initializes the audio device and starts the play process.
+ *
+ * This function queries and acquires the audio policy before initializing audio device. If there was
+ * an error during policy initialization, PlayError() function will be called on the observer with
+ * error code KErrAccessDenied, otherwise BufferToBeFilled() function will be called with a buffer
+ * reference. After reading data into the buffer reference passed, the client should call PlayData() to play data.
+ *
+ * The amount of data that can be played is specified in CMMFBuffer::RequestSize(). Any data that is read into
+ * buffer beyond this size will be ignored.
+ * @param none
+ * @return none
+ */
+void CT_CMMFDevSoundData::DoCmdPlayInitL(const TInt aAsyncErrorIndex)
+ {
+ INFO_PRINTF1(_L("*START*CT_CMMFDevSoundData::DoCmdPlayInitL"));
+ TRAPD(error, iDevSound->PlayInitL());
+ if (error != KErrNone)
+ {
+ ERR_PRINTF2(_L("PlayInitL left with error %d"), error);
+ SetError(error);
+ }
+ else
+ {
+ iPlayErrorIndex = aAsyncErrorIndex;
+ IncOutstanding();
+ }
+ INFO_PRINTF1(_L("*END*CT_CMMFDevSoundData::DoCmdPlayInitL"));
+ }
+
+/**
+ * Initializes the audio device and starts playing a tone. The tone is played with the
+ * frequency and duration specified.
+ * @param aSection - Section to read params from the ini file
+ * @return none
+ */
+void CT_CMMFDevSoundData::DoCmdPlayToneL(const TTEFSectionName& aSection , const TInt aAsyncErrorIndex)
+ {
+ INFO_PRINTF1(_L("*START*CT_CMMFDevSoundData::DoCmdPlayToneL"));
+ TBool dataOk = ETrue;
+ TInt frequency=0;
+ if (!GetIntFromConfig(aSection, KFrequency, frequency))
+ {
+ ERR_PRINTF2(_L("Error in getting parameter %S from INI file"), &KFrequency);
+ SetBlockResult(EFail);
+ dataOk = EFalse;
+ }
+
+ TInt duration=0;
+ if (!GetIntFromConfig(aSection, KDuration, duration))
+ {
+ ERR_PRINTF2(_L("Error in getting parameter %S from INI file"), &KDuration);
+ SetBlockResult(EFail);
+ dataOk = EFalse;
+ }
+ if(dataOk)
+ {
+ TRAPD(error, iDevSound->PlayToneL(frequency, duration));
+ if (error != KErrNone)
+ {
+ ERR_PRINTF2(_L("Play tone failed with error %d"), error);
+ SetError(error);
+ }
+ else
+ {
+ iToneErrorIndex = aAsyncErrorIndex;
+ IncOutstanding();
+ }
+ }
+ INFO_PRINTF1(_L("*END*CT_CMMFDevSoundData::DoCmdPlayToneL"));
+ }
+
+/**
+ * Initializes the audio device and starts playing a tone sequence.
+ * @param aSection - Section to read param from the ini file
+ * @return none
+ */
+void CT_CMMFDevSoundData::DoCmdPlayToneSequenceL(const TTEFSectionName& aSection , const TInt aAsyncErrorIndex)
+ {
+ INFO_PRINTF1(_L("*START*CT_CMMFDevSoundData::DoCmdPlayToneSequenceL"));
+ TBool dataOk = ETrue;
+ TPtrC toneFileParameter;
+ if (!GetStringFromConfig(aSection, KFilename, toneFileParameter))
+ {
+ ERR_PRINTF2(_L("Error in getting parameter %S from INI file"), &KFilename);
+ SetBlockResult(EFail);
+ dataOk = EFalse;
+ }
+ if(dataOk)
+ {
+ TInt error = iToneFile.Open(iFs, toneFileParameter, EFileRead);
+ if (error != KErrNone)
+ {
+ ERR_PRINTF2(_L("Open file failed with error %d"), error);
+ SetError(EFail);
+ }
+ else
+ {
+ error = iToneFile.Read(iToneSequence);
+ if (error != KErrNone)
+ {
+ ERR_PRINTF2(_L("Read file failed with error %d"), error);
+ SetError(EFail);
+ }
+ else
+ {
+ TRAP(error, iDevSound->PlayToneSequenceL(iToneSequence));
+ if (error != KErrNone)
+ {
+ ERR_PRINTF2(_L("Play tone sequence failed with error %d"), error);
+ SetError(error);
+ }
+ else
+ {
+ iToneErrorIndex = aAsyncErrorIndex;
+ IncOutstanding();
+ }
+ }
+ }
+ }
+ INFO_PRINTF1(_L("*END*CT_CMMFDevSoundData::DoCmdPlayToneSequenceL"));
+ }
+
+/**
+ * Contine the process of recording.
+ *
+ * Once the buffer is filled with recorded data, the Observer gets a reference to the buffer along
+ * with the callback function BufferToBeEmptied(). After processing the buffer (copying over to a
+ * different buffer or writing to file) the client should call this function to continue the
+ * recording process.
+ * @param none
+ * @return none
+ */
+void CT_CMMFDevSoundData::DoCmdRecordData()
+ {
+ INFO_PRINTF1(_L("*START*CT_CMMFDevSoundData::DoCmdRecordData"));
+ RecordData();
+ INFO_PRINTF1(_L("*END*CT_CMMFDevSoundData::DoCmdRecordData"));
+ }
+
+/**
+ * Helper method to DoCmdRecordData command
+ */
+void CT_CMMFDevSoundData::RecordData()
+ {
+ iDevSound->RecordData();
+ }
+
+/**
+ * Initializes audio device and starts the recording process.
+ *
+ * This command queries and acquires the audio policy before initializing audio device. If there
+ * was an error during policy initialization, RecordError() function will be called on the observer
+ * with error code KErrAccessDenied, otherwise BufferToBeEmptied() function will be called with a
+ * buffer reference. This buffer contains recorded or encoded data. After processing data in the
+ * buffer reference passed, the client should call RecordData() to continue recording process.
+ *
+ * The amount of data that is available is specified in CMMFBuffer::RequestSize().
+ * @param none
+ * @return none
+ */
+void CT_CMMFDevSoundData::DoCmdRecordInitL(const TInt aAsyncErrorIndex)
+ {
+ INFO_PRINTF1(_L("*START*CT_CMMFDevSoundData::DoCmdRecordInitL"));
+ iRecordErrorIndex = aAsyncErrorIndex;
+ TRAPD(error, iDevSound->RecordInitL());
+ if (error != KErrNone)
+ {
+ ERR_PRINTF2(_L("RecordInitL left with error %d"), error);
+ SetError(error);
+ }
+ INFO_PRINTF1(_L("*END*CT_CMMFDevSoundData::DoCmdRecordInitL"));
+ }
+
+
+/**
+ * Conceal an error
+ * @param none
+ * @return none
+ */
+void CT_CMMFDevSoundData::DoCmdUtilityErrorConceal()
+ {
+ INFO_PRINTF1(_L("*START*CT_CMMFDevSoundData::DoCmdErrorConceal"));
+ iErrorConceal=ETrue;
+ INFO_PRINTF1(_L("*END*CT_CMMFDevSoundData::DoCmdErrorConceal"));
+ }
+
+/**
+ * Stop an audio file
+ * @param none
+ * @return none
+ */
+void CT_CMMFDevSoundData::DoCmdStop(const TTEFSectionName& aSection)
+ {
+ INFO_PRINTF1(_L("*START*CT_CMMFDevSoundData::DoCmdStop"));
+ TBool pause;
+ if(!GetBoolFromConfig(aSection,KPause,pause))
+ {
+ INFO_PRINTF1(_L("The DoCmdStop command will be execute"));
+ pause = EFalse;
+ }
+ iPaused=pause;
+ if(iPaused)
+ {
+ INFO_PRINTF1(_L("a Pause was required"));
+ }
+ Stop();
+ INFO_PRINTF1(_L("*END*CT_CMMFDevSoundData::DoCmdStop"));
+ }
+
+
+
+
+/**
+ * Utility for get the HwDevice for play and recording
+ */
+
+void CT_CMMFDevSoundData::UtilityFourCCToHwDeviceUidL(const TDesC& aFourCC, THwDeviceType aType, TUid& aHwDeviceUid)
+ {
+ TPtrC8 fourCCPtr(0,0);
+ TPtrC8 fourCCP16Ptr(0,0);
+ RImplInfoPtrArray impArray;
+ CleanupResetAndDestroyPushL(impArray);
+ REComSession::ListImplementationsL(TUid::Uid(KMmfUidPluginInterfaceHwDevice), impArray);
+ TBuf<KHwDeviceDefaultDataLength> datatype;
+ for(TInt i = 0; i < impArray.Count(); ++i)
+ {
+ CImplementationInformation& entry = *(impArray[i]);
+ // Validate lenght
+ if (entry.DataType().Length() == KHwDeviceDefaultDataLength)
+ {
+ INFO_PRINTF2(_L("Implementation UID=0x%08x"),entry.ImplementationUid());
+ datatype.Copy(entry.DataType());
+ INFO_PRINTF2(_L("Default data (fourCCs)=%S"), &datatype);
+ // Extract FourCC
+ if(aType == EDecoder)
+ {
+ fourCCPtr.Set(entry.DataType().Left(KFourCCLength));
+ fourCCP16Ptr.Set(entry.DataType().Right(KFourCCLength));
+ }
+ else if (aType == EEncoder)
+ {
+ fourCCPtr.Set(entry.DataType().Right(KFourCCLength));
+ fourCCP16Ptr.Set(entry.DataType().Left(KFourCCLength));
+ }
+ // Compare FourCC
+ TBuf16<4> foundFourCC;
+ foundFourCC.Copy(fourCCPtr);
+ if(aFourCC.CompareF(foundFourCC) == 0)
+ {
+ aHwDeviceUid = entry.ImplementationUid();
+ break;
+ }
+ }
+ }
+ CleanupStack::PopAndDestroy(&impArray);
+ REComSession::FinalClose();
+ }