Loudspeaker control for an active GSM call for S60 3.1 devices
There is known issue with loudspeaker control during an active circuit switched call. Developers are unable to set the active call to be in loudspeaker mode in S60 3.1 devices. Forum Nokia will publish a Symbian Signed loudspeaker API wrapper which will solve this issue. The implementation delivery estimate is beginning of December 2007.
Re: Loudspeaker control for an active GSM call for S60 3.1 devices
Hi,
What is the api to activate the loudspeaker during an active call for S60 3rd MR ?
Or better, can you help with a demo code ?
I understand this api (for MR) is no more working for S60 3rd FP1 ?
Thank you
tek
Re: Loudspeaker control for an active GSM call for S60 3.1 devices
It is possible to activate the loudspeaker during a call by using the APS Server's ActivateLoudspeaker function.
This requires downloading the APS version for your platform(FP1 or MR) and needs MultimediaDD capability. See [url]http://wiki.forum.nokia.com/index.php/Audio_Proxy_Server[/url]
I am very interested as well if there is another API that allows doing this
i.e. Activate the loudspeaker during an active GSM call.
Re: Loudspeaker control for an active GSM call for S60 3.1 devices
APS has a "positive" known issue: not only you can put the VoIP call to loudspeaker mode but it works also for circuit switched call in S60 3.0 devices.
However, it does not allow you to control audio routing for Circuit Switched call in S60 3.1 devices (e.g. N95). Therefore S60 Multimedia team in Dallas has created a "Loudspeaker API wrapper" which Forum Nokia makes available for Symbian C++ developers. Latest estimate is that Forum Nokia will get the initial release during week 51.
If you are interested and to be the first ones to try, please register to e-Store, buy a Private API voucher (approx 200usd) from e-store and submit a request.
Re: Loudspeaker control for an active GSM call for S60 3.1 devices
This private API wrapper is now available for beta testers. Please submit a private API request (register to Forum Nokia e-store, buy a private API case, submit the request) and ask for CallAudioControl in order to control audio routing during active cellular call.
Initial release notes:
Interface for controlling call audio
* This class provides interface for controlling a) audio routing to various connected output devices. b) speaker volume. c) microphone gain.
* This interface can be used to control active Circuit Switching call, Video Telephony call and Nokia internal VoIP calls.
Limitations:
* 1. This inteface can only be used on Nokia devices running S60 3.1 OR 3.2 platform.
* 2. Clients are requried to have MultimediaDD and WriteDeviceData capability to use some of the functions defined in this interface. Check individual function documentation for more information.
* 3. Some of the functions (routing, volume, and gain control) defined in this interface can only be used during an active Circuit Switching OR Video Telephony OR Nokia internal VoIP call.
* If those functions are used when there is no active call, they return KErrPermissionDenied. Check individual function documentation for more information.
* 4. This API does not control 3rd party VoIP call created via APS or VoIP Audio Services API.
* 5. When connected accessory list changes, initial routing happens automatically.
Re: Loudspeaker control for an active GSM call for S60 3.1 devices
Clarification:
You should be able to control the audio routing for Circuit Switched and VoIP calls using APS ("positive bug") for all S60 3.0 devices.
For S60 3.1 devices the APS controls only VoIP audio routing and CallAudioControl API (private API wrapper) is needed for CS audio routing.
Re: Loudspeaker control for an active GSM call for S60 3.1 devices
Hi all,
The first beta of CallAudioControl API for S60 3rd FP1 is now available for partnering.
[url]http://www.forum.nokia.com/main/technical_services/technical_support/index.html[/url]
API description from the header file:
/**
* Interface for controlling call audio.
*
* This class provides interface for controlling a) audio routing to various
* connected output devices. b) speaker volume. c) microphone gain.
* This interface can be used to control active Circuit Switching call, Video
* Telephony call and Nokia internal VoIP calls.
*
* Limitations:
* 1. This inteface can only be used on Nokia devices running S60 3.1 OR 3.2
* platform.
* 2. Clients are requried to have MultimediaDD and WriteDeviceData capability to
* use some of the functions defined in this interface. Check individual
* function documentation for more information.
* 3. Some of the functions (routing, volume, and gain control) defined in this
* interface can only be used during an active Circuit Switching OR Video
* Telephony OR Nokia internal VoIP call.
* If those functions are used when there is no active call, they return
* KErrPermissionDenied. Check individual function documentation for more
* information.
* 4. This API does not control 3rd party VoIP call created via APS or VoIP
* Audio Services API.
* 5. When connected accessory list changes, initial routing happens
* automatically.
*
* @lib CallAudioControl.lib
*
* @since Series 60 3.1, 3.2
*
*/
Br,
Petro
Re: Loudspeaker control for an active GSM call for S60 3.1 devices
Hi,
I am using this CCallAudioControl wrapper on S60 3.1 (Nokia N95). I found couple of issues while using this, which are as stated below:
1. Calling SetOutput() API, void RoutingEvent(CCallAudioControl& aCallAudioControl, TUint aEvent, TInt aError) callback is never been called. Rather the overloaded callback void RoutingEvent(CCallAudioControl& aCallAudioControl, TUint aEvent) is called. This contradicts to the API description.
2. After calling SetOutput(), if I try to delete the CCallAudioControl object, it gives E32USER-CBase 40. Which means an attempt to delete the active object while it still has a request outstanding. But not sure which request is outstanding as I already got the callback RoutingEvent() for my request SetOutput().
3. If I create any instance of CCallAudioControl before there is any active call, and try to do any operation, it fails with KErrPermissionDenied. I guess there is an assumption where call should be active when the instance of CCallAudioControl is created other wise it will fail. Looks like call state is checked and cached at the time on construction of CCallAudioControl and the same cached state is used for further APIs.
4. If the call is on Hold and if we try to do any operation like SetOutput(), it fails with KErrPermissionDenied which is not inline with the Phone App behaviour. Phone App allows to change the output (loudspeaker/handset) even if the call is on hold.
Regards,
Dushyant
P.S. - All calls under consideration are circuit calls.
Re: Loudspeaker control for an active GSM call for S60 3.1 devices
Thanks Dushyant,
Your feedback is much appreciated.
I'll forward these findings to our development team.
Br,
Petro
Re: Loudspeaker control for an active GSM call for S60 3.1 devices
[QUOTE=dgaur;385078]Hi,
2. After calling SetOutput(), if I try to delete the CCallAudioControl object, it gives E32USER-CBase 40. Which means an attempt to delete the active object while it still has a request outstanding. But not sure which request is outstanding as I already got the callback RoutingEvent() for my request SetOutput().
[/QUOTE]
Dushyant,
All other issues will be fixed by us, but the point above needs some clarification.
Did you call RemoveRoutingObserver before deleting the CallAudioControl object?
cheers,
petro
Re: Loudspeaker control for an active GSM call for S60 3.1 devices
Yes, I did. I called RemoveRoutingObserver before deleting the CallAudioControl object.
Here is snippet of my code...
if(mSpeaker)
{
mSpeaker->RemoveRoutingObserver(*this);
mSpeaker->RemoveDownlinkVolumeObserver(*this);
mSpeaker->RemoveUplinkGainObserver(*this);
delete mSpeaker;
}
Where mSpeaker is object pointer of CCallAudioControl.
Re: Loudspeaker control for an active GSM call for S60 3.1 devices
I beleive, there is another issue while using CallAudioControl.
If i use CCallAudioControl, the CIdle callback is never called.
I first initialised it.
myCmd= CCallAudioControl::NewL();
and then, CIdle set with EPriorityIdle never gives a callback.
CIdle *idleObj;
idleObj = CIdle::New(CActive::EPriorityIdle);
idleObj->Start(TCallBack (idleObjCallBack,this));
Has anyone else faced the same issue ?? Can nokia team confirm if this is a known issue ?
Device used is N95 with latest firmware 20.0.15
Re: Loudspeaker control for an active GSM call for S60 3.1 devices
Hi,
I have similar issue as amitaggarwal. I successfully call CCallAudioControl::SetOutput and receive SetOutputComplete callback. But if I then initialize CPeriodic with EPriorityIdle, the timer calback function is never called.
I also have an issue with SetUplinkMute. I don't get the panic code as described in WiKi in known issues, but it fails with error code -32546. Also I don't get any notification from the UplinkGainObserver.
The last issue for now is, that the I receive the OutputChanged notifications from RoutingObserver are received by my app only if I call the GetAvailableOutputs first.
All these were observed on N95 with fw 21.0.016.
Lubos
Re: Loudspeaker control for an active GSM call for S60 3.1 devices
To Petro
Is there a plan to release a new version of this API with fixes for the known issues? If yes, when it will be available and what fixes will it address?
Thanks,
Lubos
Re: Loudspeaker control for an active GSM call for S60 3.1 devices
Hi,
I've found another issue with CallAudioControl API. After calling the CallAudioControl::SetOutput, I am unable to read the call log - call to CLogViewRecent::SetRecentListL never completes.
Has anybody seen something like this?
Any ides how to fix/workaround it would be appreciated.
The behavior was observed on N95 with latest FW.
Lubos