sl@0: // Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). sl@0: // All rights reserved. sl@0: // This component and the accompanying materials are made available sl@0: // under the terms of "Eclipse Public License v1.0" sl@0: // which accompanies this distribution, and is available sl@0: // at the URL "http://www.eclipse.org/legal/epl-v10.html". sl@0: // sl@0: // Initial Contributors: sl@0: // Nokia Corporation - initial contribution. sl@0: // sl@0: // Contributors: sl@0: // sl@0: // Description: sl@0: // sl@0: sl@0: #include sl@0: #include sl@0: #include "MmfBtAudioPolicyProxy.h" sl@0: #include "MmfBtAudioPolicyStart.h" sl@0: #include "../../../inc/common/mmfBtBase.hrh" sl@0: #include "mdasound.h" sl@0: #include "MmfBtDevSoundInfo.h" sl@0: #include "MmfBtAudioPolicyServer.h" sl@0: sl@0: sl@0: sl@0: EXPORT_C TInt RMMFAudioPolicyProxy::Open(RServer2& aPolicyServerHandle) sl@0: { sl@0: TServerStart start(aPolicyServerHandle); sl@0: TInt err = KErrNone; sl@0: if(aPolicyServerHandle.Handle()) sl@0: { sl@0: // Server is already running and attempt to create a session sl@0: // 4 message slots sl@0: err = CreateSession(aPolicyServerHandle, TVersion(KMMFAudioPolicyVersion, sl@0: KMMFAudioPolicyMinorVersionNumber, sl@0: KMMFAudioPolicyBuildVersionNumber)); sl@0: if(err != KErrNone) sl@0: { sl@0: return err; sl@0: } sl@0: } sl@0: else sl@0: { sl@0: TThreadFunction serverFunc = CMMFAudioPolicyServer::StartThread; sl@0: RThread server; sl@0: err = server.Create(_L(""),serverFunc, KAudioPolicyServerStackSize, sl@0: KAudioPolicyServerInitHeapSize, KAudioPolicyServerMaxHeapSize, sl@0: &start, EOwnerProcess); sl@0: if(err != KErrNone) sl@0: return err; sl@0: // Synchronise with the server sl@0: TRequestStatus reqStatus; sl@0: server.Rendezvous(reqStatus); sl@0: if (reqStatus!=KRequestPending) sl@0: { sl@0: server.Kill(0); sl@0: } sl@0: else sl@0: { sl@0: // Start the test harness sl@0: server.Resume(); sl@0: // Server will call the reciprocal static synchronise call sl@0: } sl@0: User::WaitForRequest(reqStatus); // wait for start or death sl@0: server.Close(); sl@0: if(reqStatus.Int() != KErrNone) sl@0: { sl@0: return reqStatus.Int(); sl@0: } sl@0: err = CreateSession(aPolicyServerHandle, TVersion(KMMFAudioPolicyVersion, sl@0: KMMFAudioPolicyMinorVersionNumber, sl@0: KMMFAudioPolicyBuildVersionNumber)); sl@0: } sl@0: return err; sl@0: } sl@0: sl@0: EXPORT_C TInt RMMFAudioPolicyProxy::SetDevSoundInfo(TMMFDevSoundInfo& aDevSoundInfo) sl@0: { sl@0: TMMFDevSoundInfoPckg psPckg(aDevSoundInfo); sl@0: return SendReceive(EMMFPolicySetDevSoundInfo, psPckg); sl@0: } sl@0: sl@0: EXPORT_C void RMMFAudioPolicyProxy::MakeRequest(TMMFAudioPolicyPrioritySettings& aPrioritySettings) sl@0: { sl@0: iPsPckg().iState = aPrioritySettings.iState; sl@0: iPsPckg().iPref = aPrioritySettings.iPref; sl@0: iPsPckg().iPriority = aPrioritySettings.iPriority; sl@0: iPsPckg().iCapabilities = aPrioritySettings.iCapabilities; sl@0: SendReceive(EMMFPolicyMakeRequest, iPsPckg); sl@0: } sl@0: sl@0: EXPORT_C TInt RMMFAudioPolicyProxy::UpdateState(TMMFAudioPolicyPrioritySettings& aPrioritySettings) sl@0: { sl@0: TMMFAudioPolicyPrioritySettingsPckg psPckg(aPrioritySettings); sl@0: return SendReceive(EMMFPolicyUpdateState, psPckg); sl@0: } sl@0: sl@0: EXPORT_C void RMMFAudioPolicyProxy::ReceiveEvents(TMMFAudioPolicyEventPckg& aEventPckg, TRequestStatus& aStatus) sl@0: { sl@0: SendReceiveResult(EMMFPolicyReceiveEvents, aEventPckg, aStatus); sl@0: } sl@0: sl@0: EXPORT_C TInt RMMFAudioPolicyProxy::CancelReceiveEvents() sl@0: { sl@0: return SendReceive(EMMFPolicyCancelReceiveEvents); sl@0: } sl@0: sl@0: EXPORT_C TInt RMMFAudioPolicyProxy::GetPlayFormatsSupported(RMdaDevSound::TSoundFormatsSupportedBuf& aPlayFormatsSupported) sl@0: { sl@0: RMdaDevSound::TSoundFormatsSupportedBuf playFormatsSupported; sl@0: TInt err = SendReceiveResult(EMMFPolicyGetPlayFormatsSupported, playFormatsSupported); sl@0: if (!err) sl@0: aPlayFormatsSupported = playFormatsSupported; sl@0: return err; sl@0: } sl@0: sl@0: EXPORT_C TInt RMMFAudioPolicyProxy::GetRecordFormatsSupported(RMdaDevSound::TSoundFormatsSupportedBuf& aRecordFormatsSupported) sl@0: { sl@0: RMdaDevSound::TSoundFormatsSupportedBuf recordFormatsSupported; sl@0: TInt err = SendReceiveResult(EMMFPolicyGetRecordFormatsSupported, recordFormatsSupported); sl@0: if (!err) sl@0: aRecordFormatsSupported = recordFormatsSupported; sl@0: return err; sl@0: } sl@0: sl@0: EXPORT_C TInt RMMFAudioPolicyProxy::GetPlayFormat(RMdaDevSound::TCurrentSoundFormatBuf& aPlayFormat) sl@0: { sl@0: RMdaDevSound::TCurrentSoundFormatBuf playFormat; sl@0: TInt err = SendReceiveResult(EMMFPolicyGetPlayFormat, playFormat); sl@0: if (!err) sl@0: aPlayFormat = playFormat; sl@0: return err; sl@0: } sl@0: sl@0: EXPORT_C TInt RMMFAudioPolicyProxy::GetRecordFormat(RMdaDevSound::TCurrentSoundFormatBuf& aRecordFormat) sl@0: { sl@0: RMdaDevSound::TCurrentSoundFormatBuf recordFormat; sl@0: TInt err = SendReceiveResult(EMMFPolicyGetRecordFormat, recordFormat); sl@0: if (!err) sl@0: aRecordFormat = recordFormat; sl@0: return err; sl@0: } sl@0: sl@0: EXPORT_C TInt RMMFAudioPolicyProxy::LaunchRequests() sl@0: { sl@0: return SendReceive(EMMFPolicyLaunchRequests); sl@0: } sl@0: sl@0: EXPORT_C TInt RMMFAudioPolicyProxy::RequestResourceNotification(TUid aNotificationEventUid, const TDesC8& aNotificationDelay) sl@0: { sl@0: TUid eventType = KNullUid; sl@0: TMMFAudioPolicyResourceNotificationSettingsPckg pckg; sl@0: pckg().iNotificationUid = eventType; sl@0: TInt err = SendReceiveResult(EMMFPolicyGetResourceNotificationEvent, pckg); sl@0: eventType = pckg().iNotificationUid; sl@0: if(!err) sl@0: { sl@0: if(eventType != aNotificationEventUid ) sl@0: { sl@0: pckg().iNotificationUid = aNotificationEventUid; sl@0: pckg().iNotificationDelay = aNotificationDelay; sl@0: return SendReceive(EMMFPolicyRequestResourceNotification, pckg); sl@0: } sl@0: else sl@0: { sl@0: return KErrAlreadyExists; sl@0: } sl@0: } sl@0: return err; sl@0: } sl@0: sl@0: EXPORT_C TInt RMMFAudioPolicyProxy::CancelRequestResourceNotification(TUid aNotificationEventUid) sl@0: { sl@0: TUid eventType = KNullUid; sl@0: TMMFAudioPolicyResourceNotificationSettingsPckg pckg; sl@0: pckg().iNotificationUid = eventType; sl@0: TInt err = SendReceiveResult(EMMFPolicyGetResourceNotificationEvent, pckg); sl@0: eventType = pckg().iNotificationUid; sl@0: if(!err) sl@0: { sl@0: if(eventType == aNotificationEventUid ) sl@0: { sl@0: pckg().iNotificationUid = aNotificationEventUid; sl@0: return SendReceive(EMMFPolicyCancelRequestResourceNotification, pckg); sl@0: } sl@0: else sl@0: { sl@0: return KErrCancel; sl@0: } sl@0: } sl@0: return err; sl@0: } sl@0: sl@0: EXPORT_C TInt RMMFAudioPolicyProxy::StopNotification() sl@0: { sl@0: return SendReceive(EMMFPolicyStopNotification); sl@0: } sl@0: sl@0: EXPORT_C TInt RMMFAudioPolicyProxy::IsRegisteredResourceNotification(TUid aEventType) sl@0: { sl@0: TUid eventType = KNullUid; sl@0: TMMFAudioPolicyResourceNotificationSettingsPckg pckg; sl@0: pckg().iNotificationUid = eventType; sl@0: TInt err = SendReceiveResult(EMMFPolicyGetResourceNotificationEvent, pckg); sl@0: if(err != KErrNone) sl@0: { sl@0: return err; sl@0: } sl@0: eventType = pckg().iNotificationUid; sl@0: if(eventType == aEventType) sl@0: { sl@0: return KErrNone; sl@0: } sl@0: return KErrNotSupported; sl@0: } sl@0: