diff -r 000000000000 -r 3553901f7fa8 cellularsrvapitest/telephonydevsoundhaitest/devsound/src/T_CRestrictedAudioOutputData.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cellularsrvapitest/telephonydevsoundhaitest/devsound/src/T_CRestrictedAudioOutputData.cpp Tue Feb 02 01:41:59 2010 +0200 @@ -0,0 +1,417 @@ +/* +* 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_CRestrictedAudioOutputData.h" + +/*@{*/ +//Command literals +_LIT(KCmdNewL, "NewL"); +_LIT(KCmdDestructor, "~"); +_LIT(KCmdAppendAllowedOutput, "AppendAllowedOutput"); +_LIT(KCmdRemoveAllowedOutput, "RemoveAllowedOutput"); +_LIT(KCmdGetAllowedOutput, "GetAllowedOutput"); +_LIT(KCmdGetAllowedOutputCount, "GetAllowedOutputCount"); +_LIT(KCmdReset, "Reset"); +_LIT(KCmdCommit, "Commit"); +/*@}*/ + +/*@{*/ +//INI Section name literals +_LIT(KOutput, "Output"); +_LIT(KIndex, "Index"); +_LIT(KDevSoundInstanceName, "DevSoundInstanceName"); +/*@}*/ + +/*@{*/ +//Enumeration Literals +_LIT(KEAllowAllAudio, "EAllowAllAudio"); +_LIT(KEAllowAudioAnalog, "EAllowAudioAnalog"); +_LIT(KEAllowAudioFMTransmitter, "EAllowAudioFMTransmitter"); +_LIT(KEAllowAudioBtHFPHSP, "EAllowAudioBtHFPHSP"); +_LIT(KEAllowAudioBtA2DP, "EAllowAudioBtA2DP"); +_LIT(KEAllowAudioUplink, "EAllowAudioUplink"); +_LIT(KEAllowAudioUsb, "EAllowAudioUsb"); +_LIT(KEAllowAudioRecording, "EAllowAudioRecording"); +_LIT(KEAllowVisualization, "EAllowVisualization"); +/*@}*/ + +const CDataWrapperBase::TEnumEntryTable CT_CRestrictedAudioOutputData::iEnumAllowedOutputPreference[]= + { + { KEAllowAllAudio, CRestrictedAudioOutput::EAllowAllAudio}, + { KEAllowAudioAnalog, CRestrictedAudioOutput::EAllowAudioAnalog}, + { KEAllowAudioFMTransmitter, CRestrictedAudioOutput::EAllowAudioFMTransmitter}, + { KEAllowAudioBtHFPHSP, CRestrictedAudioOutput::EAllowAudioBtHFPHSP}, + { KEAllowAudioBtA2DP, CRestrictedAudioOutput::EAllowAudioBtA2DP}, + { KEAllowAudioUplink, CRestrictedAudioOutput::EAllowAudioUplink}, + { KEAllowAudioUsb, CRestrictedAudioOutput::EAllowAudioUsb}, + { KEAllowAudioRecording, CRestrictedAudioOutput::EAllowAudioRecording}, + { KEAllowVisualization, CRestrictedAudioOutput::EAllowVisualization} + }; + +/** + * Public destructor + */ +CT_CRestrictedAudioOutputData::~CT_CRestrictedAudioOutputData() + { + DestroyData(); + } + +/** + * Two phase constructor + * + * @leave system wide error + */ +CT_CRestrictedAudioOutputData* CT_CRestrictedAudioOutputData::NewL() + { + CT_CRestrictedAudioOutputData* ret = new (ELeave) CT_CRestrictedAudioOutputData(); + return ret; + } + +/** + * Return a pointer to the object that the data wraps + * + * @return pointer to the object that the data wraps + */ +TAny* CT_CRestrictedAudioOutputData::GetObject() + { + return iRestrictedAudioOutput; + } + +/** + * Helper destructor + */ +void CT_CRestrictedAudioOutputData::DestroyData() + { + if (iRestrictedAudioOutput) + { + delete iRestrictedAudioOutput; + iRestrictedAudioOutput = NULL; + } + } +/** + * 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_CRestrictedAudioOutputData::DoCommandL(const TTEFFunction& aCommand, const TTEFSectionName& aSection, const TInt /*aAsyncErrorIndex*/) + { + TBool ret = ETrue; + + if (aCommand == KCmdNewL) + { + DoCmdNewL(aSection); + } + else if (aCommand == KCmdDestructor) + { + DoCmdDestructor(); + } + else if (aCommand == KCmdAppendAllowedOutput) + { + DoCmdAppendAllowedOutput(aSection); + } + else if (aCommand == KCmdRemoveAllowedOutput) + { + DoCmdRemoveAllowedOutput(aSection); + } + else if (aCommand == KCmdGetAllowedOutput) + { + DoCmdGetAllowedOutput(aSection); + } + else if (aCommand == KCmdGetAllowedOutputCount) + { + DoCmdGetAllowedOutputCount(); + } + else if (aCommand == KCmdReset) + { + DoCmdReset(); + } + else if (aCommand == KCmdCommit) + { + DoCmdCommit(); + } + else + { + ERR_PRINTF1(_L("Unknown command")); + ret=EFalse; + } + + return ret; + } + +/** + * Create a new instance of CRestrictedAudioOutput + * @param aSection - Section to read from the ini file + * @return void + */ +void CT_CRestrictedAudioOutputData::DoCmdNewL(const TTEFSectionName& aSection) + { + INFO_PRINTF1(_L("*START*CT_CRestrictedAudioOutputData::DoCmdNewL()")); + DestroyData(); + TPtrC devSoundInstanceName; + if (!GetStringFromConfig(aSection, KDevSoundInstanceName, devSoundInstanceName)) + { + ERR_PRINTF2(_L("Error in getting parameter %S from INI file"), &KDevSoundInstanceName); + SetBlockResult(EFail); + } + else + { + CMMFDevSound* mMFDevSound = static_cast(GetDataObjectL(devSoundInstanceName)); + TInt error; + if ( !iRestrictedAudioOutput ) + { + if ( mMFDevSound ) + { + CleanupStack::PushL(mMFDevSound); + iRestrictedAudioOutput = (CRestrictedAudioOutput*)mMFDevSound->CustomInterface(KUidRestrictedAudioOutput); + if ( iRestrictedAudioOutput == NULL ) + { + ERR_PRINTF1(_L("Failed to create RestrictedAudioOutput")); + error = KErrNotFound; + SetError(error); + } + else + { + INFO_PRINTF1(_L("RestrictedAudioOutput created")); + CleanupStack::Pop(mMFDevSound); + } + } + else + { + ERR_PRINTF1(_L("DevSound not ready")); + error = KErrNotReady; + SetError(error); + } + } + INFO_PRINTF1(_L("*END*CT_CRestrictedAudioOutputData::DoCmdNewL()")); + } + } + +/** + * Delete an instance of CRestrictedAudioOutput + * @param + * @return void + */ +void CT_CRestrictedAudioOutputData::DoCmdDestructor() + { + INFO_PRINTF1(_L("*START*CT_CRestrictedAudioOutputData::DoCmdDestructor()")); + DestroyData(); + INFO_PRINTF1(_L("*END*CT_CRestrictedAudioOutputData::DoCmdDestructor()")); + } + +/** + * Appends an allowed output to the existing list. + * @param aSection - The section to read from the ini file + * @return void + */ +void CT_CRestrictedAudioOutputData::DoCmdAppendAllowedOutput(const TTEFSectionName& aSection) + { + INFO_PRINTF1(_L("*START*CT_CRestrictedAudioOutputData::DoCmdAppendAllowedOutput()")); + TInt output; + if ( !GetEnumFromConfig(aSection, KOutput, iEnumAllowedOutputPreference, output) ) + { + ERR_PRINTF2(_L("Error in getting parameter %S from INI file"), &KOutput); + SetBlockResult(EFail); + } + else + { + TInt error; + error = iRestrictedAudioOutput->AppendAllowedOutput((CRestrictedAudioOutput::TAllowedOutputPreference) output); + + if ( (error!=KErrNone) && (error!=KErrAlreadyExists) ) + { + ERR_PRINTF2(_L("Error in appending allowed output. Error: %d"), error); + SetError(error); + } + else + { + INFO_PRINTF2(_L("Allowed output 0x%x appended"), (CRestrictedAudioOutput::TAllowedOutputPreference) output); + INFO_PRINTF1(_L("*END*CT_CRestrictedAudioOutputData::DoCmdAppendAllowedOutput()")); + } + } + } + +/** + * Removes an allowed output from the existing list. + * @param aSection - The section to read from the ini file + * @return void + */ +void CT_CRestrictedAudioOutputData::DoCmdRemoveAllowedOutput(const TTEFSectionName& aSection) + { + INFO_PRINTF1(_L("*START*CT_CRestrictedAudioOutputData::DoCmdRemoveAllowedOutput()")); + TInt output; + if(!GetEnumFromConfig(aSection, KOutput, iEnumAllowedOutputPreference, output)) + { + ERR_PRINTF2(_L("Error in getting parameter %S from INI file"), &KOutput); + SetBlockResult(EFail); + } + else + { + TInt error; + error = iRestrictedAudioOutput->RemoveAllowedOutput((CRestrictedAudioOutput::TAllowedOutputPreference) output); + if (error != KErrNone) + { + ERR_PRINTF2(_L("Error in removing allowed output. Error: %d"), error); + SetError(error); + } + else + { + INFO_PRINTF2(_L("Allowed output 0x%x removed"), (CRestrictedAudioOutput::TAllowedOutputPreference) output); + INFO_PRINTF1(_L("*END*CT_CRestrictedAudioOutputData::DoCmdRemoveAllowedOutput()")); + } + } + } + +/** + * Gets a reference to an allowed output located at a specified position + * within the list. + * @param aSection - The section to read from the ini file + * @return void + */ +void CT_CRestrictedAudioOutputData::DoCmdGetAllowedOutput(const TTEFSectionName& aSection) + { + INFO_PRINTF1(_L("*START*CT_CRestrictedAudioOutputData::DoCmdGetAllowedOutput()")); + TInt index; + if ( !GetIntFromConfig(aSection, KIndex, index) ) + { + ERR_PRINTF2(_L("Error in getting parameter %S from INI file"), &KIndex); + SetBlockResult(EFail); + } + else + { + TInt error; + CRestrictedAudioOutput::TAllowedOutputPreference allowedOutput; + error = iRestrictedAudioOutput->GetAllowedOutput(index, allowedOutput); + if ( error != KErrNone ) + { + ERR_PRINTF2(_L("Error in getting allowed output. Error: %d"), error); + SetError(error); + } + else + { + switch (allowedOutput) + { + case CRestrictedAudioOutput::EAllowAllAudio: + INFO_PRINTF1(_L("AllowAllAudio")); + break; + case CRestrictedAudioOutput::EAllowAudioAnalog: + INFO_PRINTF1(_L("AllowAudioAnalog")); + break; + case CRestrictedAudioOutput::EAllowAudioFMTransmitter: + INFO_PRINTF1(_L("AllowAudioFMTransmitter")); + break; + case CRestrictedAudioOutput::EAllowAudioBtHFPHSP: + INFO_PRINTF1(_L("AllowAudioBtHFPHSP")); + break; + case CRestrictedAudioOutput::EAllowAudioBtA2DP: + INFO_PRINTF1(_L("AllowAudioBtA2DP")); + break; + case CRestrictedAudioOutput::EAllowAudioUplink: + INFO_PRINTF1(_L("AllowAudioUplink")); + break; + case CRestrictedAudioOutput::EAllowAudioUsb: + INFO_PRINTF1(_L("AllowAudioUsb")); + break; + case CRestrictedAudioOutput::EAllowAudioRecording: + INFO_PRINTF1(_L("AllowAudioRecording")); + break; + case CRestrictedAudioOutput::EAllowVisualization: + INFO_PRINTF1(_L("AllowVisualization")); + break; + default: + INFO_PRINTF2(_L("Unknown output 0x%x"), allowedOutput); + } + INFO_PRINTF1(_L("*END*CT_CRestrictedAudioOutputData::DoCmdGetAllowedOutput()")); + } + } + } + + +/** + * Gets the number of allowed objects in the array. * + * @param + * @return void + */ +void CT_CRestrictedAudioOutputData::DoCmdGetAllowedOutputCount() + { + INFO_PRINTF1(_L("*START*CT_CRestrictedAudioOutputData::DoCmdGetAllowedOutputCount()")); + TInt error, size; + error = iRestrictedAudioOutput->GetAllowedOutputCount(size); + if(error != KErrNone) + { + ERR_PRINTF2(_L("Error in getting allowed output count. Error: %d"), error); + SetError(error); + } + else + { + INFO_PRINTF2(_L("Allowed output count: %d"), size); + INFO_PRINTF1(_L("*END*CT_CRestrictedAudioOutputData::DoCmdGetAllowedOutputCount()")); + } + } + +/** + * Empties the list, so that it is ready to be reused. + * + * @param + * @return void + */ +void CT_CRestrictedAudioOutputData::DoCmdReset() + { + INFO_PRINTF1(_L("*START*CT_CRestrictedAudioOutputData::DoCmdReset()")); + TInt error; + error = iRestrictedAudioOutput->Reset(); + if (error!=KErrNone) + { + ERR_PRINTF2(_L("Error in reset. Error: %d"), error); + SetError(error); + } + else + { + INFO_PRINTF1(_L("Reset successfully")); + INFO_PRINTF1(_L("*END*CT_CRestrictedAudioOutputData::DoCmdReset()")); + } + } + + +/** + * Applies settings cached locally and commits. + * + * This function can only be called when the DevSound instance is in Idle OR + * Stopped state. + * @param + * @return + */ + +void CT_CRestrictedAudioOutputData::DoCmdCommit() + { + INFO_PRINTF1(_L("*START*CT_CRestrictedAudioOutputData::DoCmdCommit()")); + TInt error; + error = iRestrictedAudioOutput->Commit(); + if (error != KErrNone) + { + ERR_PRINTF2(_L("Error in Commit. Error: %d"), error); + SetError(error); + } + else + { + INFO_PRINTF1(_L("Commit successfully")); + INFO_PRINTF1(_L("*END*CT_CRestrictedAudioOutputData::DoCmdCommit()")); + } + }