201031
authorhgs
Fri, 06 Aug 2010 16:55:00 -0500
changeset 38 9e9fc5ab059f
parent 36 73253677b50a
child 39 1f58177f6740
201031
khronosfws/openmax_al/src/adptcommon/xaframeworkmgr.c
khronosfws/openmax_al/src/mmf_adaptation/cmmfradiobackendengine.cpp
khronosfws/openmax_al/src/mmf_adaptation/xaradioitfadaptation.c
khronosfws/openmax_al/src/radio/xaradioitf.c
mmfenh/advancedaudiocontroller/audiocontrollerpluginsvariant/rom/AudioControllerPluginsVariant.iby
mmfenh/advancedaudiocontroller/tsrc/advancedaudiocontrollertestmodule/ActiveScheduledTestModule/data/mmc/metadata/DRM_NRTmeta.dcf
mmfenh/advancedaudiocontroller/tsrc/advancedaudiocontrollertestmodule/AudioPlaybackTestModule/data/mmc/metadata/DRM_NRTmeta.dcf
mmfenh/advancedaudiocontroller/tsrc/advancedaudiocontrollertestmodule/AudioRecorderTestModule/data/mmc/metadata/DRM_NRTmeta.dcf
mmfenh/advancedaudiocontroller/tsrc/advancedaudiocontrollertestmodule/AudioStreamTestModule/data/mmc/metadata/DRM_NRTmeta.dcf
mmfenh/advancedaudiocontroller/tsrc/advancedaudiocontrollertestmodule/AudioToneTestModule/data/mmc/metadata/DRM_NRTmeta.dcf
mmfenh/profilesettingsmonitor/inc/ProfileSettingsMonitorServerImpl.h
mmfenh/profilesettingsmonitor/src/ProfileSettingsMonitorServerImpl.cpp
mmmw_info/mmmw_metadata/mmmw_metadata.mrp
mmmw_plat/openmax_al_api/tsrc/openmaxaltestmodule/conf/openmaxaltestmodule_radioitf.cfg
mmmw_plat/openmax_al_api/tsrc/openmaxaltestmodule/src/radio/openmaxalradioitftests.cpp
mmmw_plat/system_tone_service_api/tsrc/conf/systemtoneservicestif.cfg
mmmw_plat/system_tone_service_api/tsrc/inc/systemtoneservicestif.h
mmmw_plat/telephony_multimedia_service_api/tsrc/TmsAudioServicesTestClass/group/TmsAudioServicesTestClass.pkg
mmmw_plat/telephony_multimedia_service_api/tsrc/TmsAudioServicesTestClass/sis/TmsAudioServicesTestClass.sis
mmmw_plat/telephony_multimedia_service_api/tsrc/TmsAudioServicesTestClass/sis/TmsAudioServicesTestClass.sisx
mmmw_plat/telephony_multimedia_service_api/tsrc/TmsAudioServicesTestClass/src/TmsAudioServicesTestClassBlocks.cpp
mmserv/radioutility/radio_utility/stub/bwins/Radio_Utility_Stubu.def
mmserv/radioutility/radio_utility/stub/eabi/Radio_Utility_Stubu.def
mmserv/radioutility/radio_utility/stub/group/Radio_Utility_Stub.mmp
mmserv/radioutility/radio_utility/stub/group/bld.inf
mmserv/radioutility/radio_utility/stub/rom/Radio_Utility_Stub.iby
mmserv/radioutility/radio_utility/stub/src/StubRadioFmTunerUtilityBody.cpp
mmserv/radioutility/radio_utility/stub/src/StubRadioPlayerUtilityBody.cpp
mmserv/radioutility/radio_utility/stub/src/StubRadioRdsUtilityBody.cpp
mmserv/radioutility/radioserver/Session/stub/bwins/RadioSession_Stubu.def
mmserv/radioutility/radioserver/Session/stub/eabi/RadioSession_Stubu.def
mmserv/radioutility/radioserver/Session/stub/group/RadioSession_Stub.mmp
mmserv/radioutility/radioserver/Session/stub/group/bld.inf
mmserv/radioutility/radioserver/Session/stub/src/RadioStubManager.h
mmserv/radioutility/radioserver/Session/stub/src/StubRadioSession.cpp
mmserv/radioutility/radioserver/Session/stub/src/StubRadioSession.h
mmserv/radioutility/tsrc/bld.inf
mmserv/sts/rom/mmmwsystemtoneservice.iby
mmserv/sts/sts/src/stsplayer.cpp
mmserv/sts/stsserver/group/stsserver.mmp
mmserv/tms/rom/tms.iby
mmserv/tms/tmscallserver/eabi/tmscallserver.def
mmserv/tms/tmscallserver/src/tmscallipadpt.cpp
mmserv/tms/tmscallserver/src/tmscsdevsound.cpp
mmserv/tms/tmsimpl/group/tmsimpl.mmp
mmserv/tms/tmsimpl/src/tmsstreambodyimpl.cpp
mmserv/tms/tmsserver/inc/tmsrtplayer.h
mmserv/tms/tmsserver/src/tmsrtplayer.cpp
mmserv/tms/tmsserver/src/tmsserver.cpp
mmserv/voipaudioservices/VoIPIntfc/src/VoIPUtilityFactoryImpl.cpp
mmserv/voipaudioservices/VoIPServer/inc/VoIPQueueHandlerSrv.h
mmserv/voipaudioservices/VoIPServer/inc/VoIPServerThread.h
package_definition.xml
package_map.xml
--- a/khronosfws/openmax_al/src/adptcommon/xaframeworkmgr.c	Fri Jul 23 17:29:03 2010 -0500
+++ b/khronosfws/openmax_al/src/adptcommon/xaframeworkmgr.c	Fri Aug 06 16:55:00 2010 -0500
@@ -62,9 +62,6 @@
 static FWMgrBool tokenizeTag(FWMgrTagType tagType, const char* buffer,
         FrameworkMap **node);
 
-/* Crates a default rules config file */
-static int createDefaultRules(const char * filename);
-
 /* Global functions from header file */
 
 /* FrameworkMap* XAFrameworkMgr_CreateFrameworkMap
--- a/khronosfws/openmax_al/src/mmf_adaptation/cmmfradiobackendengine.cpp	Fri Jul 23 17:29:03 2010 -0500
+++ b/khronosfws/openmax_al/src/mmf_adaptation/cmmfradiobackendengine.cpp	Fri Aug 06 16:55:00 2010 -0500
@@ -86,7 +86,7 @@
  		iRadioPlayerUtility = &iRadioUtility->RadioPlayerUtilityL( *this ); 
  	}   
  	 
-//	SetForceMonoFlag();
+	SetForceMonoFlag();
 	iDefaultFrequency = RADIO_DEFAULT_FREQ;
 	iDefaultFreqRange = (TFmRadioFrequencyRange)RADIO_DEFAULT_FREQ_RANGE;  
 	iDefaultMinFreq = RADIO_DEFAULT_MIN_FREQ;
@@ -104,6 +104,7 @@
 void CMMFRadioBackendEngine::SetFrequency(TInt aFreq)
 {
   DEBUG_API_A1("CMMFRadioBackendEngine::SetFrequency: %d", aFreq);	
+  
 	if (iFmTunerUtility)
  	{
   	iFmTunerUtility->SetFrequency(aFreq);
@@ -167,17 +168,17 @@
 TInt CMMFRadioBackendEngine::GetFreqRange(TFmRadioFrequencyRange& aRange)
 {
 	TInt ret = KErrNotFound;
-	TInt minFreq = 0;
-	TInt maxFreq = 0;
+	TInt minFreq;
+	TInt maxFreq;
 		
  	if (iFmTunerUtility)
  	{
  		ret = iFmTunerUtility->GetFrequencyRange((TFmRadioFrequencyRange&)aRange, (TInt&)minFreq, (TInt&)maxFreq);
  		if (ret != KErrNone)
  		{
- 			aRange = iDefaultFreqRange;
  			minFreq = iDefaultMinFreq;
  			maxFreq = iDefaultMaxFreq;
+ 			aRange = iDefaultFreqRange;
  			ret = KErrNone;
  		}
  	}	
@@ -259,7 +260,7 @@
 		ret = iFmTunerUtility->GetForcedMonoReception(forceMono);
 		if (ret == KErrNotReady)
 		{
-			aForcedMono = XA_STEREOMODE_STEREO; // Radio Utility Default value
+			aForcedMono = XA_STEREOMODE_AUTO; // Radio Utility Default value
 			return KErrNone;
 		}
 	}		 
@@ -298,9 +299,9 @@
 TInt CMMFRadioBackendEngine::ForceMonoReception(XAuint32 aForcedMono)
 {
 	TInt ret = KErrNotFound;
-	TBool currentMode;
+	XAuint32 currentMode;
 	
-	ret = GetForcedMonoReception((XAuint32&)currentMode);
+	ret = GetForcedMonoReception(currentMode);
 	if (ret != XA_RESULT_SUCCESS)
 		return ret;
 		
@@ -706,9 +707,9 @@
 		return ((CMMFRadioBackendEngine*)(context))->GetFreqRange((TFmRadioFrequencyRange&)*range); 			
 	}
     
-	XAresult  get_freq_range_properties(void* context, XAuint8 range, XAuint32* aMinFreq, XAuint32* aMaxFreq)
+	XAresult  get_freq_range_properties(void* context, XAuint8 aRange, XAuint32* aMinFreq, XAuint32* aMaxFreq)
 	{
-		return ((CMMFRadioBackendEngine*)(context))->GetFreqRangeProperties((TFmRadioFrequencyRange&)range, (TInt&) *aMinFreq, (TInt&) *aMaxFreq); 		
+		return ((CMMFRadioBackendEngine*)(context))->GetFreqRangeProperties((TFmRadioFrequencyRange&) aRange, (TInt&) *aMinFreq, (TInt&) *aMaxFreq); 		
 	}   
     
 	XAresult  get_max_volume(void* context, XAmillibel* maxVol)
--- a/khronosfws/openmax_al/src/mmf_adaptation/xaradioitfadaptation.c	Fri Jul 23 17:29:03 2010 -0500
+++ b/khronosfws/openmax_al/src/mmf_adaptation/xaradioitfadaptation.c	Fri Aug 06 16:55:00 2010 -0500
@@ -70,7 +70,7 @@
 
 /*
  * XAresult XARadioItfAdapt_GetFreqRangeProperties(XAAdaptationMMFCtx *bCtx,
- *                                                 XAuint8 * pRange,
+ *                                                 XAuint8 range,
  *                                                 XAuint32 * pMinFreq,
  *                                                 XAuint32 * pMaxFreq)
  */
--- a/khronosfws/openmax_al/src/radio/xaradioitf.c	Fri Jul 23 17:29:03 2010 -0500
+++ b/khronosfws/openmax_al/src/radio/xaradioitf.c	Fri Aug 06 16:55:00 2010 -0500
@@ -95,7 +95,6 @@
     XAresult ret = XA_RESULT_SUCCESS;
     XARadioItfImpl* impl = GetImpl(self);
     DEBUG_API("->XARadioItfImpl_GetFreqRange");
-    XA_IMPL_THREAD_SAFETY_ENTRY(XATSRadio);
 
     if(!impl || !pRange)
     {
@@ -108,7 +107,6 @@
 
     ret = XARadioItfAdapt_GetFreqRange(pRange);
 
-    XA_IMPL_THREAD_SAFETY_EXIT(XATSRadio);
     DEBUG_API("<-XARadioItfImpl_GetFreqRange");
     return ret;
 }
@@ -147,7 +145,7 @@
 
 /**
  * XAresult XARadioItfImpl_GetFreqRangeProperties(XARadioItf self,
- *                                                XAuint8 range,
+ *                                                XAuint8  range,
  *                                                XAuint32 * pMinFreq,
  *                                                XAuint32 * pMaxFreq,
  *                                                XAuint32 * pFreqInterval)
@@ -155,7 +153,7 @@
  *              modulation of the given frequency range.
  **/
 XAresult XARadioItfImpl_GetFreqRangeProperties(XARadioItf self,
-                                               XAuint8 range,
+                                               XAuint8  range,
                                                XAuint32 * pMinFreq,
                                                XAuint32 * pMaxFreq,
                                                XAuint32 * pFreqInterval)
@@ -167,21 +165,9 @@
    *pFreqInterval = FREQINTERVAL;   
 		    
     DEBUG_API("->XARadioItfImpl_GetFreqRangeProperties");
-    XA_IMPL_THREAD_SAFETY_ENTRY(XATSRadio);
 
     if(!impl || !pMinFreq || !pMaxFreq || !pFreqInterval)
     {
-        XA_IMPL_THREAD_SAFETY_EXIT(XATSRadio);
-        /* invalid parameter */
-        DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
-        DEBUG_API("<-XARadioItfImpl_GetFreqRangeProperties");
-        return XA_RESULT_PARAMETER_INVALID;
-    }
-    ret = XARadioItfAdapt_IsFreqRangeSupported( range, &isSupported );
-
-    if (isSupported != XA_BOOLEAN_TRUE || ret != XA_RESULT_SUCCESS)
-    {
-        XA_IMPL_THREAD_SAFETY_EXIT(XATSRadio);
         /* invalid parameter */
         DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
         DEBUG_API("<-XARadioItfImpl_GetFreqRangeProperties");
@@ -191,7 +177,6 @@
     ret = XARadioItfAdapt_GetFreqRangeProperties( (XAAdaptationMMFCtx*)impl->adapCtx,
             range, pMinFreq, pMaxFreq );
 
-    XA_IMPL_THREAD_SAFETY_EXIT(XATSRadio);
     DEBUG_API("<-XARadioItfImpl_GetFreqRangeProperties");
     return ret;
 }
@@ -207,6 +192,10 @@
 XAresult XARadioItfImpl_SetFrequency(XARadioItf self, XAuint32 freq)
 {
     XAresult ret = XA_RESULT_SUCCESS;
+    XAuint8 range = 1; // Default to EuroAmerica
+    XAuint32 minFreq;
+    XAuint32 maxFreq;
+   	XAuint32 freqInterval;
         
     XARadioItfImpl* impl = GetImpl(self);
     DEBUG_API("->XARadioItfImpl_SetFrequency");
@@ -220,9 +209,23 @@
         return XA_RESULT_PARAMETER_INVALID;
     }
     
- 
-
-    ret = XARadioItfAdapt_SetFrequency( (XAAdaptationMMFCtx*)impl->adapCtx, freq );
+    // Check for valid entries: 
+ 		ret = XARadioItfImpl_GetFreqRangeProperties(self, range, &minFreq, &maxFreq, &freqInterval);   
+    if (ret != XA_RESULT_SUCCESS)
+    {
+    	XA_IMPL_THREAD_SAFETY_EXIT(XATSRadio);
+    	DEBUG_API("<-XARadioItfImpl_SetFrequency");    	
+    	return ret;
+    }		
+    
+    if ( (freq < minFreq) || (freq > maxFreq) )
+    {
+    	XA_IMPL_THREAD_SAFETY_EXIT(XATSRadio);
+    	DEBUG_API("<-XARadioItfImpl_SetFrequency");    	
+    	return XA_RESULT_PARAMETER_INVALID;
+    }	  
+           
+   	ret = XARadioItfAdapt_SetFrequency( (XAAdaptationMMFCtx*)impl->adapCtx, freq );
 
     XA_IMPL_THREAD_SAFETY_EXIT(XATSRadio);
     DEBUG_API("<-XARadioItfImpl_SetFrequency");
--- a/mmfenh/advancedaudiocontroller/audiocontrollerpluginsvariant/rom/AudioControllerPluginsVariant.iby	Fri Jul 23 17:29:03 2010 -0500
+++ b/mmfenh/advancedaudiocontroller/audiocontrollerpluginsvariant/rom/AudioControllerPluginsVariant.iby	Fri Aug 06 16:55:00 2010 -0500
@@ -35,6 +35,9 @@
 file=ABI_DIR\BUILD_DIR\3GPAudioMetaDataComposer.dll             SHARED_LIB_DIR\3GPAudioMetaDataComposer.dll
 #endif
 
+//For Wav Controller
+ECOM_PLUGIN(mmfaudiocontroller.dll,101f55bf.rsc)
+
 //For 3GP
 ECOM_PLUGIN(3GPAudioPlayControllerPlugin.DLL,3GPAudioPlayControllerPlugin.rsc)
 ECOM_PLUGIN(3GPAudioPlayControllerRecognizer.DLL,3GPAudioPlayControllerRecognizer.rsc)
--- a/mmfenh/profilesettingsmonitor/inc/ProfileSettingsMonitorServerImpl.h	Fri Jul 23 17:29:03 2010 -0500
+++ b/mmfenh/profilesettingsmonitor/inc/ProfileSettingsMonitorServerImpl.h	Fri Aug 06 16:55:00 2010 -0500
@@ -29,6 +29,7 @@
 #include <MProEngActiveProfileObserver.h>
 #include <MProEngProfileActivationObserver.h>
 #include <MProEngNotifyHandler.h>
+#include <MProEngTones.h>
 #include <MProEngToneSettings.h>
 #include <e32property.h>
 #include <GlobalAudioSettingsPSKeys.h>
@@ -36,6 +37,7 @@
 #include <ProfileEngineDomainCRKeys.h>
 #include <ProfilesVariant.hrh>
 #include <e32capability.h>
+#include <GlobalAudioSettings.h>
 class CProfileSettingsMonitorServerImpl : 
 public CBase, 
 public MProEngProfileActivationObserver, 
@@ -62,6 +64,8 @@
 	// Initializes publish and subscribe keys used for
 	// audio clients list implementation
 	void InitializeAudioClientsListPSKeysL();
+	void CMapGASRingingType(TProfileRingingType aRingingType);
+	void CMapGASKeypadVolume(TProfileKeypadVolume aKeypadVolume);
 
 private:
     MProEngEngine* iEngine;
@@ -72,11 +76,27 @@
     TBool iSilentProfile;
     TBool iVibra;
     TBool iPublicSilence;
+    HBufC* iMessageToneName;
+    HBufC* iEmailToneName;
+    HBufC* iVideoCallToneName;
+    HBufC* iRingingTone1Name;
+    HBufC* iRingingTone2Name;
+  
+    CGlobalAudioSettings::TGASRingingType iGASRingingType;
+  
+    CGlobalAudioSettings::TGASKeypadVolume iGASKeypadVolume;
     RProperty iWarningTonesProperty;
     RProperty iMessagingTonesProperty;
     RProperty iSilentProfileProperty;
     RProperty iVibraProperty;
     RProperty iPublicSilenceProperty;
+    RProperty iMessageToneNameProperty;
+    RProperty iEmailToneNameProperty;
+    RProperty iRingingTypeProperty;
+    RProperty iVideoCallToneNameProperty;
+    RProperty iRingingTone1NameProperty;
+    RProperty iRingingTone2NameProperty;
+    RProperty iKeypadVolumeProperty;
 	};
 
 #endif
--- a/mmfenh/profilesettingsmonitor/src/ProfileSettingsMonitorServerImpl.cpp	Fri Jul 23 17:29:03 2010 -0500
+++ b/mmfenh/profilesettingsmonitor/src/ProfileSettingsMonitorServerImpl.cpp	Fri Aug 06 16:55:00 2010 -0500
@@ -53,6 +53,52 @@
 	iVibraProperty.Close();
 	RProperty::Delete(KGASPSUidGlobalAudioSettings, KGASVibra);
 	
+	iRingingTypeProperty.Close();
+	RProperty::Delete(KGASPSUidGlobalAudioSettings,KGASRingingType);
+	
+	iMessageToneNameProperty.Close();
+	RProperty::Delete(KGASPSUidGlobalAudioSettings, KGASMessageToneName);
+	
+	iEmailToneNameProperty.Close();
+	RProperty::Delete(KGASPSUidGlobalAudioSettings,KGASEmailToneName);
+	
+	iVideoCallToneNameProperty.Close();
+	RProperty::Delete(KGASPSUidGlobalAudioSettings,KGASVideoCallToneName);
+	
+	iRingingTone1NameProperty.Close();
+	RProperty::Delete(KGASPSUidGlobalAudioSettings,KGASRingingTone1Name);
+	
+	iRingingTone2NameProperty.Close();
+    RProperty::Delete(KGASPSUidGlobalAudioSettings,KGASRingingTone2Name);
+	
+	iKeypadVolumeProperty.Close();
+	RProperty::Delete(KGASPSUidGlobalAudioSettings,KGASKeypadToneVolume);
+	
+	if(iMessageToneName)
+	  {
+	  delete iMessageToneName;
+	  iMessageToneName=NULL;
+	  }
+	if(iEmailToneName)
+	  {
+	  delete iEmailToneName;
+	  iEmailToneName=NULL;
+	  }
+	if(iVideoCallToneName)
+	  {
+	  delete iVideoCallToneName;
+	  iVideoCallToneName=NULL;
+	  }
+	if(iRingingTone1Name)
+	  {
+	  delete iRingingTone1Name;
+	  iRingingTone1Name=NULL;
+	  }
+	if(iRingingTone2Name)
+	   {
+	   delete iRingingTone2Name;
+	   iRingingTone2Name=NULL;
+	   }
 	// Release profile engine resources
 	if ( iEngine )
 	    {
@@ -92,7 +138,25 @@
     iWarningTones = settings.WarningAndGameTones();
     iMessagingTones = !( currentProfile->IsSilent() );
     iVibra = settings.VibratingAlert();
+  
+    CMapGASRingingType( settings.RingingType());
+    
     //CleanupStack::PopAndDestroy(currentProfile);
+   
+    MProEngTones& profileTones=currentProfile->ProfileTones();
+    
+    iMessageToneName=profileTones.MessageAlertTone().AllocL();
+   
+    iEmailToneName=profileTones.EmailAlertTone().AllocL();
+    
+    iVideoCallToneName=profileTones.VideoCallRingingTone().AllocL();
+    
+    iRingingTone1Name=profileTones.RingingTone1().AllocL();
+    
+    iRingingTone2Name=profileTones.RingingTone2().AllocL();
+        
+  
+    CMapGASKeypadVolume(settings.KeypadVolume());
     
     // Get PublicSilence from CenRep
     TInt featureBitmask( 0 );     
@@ -182,6 +246,103 @@
                                                 KGASPSUidGlobalAudioSettings,
                                                 KGASPublicSilence,
                                                 iPublicSilence));
+    
+    
+    
+    User::LeaveIfError(RProperty::Define(
+                                    KGASPSUidGlobalAudioSettings,
+                                    KGASRingingType,
+                                    RProperty::EInt,
+                                    read,
+                                    write));
+    User::LeaveIfError(iRingingTypeProperty.Attach(
+                                              KGASPSUidGlobalAudioSettings,
+                                              KGASRingingType));
+    User::LeaveIfError(iRingingTypeProperty.Set(
+                                              KGASPSUidGlobalAudioSettings,
+                                              KGASRingingType,
+                                              iGASRingingType));
+    User::LeaveIfError(RProperty::Define(
+                                    KGASPSUidGlobalAudioSettings,
+                                    KGASMessageToneName,
+                                    RProperty::EText,
+                                    read,
+                                    write));
+    User::LeaveIfError(iMessageToneNameProperty.Attach(
+                                                KGASPSUidGlobalAudioSettings,
+                                                KGASMessageToneName));
+    User::LeaveIfError(iMessageToneNameProperty.Set(
+                                                KGASPSUidGlobalAudioSettings,
+                                                KGASMessageToneName,
+                                                *iMessageToneName));
+    
+    User::LeaveIfError(RProperty::Define(
+                                    KGASPSUidGlobalAudioSettings,
+                                    KGASEmailToneName,
+                                    RProperty::EText,
+                                    read,
+                                    write));
+    User::LeaveIfError(iEmailToneNameProperty.Attach(
+                                               KGASPSUidGlobalAudioSettings,
+                                               KGASEmailToneName));
+    User::LeaveIfError(iEmailToneNameProperty.Set(
+                                               KGASPSUidGlobalAudioSettings,
+                                               KGASEmailToneName,
+                                               *iEmailToneName));
+    User::LeaveIfError(RProperty::Define(
+                                    KGASPSUidGlobalAudioSettings,
+                                    KGASVideoCallToneName,
+                                    RProperty::EText,
+                                    read,
+                                    write));
+    User::LeaveIfError(iVideoCallToneNameProperty.Attach(
+                                               KGASPSUidGlobalAudioSettings,
+                                               KGASVideoCallToneName));
+    User::LeaveIfError(iVideoCallToneNameProperty.Set(
+                                               KGASPSUidGlobalAudioSettings,
+                                               KGASVideoCallToneName,
+                                               *iVideoCallToneName));
+        
+    User::LeaveIfError(RProperty::Define(
+                                    KGASPSUidGlobalAudioSettings,
+                                    KGASRingingTone1Name,
+                                    RProperty::EText,
+                                    read,
+                                    write));
+    User::LeaveIfError(iRingingTone1NameProperty.Attach(
+                                               KGASPSUidGlobalAudioSettings,
+                                               KGASRingingTone1Name));
+    User::LeaveIfError(iRingingTone1NameProperty.Set(
+                                               KGASPSUidGlobalAudioSettings,
+                                               KGASRingingTone1Name,
+                                               *iRingingTone1Name));
+    User::LeaveIfError(RProperty::Define(
+                                    KGASPSUidGlobalAudioSettings,
+                                    KGASRingingTone2Name,
+                                    RProperty::EText,
+                                    read,
+                                    write));
+    User::LeaveIfError(iRingingTone2NameProperty.Attach(
+                                               KGASPSUidGlobalAudioSettings,
+                                               KGASRingingTone2Name));
+    User::LeaveIfError(iRingingTone2NameProperty.Set(
+                                               KGASPSUidGlobalAudioSettings,
+                                               KGASRingingTone2Name,
+                                               *iRingingTone2Name));
+    
+    User::LeaveIfError(RProperty::Define(
+                                    KGASPSUidGlobalAudioSettings,
+                                    KGASKeypadToneVolume,
+                                    RProperty::EInt,
+                                    read,
+                                    write));
+    User::LeaveIfError(iKeypadVolumeProperty.Attach(
+                                               KGASPSUidGlobalAudioSettings,
+                                               KGASKeypadToneVolume));
+    User::LeaveIfError(iKeypadVolumeProperty.Set(
+                                               KGASPSUidGlobalAudioSettings,
+                                               KGASKeypadToneVolume,
+                                               iGASKeypadVolume));
 
     //Stream Gain Control
     TInt status = RProperty::Define(
@@ -321,6 +482,74 @@
                                                 KGASVibra,
                                                 iVibra));
             }
+        if(iGASRingingType != settings.RingingType())
+            {
+            
+             CMapGASRingingType(settings.RingingType());
+            
+             User::LeaveIfError(iRingingTypeProperty.Set(
+                                                         KGASPSUidGlobalAudioSettings,
+                                                         KGASRingingType,
+                                                         iGASRingingType));
+             
+            }
+        MProEngTones &profileTones=currentProfile->ProfileTones();
+        if(iMessageToneName->Compare(profileTones.MessageAlertTone())!= 0)
+            {
+              delete iMessageToneName;
+              iMessageToneName=NULL;
+              iMessageToneName=profileTones.MessageAlertTone().AllocL();
+              User::LeaveIfError(iMessageToneNameProperty.Set(KGASPSUidGlobalAudioSettings,
+                                                              KGASMessageToneName,
+                                                              *iMessageToneName));
+            }
+        if(iEmailToneName->Compare(profileTones.EmailAlertTone())!= 0)
+            {
+              delete iEmailToneName;
+              iEmailToneName=NULL;
+              iEmailToneName=profileTones.EmailAlertTone().AllocL();
+              User::LeaveIfError(iEmailToneNameProperty.Set(KGASPSUidGlobalAudioSettings,
+                                                                            KGASEmailToneName,
+                                                                            *iEmailToneName));
+            }
+        if(iVideoCallToneName->Compare(profileTones.VideoCallRingingTone())!=0)
+            {
+              delete iVideoCallToneName;
+              iVideoCallToneName=NULL;
+              iVideoCallToneName=profileTones.VideoCallRingingTone().AllocL();
+              User::LeaveIfError(iVideoCallToneNameProperty.Set(KGASPSUidGlobalAudioSettings,
+                                                                                          KGASVideoCallToneName,
+                                                                                          *iVideoCallToneName));
+              
+            }
+        if(iRingingTone1Name->Compare(profileTones.RingingTone1())!=0)
+            {
+          delete iRingingTone1Name;
+          iRingingTone1Name=NULL;
+          iRingingTone1Name=profileTones.RingingTone1().AllocL();
+          User::LeaveIfError(iRingingTone1NameProperty.Set(KGASPSUidGlobalAudioSettings,
+                                                                                      KGASRingingTone1Name,
+                                                                                      *iRingingTone1Name));
+            }
+        if(iRingingTone2Name->Compare(profileTones.RingingTone2())!=0)
+                    {
+                   delete iRingingTone2Name;
+                  iRingingTone2Name=NULL;
+                  iRingingTone2Name=profileTones.RingingTone2().AllocL();
+                  User::LeaveIfError(iRingingTone2NameProperty.Set(KGASPSUidGlobalAudioSettings,
+                                                                                              KGASRingingTone2Name,
+                                                                                              *iRingingTone2Name));
+                    }
+        if(iGASKeypadVolume!=settings.KeypadVolume())
+            {
+              
+              CMapGASKeypadVolume(settings.KeypadVolume());
+              User::LeaveIfError(iKeypadVolumeProperty.Set(KGASPSUidGlobalAudioSettings,
+                                                                                        KGASKeypadToneVolume,
+                                                                                        iGASKeypadVolume));
+              
+              
+            }
         CleanupStack::PopAndDestroy(currentProfile);
         }
 #ifdef _DEBUG
@@ -346,6 +575,7 @@
     CleanupReleasePushL(*currentProfile);
     
     MProEngToneSettings& settings = currentProfile->ToneSettings();
+    MProEngTones& profileTones=currentProfile->ProfileTones();
     if(iWarningTones != settings.WarningAndGameTones())
         {
         iWarningTones = settings.WarningAndGameTones();
@@ -371,6 +601,76 @@
                                             KGASVibra,
                                             iVibra));
         }
+    if(iGASRingingType != settings.RingingType())
+        {
+        
+         CMapGASRingingType(settings.RingingType());
+         
+         User::LeaveIfError(iRingingTypeProperty.Set(
+                                                     KGASPSUidGlobalAudioSettings,
+                                                     KGASRingingType,
+                                                     iGASRingingType));
+        }
+    if(iMessageToneName->Compare(profileTones.MessageAlertTone())!= 0)
+        {
+          delete iMessageToneName;
+          iMessageToneName=NULL;
+          iMessageToneName=profileTones.MessageAlertTone().AllocL();
+          
+          User::LeaveIfError(iMessageToneNameProperty.Set(KGASPSUidGlobalAudioSettings,
+                                                          KGASMessageToneName,
+                                                          *iMessageToneName));
+        }
+    
+    if(iEmailToneName->Compare(profileTones.EmailAlertTone())!= 0)
+        {
+          delete iEmailToneName;
+          iEmailToneName=NULL;
+          iEmailToneName=profileTones.EmailAlertTone().AllocL();
+          User::LeaveIfError(iEmailToneNameProperty.Set(KGASPSUidGlobalAudioSettings,
+                                                                        KGASEmailToneName,
+                                                                        *iEmailToneName));
+        }
+    if(iVideoCallToneName->Compare(profileTones.VideoCallRingingTone())!=0)
+        {
+          delete iVideoCallToneName;
+          iVideoCallToneName=NULL;
+          iVideoCallToneName=profileTones.VideoCallRingingTone().AllocL();
+          User::LeaveIfError(iVideoCallToneNameProperty.Set(KGASPSUidGlobalAudioSettings,
+                                                                                      KGASVideoCallToneName,
+                                                                                      *iVideoCallToneName));
+          
+        }
+    if(iRingingTone1Name->Compare(profileTones.RingingTone1())!=0)
+        {
+         delete iRingingTone1Name;
+         iRingingTone1Name=NULL;
+         iRingingTone1Name=profileTones.RingingTone1().AllocL();
+         User::LeaveIfError(iRingingTone1NameProperty.Set(KGASPSUidGlobalAudioSettings,
+                                                                                  KGASRingingTone1Name,
+                                                                                  *iRingingTone1Name));
+         
+        }
+    if(iRingingTone2Name->Compare(profileTones.RingingTone2())!=0)
+        {
+          delete iRingingTone2Name;
+          iRingingTone2Name=NULL;
+          iRingingTone2Name=profileTones.RingingTone2().AllocL();
+          User::LeaveIfError(iRingingTone2NameProperty.Set(KGASPSUidGlobalAudioSettings,
+                                                                                      KGASRingingTone2Name,
+                                                                                      *iRingingTone2Name));
+         
+            }
+    if(iGASKeypadVolume!=settings.KeypadVolume())
+        {
+         
+          CMapGASKeypadVolume( settings.KeypadVolume());
+          User::LeaveIfError(iKeypadVolumeProperty.Set(KGASPSUidGlobalAudioSettings,
+                                                                                                KGASKeypadToneVolume,
+                                                                                                iGASKeypadVolume));
+          
+          
+        }
     CleanupStack::PopAndDestroy(currentProfile);
     }
 
@@ -378,6 +678,39 @@
     {
     DEB_TRACE0(_L("CMyProfileNameArrayObserver::HandleProfileActivationNotificationError"));
 	}
-
+void CProfileSettingsMonitorServerImpl::CMapGASRingingType(TProfileRingingType aRingingType)
+    {
+    switch(aRingingType)
+            {
+            case EProfileRingingTypeRinging :   iGASRingingType=CGlobalAudioSettings::EGASRingingTypeRinging;
+                                                 break;
+               
+            case EProfileRingingTypeAscending:iGASRingingType=CGlobalAudioSettings::EGASRingingTypeAscending;
+                                               break;
+              
+            case EProfileRingingTypeRingingOnce :iGASRingingType=CGlobalAudioSettings::EGASRingingTypeRingingOnce;
+                                                  break;
+               
+            case EProfileRingingTypeBeepOnce :iGASRingingType=CGlobalAudioSettings::EGASRingingTypeBeepOnce;
+                                              break;
+               
+            case EProfileRingingTypeSilent:iGASRingingType=CGlobalAudioSettings::EGASRingingTypeSilent;
+                                           break;
+            }
+    }
+void CProfileSettingsMonitorServerImpl::CMapGASKeypadVolume(TProfileKeypadVolume aKeypadVolume)
+    {
+     switch(aKeypadVolume)
+         {
+         case  EProfileKeypadVolumeOff  : iGASKeypadVolume=CGlobalAudioSettings::EGASKeypadVolumeOff;
+                                          break;
+         case EProfileKeypadVolumeLevel1 :iGASKeypadVolume=CGlobalAudioSettings::EGASKeypadVolumeLevel1;
+                                          break;
+         case EProfileKeypadVolumeLevel2 :iGASKeypadVolume=CGlobalAudioSettings::EGASKeypadVolumeLevel2;
+                                          break;
+         case  EProfileKeypadVolumeLevel3 :iGASKeypadVolume=CGlobalAudioSettings::EGASKeypadVolumeLevel3;
+                                           break;
+         }
+    }
 // End of file
 	
--- a/mmmw_info/mmmw_metadata/mmmw_metadata.mrp	Fri Jul 23 17:29:03 2010 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,6 +0,0 @@
-component           mmmw_metadata
-source   \sf\mw\mmmw\mmmw_info\mmmw_metadata 
-source   \sf\mw\mmmw\package_definition.xml
-source   \sf\mw\mmmw\distribution.policy.s60
-notes_source      \component_defs\release.src
-ipr T 
--- a/mmmw_plat/openmax_al_api/tsrc/openmaxaltestmodule/conf/openmaxaltestmodule_radioitf.cfg	Fri Jul 23 17:29:03 2010 -0500
+++ b/mmmw_plat/openmax_al_api/tsrc/openmaxaltestmodule/conf/openmaxaltestmodule_radioitf.cfg	Fri Aug 06 16:55:00 2010 -0500
@@ -739,13 +739,9 @@
 ALImpl al_objitf_GetInterface 4 XA_IID_PLAY
 ALImpl al_playitf_RegisterCallback
 
-request Event_XA_RADIO_EVENT_FREQUENCY_CHANGED
-allownextresult -5
+allownextresult -17
 ALImpl al_radioitf_SetFrequency 109000000
 																
-wait Event_XA_RADIO_EVENT_FREQUENCY_CHANGED
-release Event_XA_RADIO_EVENT_FREQUENCY_CHANGED
-
 ALImpl al_objitf_Destroy MO_RADIO
 ALImpl al_objitf_Destroy MO_PLAYER
 ALImpl al_objitf_Destroy MO_ENGINE
--- a/mmmw_plat/openmax_al_api/tsrc/openmaxaltestmodule/src/radio/openmaxalradioitftests.cpp	Fri Jul 23 17:29:03 2010 -0500
+++ b/mmmw_plat/openmax_al_api/tsrc/openmaxaltestmodule/src/radio/openmaxalradioitftests.cpp	Fri Aug 06 16:55:00 2010 -0500
@@ -83,6 +83,17 @@
     status = aItem.GetNextInt(freqRange);
     RET_ERR_IF_ERR(status);
 
+		if (m_PlayItf)
+        {
+        status = (*m_PlayItf)->SetPlayState(
+                m_PlayItf, XA_PLAYSTATE_PLAYING);              
+        }
+    else
+        {
+        status = KErrNotFound;
+        return status;
+        } 			
+			
     if(m_RadioItf)
         {
         status = (*m_RadioItf)->SetFreqRange(
@@ -185,12 +196,39 @@
     {
     TInt status(KErrNone);
     TInt freq;
+    XAuint32 currentFreq;    
     status = aItem.GetNextInt(freq); 
-    RET_ERR_IF_ERR(status);             
+    RET_ERR_IF_ERR(status);   
+    
+		if (m_PlayItf)
+        {
+        status = (*m_PlayItf)->SetPlayState(
+                m_PlayItf, XA_PLAYSTATE_PLAYING);              
+        }
+    else
+        {
+        status = KErrNotFound;
+        return status;
+        } 
+        
     if (m_RadioItf)
         {
-        status = (*m_RadioItf)->SetFrequency(
-                m_RadioItf, freq); 
+        	status = (*m_RadioItf)->GetFrequency(m_RadioItf, &currentFreq); 
+       		if (status != KErrNone)
+       		{	
+       			status = KErrCompletion;  
+       			return status;
+       		}             
+        }
+    else
+        {
+        status = KErrNotFound;
+        return status;
+        }          
+                      
+    if (m_RadioItf)
+        {
+        status = (*m_RadioItf)->SetFrequency(m_RadioItf, freq); 
        	if (status != KErrNone)
        		status = KErrCompletion;               
         }
@@ -444,10 +482,10 @@
         XARadioItf 	caller,
         XAuint32   	event
 )
-{
-   
+{  		
+    
     switch (event)
-        {
+        {                   	
         case XA_RADIO_EVENT_ANTENNA_STATUS_CHANGED:
             {
             TEventIf antennaStatusEvent( TEventIf::ESetEvent, _L("Event_XA_RADIO_EVENT_ANTENNA_STATUS_CHANGED:") );
--- a/mmmw_plat/system_tone_service_api/tsrc/conf/systemtoneservicestif.cfg	Fri Jul 23 17:29:03 2010 -0500
+++ b/mmmw_plat/system_tone_service_api/tsrc/conf/systemtoneservicestif.cfg	Fri Aug 06 16:55:00 2010 -0500
@@ -273,4 +273,4 @@
 STSSTIF StopAlarm True
 STSSTIF Delete
 delete STSSTIF
-[Endtest]
\ No newline at end of file
+[Endtest]
--- a/mmmw_plat/system_tone_service_api/tsrc/inc/systemtoneservicestif.h	Fri Jul 23 17:29:03 2010 -0500
+++ b/mmmw_plat/system_tone_service_api/tsrc/inc/systemtoneservicestif.h	Fri Aug 06 16:55:00 2010 -0500
@@ -147,6 +147,7 @@
        virtual void HandleEvent();
     	
     	
+    	
     	  
     	  // Data
         TPlayState            iPlayState;
--- a/mmmw_plat/telephony_multimedia_service_api/tsrc/TmsAudioServicesTestClass/group/TmsAudioServicesTestClass.pkg	Fri Jul 23 17:29:03 2010 -0500
+++ b/mmmw_plat/telephony_multimedia_service_api/tsrc/TmsAudioServicesTestClass/group/TmsAudioServicesTestClass.pkg	Fri Aug 06 16:55:00 2010 -0500
@@ -32,7 +32,7 @@
 "/epoc32/release/armv5/urel/TmsAudioServicesTestClass.dll" - "c:/Sys/Bin/TmsAudioServicesTestClass.dll"
 ; If installation process fails, exclude testframework.ini from the sis file and
 ; copy manually.
-"../../init/TestFramework.ini"-"c:/Testframework/TestFramework.ini"
+;"../../init/TestFramework.ini"-"c:/Testframework/TestFramework.ini"
 "../../init/TmsAudioServicesTestClass.ini"-"c:/Testframework/TmsAudioServicesTestClass.ini"
 "../../Conf/TMSAudioServicesTestClass.cfg"-"c:/Testframework/TMSAudioServicesTestClass.cfg"
 
Binary file mmmw_plat/telephony_multimedia_service_api/tsrc/TmsAudioServicesTestClass/sis/TmsAudioServicesTestClass.sis has changed
Binary file mmmw_plat/telephony_multimedia_service_api/tsrc/TmsAudioServicesTestClass/sis/TmsAudioServicesTestClass.sisx has changed
--- a/mmmw_plat/telephony_multimedia_service_api/tsrc/TmsAudioServicesTestClass/src/TmsAudioServicesTestClassBlocks.cpp	Fri Jul 23 17:29:03 2010 -0500
+++ b/mmmw_plat/telephony_multimedia_service_api/tsrc/TmsAudioServicesTestClass/src/TmsAudioServicesTestClassBlocks.cpp	Fri Aug 06 16:55:00 2010 -0500
@@ -1272,7 +1272,7 @@
             {
             iLog->Log(_L("CTmsAudioServicesTestClass::OpenDownlink - init Downlink"));
             iTmsDnlink->AddObserver(*this, NULL);
-            error = iTmsDnlink->Init();
+            error = iTmsDnlink->Init(4);
             }
 
         if (error != KErrNone)
@@ -1358,7 +1358,7 @@
             {
             iLog->Log(_L("CTmsAudioServicesTestClass::OpenDownlink - init Uplink"));
             iTmsUplink->AddObserver(*this, NULL);
-            error = iTmsUplink->Init();
+            error = iTmsUplink->Init(4);
             }
 
         if (error != KErrNone)
@@ -1460,7 +1460,7 @@
             {
             if ((iUpLinkStatus == INITIALIZED) || (iUpLinkStatus == PAUSED))
                 {
-                iTmsUplink->Start();
+                iTmsUplink->Start(2);
 
                 if (iUpLinkStatus == INITIALIZED)
                     {
@@ -1483,7 +1483,7 @@
             {
             if ((iDnLinkStatus == INITIALIZED) || (iDnLinkStatus == PAUSED))
                 {
-                iTmsDnlink->Start();
+                iTmsDnlink->Start(2);
                 if (iDnLinkStatus == INITIALIZED)
                     {
                     AddExpectedEvent(EFillBuffer, KMediumTimeout);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmserv/radioutility/radio_utility/stub/bwins/Radio_Utility_Stubu.def	Fri Aug 06 16:55:00 2010 -0500
@@ -0,0 +1,73 @@
+EXPORTS
+	?GetAutomaticTrafficAnnouncement@CRadioRdsUtility@@QAEHAAH@Z @ 1 NONAME ; int CRadioRdsUtility::GetAutomaticTrafficAnnouncement(int &)
+	?Close@CRadioRdsUtility@@QAEXXZ @ 2 NONAME ; void CRadioRdsUtility::Close(void)
+	?PlayerState@CRadioPlayerUtility@@QBE?AW4TPlayerState@@XZ @ 3 NONAME ; enum TPlayerState CRadioPlayerUtility::PlayerState(void) const
+	?GetBalance@CRadioPlayerUtility@@QBEHAAH0@Z @ 4 NONAME ; int CRadioPlayerUtility::GetBalance(int &, int &) const
+	?RadioRdsUtilityL@CRadioUtility@@QAEAAVCRadioRdsUtility@@AAVMRadioRdsObserver@@@Z @ 5 NONAME ; class CRadioRdsUtility & CRadioUtility::RadioRdsUtilityL(class MRadioRdsObserver &)
+	?StationSeek@CRadioFmTunerUtility@@QAEXH@Z @ 6 NONAME ; void CRadioFmTunerUtility::StationSeek(int)
+	?CancelStationSeek@CRadioFmTunerUtility@@QAEXXZ @ 7 NONAME ; void CRadioFmTunerUtility::CancelStationSeek(void)
+	?StationSeekByTP@CRadioRdsUtility@@QAEXH@Z @ 8 NONAME ; void CRadioRdsUtility::StationSeekByTP(int)
+	?SetSquelch@CRadioFmTunerUtility@@QAEHH@Z @ 9 NONAME ; int CRadioFmTunerUtility::SetSquelch(int)
+	?GetAutomaticTrafficAnnouncement@CBody@CRadioRdsUtility@@QAEHAAH@Z @ 10 NONAME ; int CRadioRdsUtility::CBody::GetAutomaticTrafficAnnouncement(int &)
+	?GetTrafficProgrammeStatus@CRadioRdsUtility@@QAEHAAH@Z @ 11 NONAME ; int CRadioRdsUtility::GetTrafficProgrammeStatus(int &)
+	?GetMaxSignalStrength@CRadioFmTunerUtility@@QBEHAAH@Z @ 12 NONAME ; int CRadioFmTunerUtility::GetMaxSignalStrength(int &) const
+	?GetProgrammeService@CRadioRdsUtility@@QAEHAAV?$TBuf16@$07@@@Z @ 13 NONAME ; int CRadioRdsUtility::GetProgrammeService(class TBuf16<8> &)
+	?RadioPlayerUtilityL@CRadioUtility@@QAEAAVCRadioPlayerUtility@@AAVMRadioPlayerObserver@@@Z @ 14 NONAME ; class CRadioPlayerUtility & CRadioUtility::RadioPlayerUtilityL(class MRadioPlayerObserver &)
+	?GetStereoMode@CRadioFmTunerUtility@@QBEHAAH@Z @ 15 NONAME ; int CRadioFmTunerUtility::GetStereoMode(int &) const
+	?GetRdsSignalStatus@CRadioRdsUtility@@QBEHAAH@Z @ 16 NONAME ; int CRadioRdsUtility::GetRdsSignalStatus(int &) const
+	?GetRadioTextPlus@CRadioRdsUtility@@QAEHW4TRdsRTplusClass@@AAV?$TBuf16@$0EA@@@@Z @ 17 NONAME ; int CRadioRdsUtility::GetRadioTextPlus(enum TRdsRTplusClass, class TBuf16<64> &)
+	??1CRadioFmTunerUtility@@EAE@XZ @ 18 NONAME ; CRadioFmTunerUtility::~CRadioFmTunerUtility(void)
+	?GetRadioText@CRadioRdsUtility@@QAEHAAV?$TBuf16@$0EA@@@@Z @ 19 NONAME ; int CRadioRdsUtility::GetRadioText(class TBuf16<64> &)
+	?CancelGetPSByTA@CRadioRdsUtility@@QAEXXZ @ 20 NONAME ; void CRadioRdsUtility::CancelGetPSByTA(void)
+	?RequestTunerControl@CRadioFmTunerUtility@@QAEXXZ @ 21 NONAME ; void CRadioFmTunerUtility::RequestTunerControl(void)
+	?GetProgrammeIdentification@CRadioRdsUtility@@QAEHAAH@Z @ 22 NONAME ; int CRadioRdsUtility::GetProgrammeIdentification(int &)
+	?SetBalance@CRadioPlayerUtility@@QAEHHH@Z @ 23 NONAME ; int CRadioPlayerUtility::SetBalance(int, int)
+	?SetFrequency@CRadioFmTunerUtility@@QAEXH@Z @ 24 NONAME ; void CRadioFmTunerUtility::SetFrequency(int)
+	?NotifyRdsDataChange@CRadioRdsUtility@@QAEHVTRdsData@@@Z @ 25 NONAME ; int CRadioRdsUtility::NotifyRdsDataChange(class TRdsData)
+	?CancelSetFrequencyRange@CRadioFmTunerUtility@@QAEXXZ @ 26 NONAME ; void CRadioFmTunerUtility::CancelSetFrequencyRange(void)
+	?GetFreqByPTY@CRadioRdsUtility@@QAEXH@Z @ 27 NONAME ; void CRadioRdsUtility::GetFreqByPTY(int)
+	?GetVolume@CRadioPlayerUtility@@QBEHAAH@Z @ 28 NONAME ; int CRadioPlayerUtility::GetVolume(int &) const
+	?SetVolume@CRadioPlayerUtility@@QAEHH@Z @ 29 NONAME ; int CRadioPlayerUtility::SetVolume(int)
+	?StationSeekByPTY@CRadioRdsUtility@@QAEXHH@Z @ 30 NONAME ; void CRadioRdsUtility::StationSeekByPTY(int, int)
+	?GetCapabilities@CRadioRdsUtility@@QBEHAAVTRdsCapabilities@@@Z @ 31 NONAME ; int CRadioRdsUtility::GetCapabilities(class TRdsCapabilities &) const
+	?CancelRdsStationSeek@CRadioRdsUtility@@QAEXXZ @ 32 NONAME ; void CRadioRdsUtility::CancelRdsStationSeek(void)
+	?CancelGetFreqByTA@CRadioRdsUtility@@QAEXXZ @ 33 NONAME ; void CRadioRdsUtility::CancelGetFreqByTA(void)
+	?SetVolumeRamp@CRadioPlayerUtility@@QAEHABVTTimeIntervalMicroSeconds@@@Z @ 34 NONAME ; int CRadioPlayerUtility::SetVolumeRamp(class TTimeIntervalMicroSeconds const &)
+	?StationSeekByPTY@CBody@CRadioRdsUtility@@QAEXHH@Z @ 35 NONAME ; void CRadioRdsUtility::CBody::StationSeekByPTY(int, int)
+	?CancelGetFreqByPTY@CRadioRdsUtility@@QAEXXZ @ 36 NONAME ; void CRadioRdsUtility::CancelGetFreqByPTY(void)
+	?GetAutomaticSwitching@CRadioRdsUtility@@QAEHAAH@Z @ 37 NONAME ; int CRadioRdsUtility::GetAutomaticSwitching(int &)
+	?GetTrafficAnnouncementStatus@CRadioRdsUtility@@QAEHAAH@Z @ 38 NONAME ; int CRadioRdsUtility::GetTrafficAnnouncementStatus(int &)
+	?CancelSetFrequency@CRadioFmTunerUtility@@QAEXXZ @ 39 NONAME ; void CRadioFmTunerUtility::CancelSetFrequency(void)
+	?GetClockTime@CRadioRdsUtility@@QAEHAAVTDateTime@@@Z @ 40 NONAME ; int CRadioRdsUtility::GetClockTime(class TDateTime &)
+	?CancelAFSearch@CRadioRdsUtility@@QAEXXZ @ 41 NONAME ; void CRadioRdsUtility::CancelAFSearch(void)
+	?ForceMonoReception@CRadioFmTunerUtility@@QAEHH@Z @ 42 NONAME ; int CRadioFmTunerUtility::ForceMonoReception(int)
+	?GetProgrammeType@CRadioRdsUtility@@QAEHAAH@Z @ 43 NONAME ; int CRadioRdsUtility::GetProgrammeType(int &)
+	?GetForcedMonoReception@CRadioFmTunerUtility@@QBEHAAH@Z @ 44 NONAME ; int CRadioFmTunerUtility::GetForcedMonoReception(int &) const
+	?GetFreqByTA@CRadioRdsUtility@@QAEXXZ @ 45 NONAME ; void CRadioRdsUtility::GetFreqByTA(void)
+	?CancelGetPSByPTY@CRadioRdsUtility@@QAEXXZ @ 46 NONAME ; void CRadioRdsUtility::CancelGetPSByPTY(void)
+	?GetFrequencyRange@CRadioFmTunerUtility@@QBEHAAW4TFmRadioFrequencyRange@@AAH1@Z @ 47 NONAME ; int CRadioFmTunerUtility::GetFrequencyRange(enum TFmRadioFrequencyRange &, int &, int &) const
+	?Stop@CRadioPlayerUtility@@QAEXXZ @ 48 NONAME ; void CRadioPlayerUtility::Stop(void)
+	?SetFrequencyRange@CRadioFmTunerUtility@@QAEXW4TFmRadioFrequencyRange@@@Z @ 49 NONAME ; void CRadioFmTunerUtility::SetFrequencyRange(enum TFmRadioFrequencyRange)
+	??1CRadioPlayerUtility@@EAE@XZ @ 50 NONAME ; CRadioPlayerUtility::~CRadioPlayerUtility(void)
+	?GetFrequency@CRadioFmTunerUtility@@QBEHAAH@Z @ 51 NONAME ; int CRadioFmTunerUtility::GetFrequency(int &) const
+	?StationSeekByTA@CRadioRdsUtility@@QAEXH@Z @ 52 NONAME ; void CRadioRdsUtility::StationSeekByTA(int)
+	?Play@CRadioPlayerUtility@@QAEXXZ @ 53 NONAME ; void CRadioPlayerUtility::Play(void)
+	?CustomInterface@CRadioPlayerUtility@@UAEPAXVTUid@@@Z @ 54 NONAME ; void * CRadioPlayerUtility::CustomInterface(class TUid)
+	?GetCapabilities@CRadioFmTunerUtility@@QAEHAAVTFmTunerCapabilities@@@Z @ 55 NONAME ; int CRadioFmTunerUtility::GetCapabilities(class TFmTunerCapabilities &)
+	?IsMute@CRadioPlayerUtility@@QAEHXZ @ 56 NONAME ; int CRadioPlayerUtility::IsMute(void)
+	?SetAutomaticSwitching@CRadioRdsUtility@@QAEHH@Z @ 57 NONAME ; int CRadioRdsUtility::SetAutomaticSwitching(int)
+	?SetAutomaticTrafficAnnouncement@CRadioRdsUtility@@QAEHH@Z @ 58 NONAME ; int CRadioRdsUtility::SetAutomaticTrafficAnnouncement(int)
+	?RadioFmTunerUtilityL@CRadioUtility@@QAEAAVCRadioFmTunerUtility@@AAVMRadioFmTunerObserver@@@Z @ 59 NONAME ; class CRadioFmTunerUtility & CRadioUtility::RadioFmTunerUtilityL(class MRadioFmTunerObserver &)
+	?GetPSByPTY@CRadioRdsUtility@@QAEXH@Z @ 60 NONAME ; void CRadioRdsUtility::GetPSByPTY(int)
+	?CancelNotifyRdsDataChange@CRadioRdsUtility@@QAEXXZ @ 61 NONAME ; void CRadioRdsUtility::CancelNotifyRdsDataChange(void)
+	?EnableTunerInOfflineMode@CRadioFmTunerUtility@@QAEHH@Z @ 62 NONAME ; int CRadioFmTunerUtility::EnableTunerInOfflineMode(int)
+	?Mute@CRadioPlayerUtility@@QAEHH@Z @ 63 NONAME ; int CRadioPlayerUtility::Mute(int)
+	?NewL@CRadioUtility@@SAPAV1@H@Z @ 64 NONAME ; class CRadioUtility * CRadioUtility::NewL(int)
+	?Close@CRadioPlayerUtility@@QAEXXZ @ 65 NONAME ; void CRadioPlayerUtility::Close(void)
+	?GetPSByTA@CRadioRdsUtility@@QAEXXZ @ 66 NONAME ; void CRadioRdsUtility::GetPSByTA(void)
+	??1CRadioUtility@@UAE@XZ @ 67 NONAME ; CRadioUtility::~CRadioUtility(void)
+	?GetSignalStrength@CRadioFmTunerUtility@@QBEHAAH@Z @ 68 NONAME ; int CRadioFmTunerUtility::GetSignalStrength(int &) const
+	?Close@CRadioFmTunerUtility@@QAEXXZ @ 69 NONAME ; void CRadioFmTunerUtility::Close(void)
+	?GetSquelch@CRadioFmTunerUtility@@QBEHAAH@Z @ 70 NONAME ; int CRadioFmTunerUtility::GetSquelch(int &) const
+	?GetMaxVolume@CRadioPlayerUtility@@QBEHAAH@Z @ 71 NONAME ; int CRadioPlayerUtility::GetMaxVolume(int &) const
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmserv/radioutility/radio_utility/stub/eabi/Radio_Utility_Stubu.def	Fri Aug 06 16:55:00 2010 -0500
@@ -0,0 +1,96 @@
+EXPORTS
+	_ZN13CRadioUtility16RadioRdsUtilityLER17MRadioRdsObserver @ 1 NONAME
+	_ZN13CRadioUtility19RadioPlayerUtilityLER20MRadioPlayerObserver @ 2 NONAME
+	_ZN13CRadioUtility20RadioFmTunerUtilityLER21MRadioFmTunerObserver @ 3 NONAME
+	_ZN13CRadioUtility4NewLEi @ 4 NONAME
+	_ZN13CRadioUtilityD0Ev @ 5 NONAME
+	_ZN13CRadioUtilityD1Ev @ 6 NONAME
+	_ZN13CRadioUtilityD2Ev @ 7 NONAME
+	_ZN16CRadioRdsUtility10GetPSByPTYEi @ 8 NONAME
+	_ZN16CRadioRdsUtility11GetFreqByTAEv @ 9 NONAME
+	_ZN16CRadioRdsUtility12GetClockTimeER9TDateTime @ 10 NONAME
+	_ZN16CRadioRdsUtility12GetFreqByPTYEi @ 11 NONAME
+	_ZN16CRadioRdsUtility12GetRadioTextER6TBuf16ILi64EE @ 12 NONAME
+	_ZN16CRadioRdsUtility14CancelAFSearchEv @ 13 NONAME
+	_ZN16CRadioRdsUtility15CancelGetPSByTAEv @ 14 NONAME
+	_ZN16CRadioRdsUtility15StationSeekByTAEi @ 15 NONAME
+	_ZN16CRadioRdsUtility15StationSeekByTPEi @ 16 NONAME
+	_ZN16CRadioRdsUtility16CancelGetPSByPTYEv @ 17 NONAME
+	_ZN16CRadioRdsUtility16GetProgrammeTypeERi @ 18 NONAME
+	_ZN16CRadioRdsUtility16GetRadioTextPlusE15TRdsRTplusClassR6TBuf16ILi64EE @ 19 NONAME
+	_ZN16CRadioRdsUtility16StationSeekByPTYEii @ 20 NONAME
+	_ZN16CRadioRdsUtility17CancelGetFreqByTAEv @ 21 NONAME
+	_ZN16CRadioRdsUtility18CancelGetFreqByPTYEv @ 22 NONAME
+	_ZN16CRadioRdsUtility19GetProgrammeServiceER6TBuf16ILi8EE @ 23 NONAME
+	_ZN16CRadioRdsUtility19NotifyRdsDataChangeE8TRdsData @ 24 NONAME
+	_ZN16CRadioRdsUtility20CancelRdsStationSeekEv @ 25 NONAME
+	_ZN16CRadioRdsUtility21GetAutomaticSwitchingERi @ 26 NONAME
+	_ZN16CRadioRdsUtility21SetAutomaticSwitchingEi @ 27 NONAME
+	_ZN16CRadioRdsUtility25CancelNotifyRdsDataChangeEv @ 28 NONAME
+	_ZN16CRadioRdsUtility25GetTrafficProgrammeStatusERi @ 29 NONAME
+	_ZN16CRadioRdsUtility26GetProgrammeIdentificationERi @ 30 NONAME
+	_ZN16CRadioRdsUtility28GetTrafficAnnouncementStatusERi @ 31 NONAME
+	_ZN16CRadioRdsUtility31GetAutomaticTrafficAnnouncementERi @ 32 NONAME
+	_ZN16CRadioRdsUtility31SetAutomaticTrafficAnnouncementEi @ 33 NONAME
+	_ZN16CRadioRdsUtility5CloseEv @ 34 NONAME
+	_ZN16CRadioRdsUtility9GetPSByTAEv @ 35 NONAME
+	_ZN19CRadioPlayerUtility10SetBalanceEii @ 36 NONAME
+	_ZN19CRadioPlayerUtility13SetVolumeRampERK25TTimeIntervalMicroSeconds @ 37 NONAME
+	_ZN19CRadioPlayerUtility15CustomInterfaceE4TUid @ 38 NONAME
+	_ZN19CRadioPlayerUtility4MuteEi @ 39 NONAME
+	_ZN19CRadioPlayerUtility4PlayEv @ 40 NONAME
+	_ZN19CRadioPlayerUtility4StopEv @ 41 NONAME
+	_ZN19CRadioPlayerUtility5CloseEv @ 42 NONAME
+	_ZN19CRadioPlayerUtility6IsMuteEv @ 43 NONAME
+	_ZN19CRadioPlayerUtility9SetVolumeEi @ 44 NONAME
+	_ZN19CRadioPlayerUtilityD0Ev @ 45 NONAME
+	_ZN19CRadioPlayerUtilityD1Ev @ 46 NONAME
+	_ZN19CRadioPlayerUtilityD2Ev @ 47 NONAME
+	_ZN20CRadioFmTunerUtility10SetSquelchEi @ 48 NONAME
+	_ZN20CRadioFmTunerUtility11StationSeekEi @ 49 NONAME
+	_ZN20CRadioFmTunerUtility12SetFrequencyEi @ 50 NONAME
+	_ZN20CRadioFmTunerUtility15GetCapabilitiesER20TFmTunerCapabilities @ 51 NONAME
+	_ZN20CRadioFmTunerUtility17CancelStationSeekEv @ 52 NONAME
+	_ZN20CRadioFmTunerUtility17SetFrequencyRangeE22TFmRadioFrequencyRange @ 53 NONAME
+	_ZN20CRadioFmTunerUtility18CancelSetFrequencyEv @ 54 NONAME
+	_ZN20CRadioFmTunerUtility18ForceMonoReceptionEi @ 55 NONAME
+	_ZN20CRadioFmTunerUtility19RequestTunerControlEv @ 56 NONAME
+	_ZN20CRadioFmTunerUtility23CancelSetFrequencyRangeEv @ 57 NONAME
+	_ZN20CRadioFmTunerUtility24EnableTunerInOfflineModeEi @ 58 NONAME
+	_ZN20CRadioFmTunerUtility5CloseEv @ 59 NONAME
+	_ZN20CRadioFmTunerUtilityD0Ev @ 60 NONAME
+	_ZN20CRadioFmTunerUtilityD1Ev @ 61 NONAME
+	_ZN20CRadioFmTunerUtilityD2Ev @ 62 NONAME
+	_ZNK16CRadioRdsUtility15GetCapabilitiesER16TRdsCapabilities @ 63 NONAME
+	_ZNK16CRadioRdsUtility18GetRdsSignalStatusERi @ 64 NONAME
+	_ZNK19CRadioPlayerUtility10GetBalanceERiS0_ @ 65 NONAME
+	_ZNK19CRadioPlayerUtility11PlayerStateEv @ 66 NONAME
+	_ZNK19CRadioPlayerUtility12GetMaxVolumeERi @ 67 NONAME
+	_ZNK19CRadioPlayerUtility9GetVolumeERi @ 68 NONAME
+	_ZNK20CRadioFmTunerUtility10GetSquelchERi @ 69 NONAME
+	_ZNK20CRadioFmTunerUtility12GetFrequencyERi @ 70 NONAME
+	_ZNK20CRadioFmTunerUtility13GetStereoModeERi @ 71 NONAME
+	_ZNK20CRadioFmTunerUtility17GetFrequencyRangeER22TFmRadioFrequencyRangeRiS2_ @ 72 NONAME
+	_ZNK20CRadioFmTunerUtility17GetSignalStrengthERi @ 73 NONAME
+	_ZNK20CRadioFmTunerUtility20GetMaxSignalStrengthERi @ 74 NONAME
+	_ZNK20CRadioFmTunerUtility22GetForcedMonoReceptionERi @ 75 NONAME
+	_ZTI13CRadioUtility @ 76 NONAME
+	_ZTI16CRadioRdsUtility @ 77 NONAME
+	_ZTI19CRadioPlayerUtility @ 78 NONAME
+	_ZTI20CRadioFmTunerUtility @ 79 NONAME
+	_ZTIN13CRadioMonitor5CBodyE @ 80 NONAME
+	_ZTIN13CRadioUtility5CBodyE @ 81 NONAME
+	_ZTIN16CRadioRdsUtility5CBodyE @ 82 NONAME
+	_ZTIN19CRadioPlayerUtility5CBodyE @ 83 NONAME
+	_ZTIN20CRadioFmTunerUtility5CBodyE @ 84 NONAME
+	_ZTV13CRadioUtility @ 85 NONAME
+	_ZTV16CRadioRdsUtility @ 86 NONAME
+	_ZTV19CRadioPlayerUtility @ 87 NONAME
+	_ZTV20CRadioFmTunerUtility @ 88 NONAME
+	_ZTVN13CRadioMonitor5CBodyE @ 89 NONAME
+	_ZTVN13CRadioUtility5CBodyE @ 90 NONAME
+	_ZTVN16CRadioRdsUtility5CBodyE @ 91 NONAME
+	_ZTVN19CRadioPlayerUtility5CBodyE @ 92 NONAME
+	_ZTVN20CRadioFmTunerUtility5CBodyE @ 93 NONAME
+	_ZThn4_N19CRadioPlayerUtility15CustomInterfaceE4TUid @ 94 NONAME
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmserv/radioutility/radio_utility/stub/group/Radio_Utility_Stub.mmp	Fri Aug 06 16:55:00 2010 -0500
@@ -0,0 +1,57 @@
+/*
+* Copyright (c) 2006-2007 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:  Project definition file for project RadioUtilityStub
+*
+*/
+
+
+#include <platform_paths.hrh>
+
+TARGET        	Radio_Utility_Stub.dll
+TARGETTYPE    	DLL
+CAPABILITY    	CAP_GENERAL_DLL
+VENDORID      	VID_DEFAULT
+UID           	0x1000008D 0x01000001
+VERSION 10.1
+
+SOURCEPATH	../../src
+SOURCE		RadioUtility.cpp
+SOURCE		RadioUtilityBody.cpp
+SOURCE		RadioPlayerUtility.cpp
+SOURCE		RadioFmTunerUtility.cpp
+SOURCE		RadioRdsUtility.cpp
+SOURCE		RadioMonitorBody.cpp
+SOURCE      RadioPlayerUtilityBody.cpp
+SOURCE      RadioFmTunerUtilityBody.cpp
+SOURCE      RadioRdsUtilityBody.cpp
+
+SOURCEPATH	../src
+
+USERINCLUDE	../src
+USERINCLUDE	../../src
+USERINCLUDE	../../inc
+USERINCLUDE	../../../inc
+USERINCLUDE	../../../../../inc
+USERINCLUDE /sf/app/radio/radioengine/utils/inc
+
+MW_LAYER_SYSTEMINCLUDE
+
+//LIBRARY		edllstub.lib
+LIBRARY		euser.lib
+LIBRARY		RadioSession_Stub.lib
+LIBRARY		CustomInterfaceUtility.lib 
+LIBRARY     flogger.lib 
+ 
+MACRO STUB_CONSTELLATION
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmserv/radioutility/radio_utility/stub/group/bld.inf	Fri Aug 06 16:55:00 2010 -0500
@@ -0,0 +1,33 @@
+/*
+* Copyright (c) 2002-2004 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:  Project build file for Radio_Utility_Stub
+*
+*/
+
+
+#include <platform_paths.hrh>
+
+// Platforms the component needs to be built on
+//
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_EXPORTS
+// iby file
+../rom/Radio_Utility_Stub.iby		CORE_MW_LAYER_IBY_EXPORT_PATH(Radio_Utility_Stub.iby)
+
+PRJ_MMPFILES
+Radio_Utility_Stub.mmp
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmserv/radioutility/radio_utility/stub/rom/Radio_Utility_Stub.iby	Fri Aug 06 16:55:00 2010 -0500
@@ -0,0 +1,32 @@
+/*
+* Copyright (c) 2005 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:  IBY file for the Radio Utility
+*
+*/
+
+
+#ifndef RADIO_UTILITY_IBY
+#define RADIO_UTILITY_IBY
+
+#ifdef __FM_RADIO
+
+file=ABI_DIR\BUILD_DIR\Radio_Utility_Stub.dll	SHARED_LIB_DIR\Radio_Utility_Stub.dll
+
+// Stub sis
+data = ZSYSTEM\install\Radio_Utility_Stub.sis	system\install\Radio_Utility_Stub.sis
+
+#endif //__FM_RADIO
+#endif // RADIO_UTILITY_IBY
+
+//  End of File  
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmserv/radioutility/radio_utility/stub/src/StubRadioFmTunerUtilityBody.cpp	Fri Aug 06 16:55:00 2010 -0500
@@ -0,0 +1,327 @@
+/*
+* Copyright (c) 2007 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:  Radio FM Tuner Utility implementation body's stub.
+*
+*/
+
+
+#include "RadioFmTunerUtilityBody.h"
+#include "RadioUtilityBody.h"
+#include "RadioStubManager.h"
+
+
+#define STUB  CRadioStubManager::GetRadioStubManager()->iTuner
+
+// -----------------------------------------------------------------------------
+// CRadioFmTunerUtility::CBody::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CRadioFmTunerUtility::CBody* CRadioFmTunerUtility::CBody::NewL(
+    RRadioSession& aRadioSession,
+    MRadioFmTunerObserver& aObserver )
+    {
+    if ( STUB.iLeaveNewL.iError )
+        {
+        User::Leave( STUB.iLeaveNewL.iError );
+        }
+    CRadioFmTunerUtility::CBody* s = new(ELeave) CRadioFmTunerUtility::CBody( aRadioSession, aObserver );
+    CleanupStack::PushL(s);
+    s->ConstructL();
+    CleanupStack::Pop();
+    return s;
+    }
+
+// -----------------------------------------------------------------------------
+// CRadioFmTunerUtility::ConstructL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+void CRadioFmTunerUtility::CBody::ConstructL()
+    {
+    if ( STUB.iLeaveErrorForConstructL.iError )
+        {
+        User::Leave( STUB.iLeaveErrorForConstructL.iError );
+        }
+    STUB.iRadioFmTunerUtilityClient = &iRadioFmTunerUtilityClient;
+    }
+
+// -----------------------------------------------------------------------------
+// CRadioFmTunerUtility::CBody::CBody
+// -----------------------------------------------------------------------------
+//
+CRadioFmTunerUtility::CBody::CBody(
+        RRadioSession& aRadioSession,
+        MRadioFmTunerObserver& aObserver )
+    :iRadioSession( aRadioSession ), 
+    iRadioFmTunerUtilityClient( aObserver )
+    
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CRadioFmTunerUtility::CBody::~CBody
+// -----------------------------------------------------------------------------
+//
+CRadioFmTunerUtility::CBody::~CBody()
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CRadioFmTunerUtility::CBody::RequestTunerControl
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CRadioFmTunerUtility::CBody::RequestTunerControl()
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CRadioFmTunerUtility::CBody::Close
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CRadioFmTunerUtility::CBody::Close()
+    {
+    // Consider releasing tuner control here.
+    }
+
+// -----------------------------------------------------------------------------
+// CRadioFmTunerUtility::CBody::GetCapabilities
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CRadioFmTunerUtility::CBody::GetCapabilities(
+    TFmTunerCapabilities& aCaps ) const
+    {
+    aCaps.iTunerBands = STUB.iCaps.iTunerBands;
+    aCaps.iTunerFunctions = STUB.iCaps.iTunerFunctions;
+    aCaps.iAdditionalFunctions1 = STUB.iCaps.iAdditionalFunctions1;
+    aCaps.iAdditionalFunctions2 = STUB.iCaps.iAdditionalFunctions2;
+    return STUB.iGetCapabilitiesError.Error();
+    }
+
+// -----------------------------------------------------------------------------
+// CRadioFmTunerUtility::CBody::EnableTunerInOfflineMode
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CRadioFmTunerUtility::CBody::EnableTunerInOfflineMode(
+    TBool aEnable )
+    {
+    STUB.iTunerInOfflineMode = aEnable;
+    return STUB.iEnableTunerInOfflineModeError.Error();
+    }
+
+// -----------------------------------------------------------------------------
+// CRadioFmTunerUtility::CBody::GetFrequencyRange
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CRadioFmTunerUtility::CBody::GetFrequencyRange(
+    TFmRadioFrequencyRange& aRange,
+    TInt& aMinFreq,
+    TInt& aMaxFreq ) const
+    {
+
+    aRange = STUB.iRange;
+    aMinFreq = STUB.iMinFreq;
+    aMaxFreq = STUB.iMaxFreq;
+#ifdef _DEBUG
+    RDebug::Print(_L("CRadioFmTunerUtility::CBody::GetFrequencyRange, aRange = %d, aMinFreq = %d, aMaxFreq = %d"),
+        aRange, aMinFreq, aMaxFreq);
+#endif
+    return STUB.iGetFrequencyRangeError.Error();
+    }
+
+
+// -----------------------------------------------------------------------------
+// CRadioFmTunerUtility::CBody::SetFrequencyRange
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CRadioFmTunerUtility::CBody::SetFrequencyRange(
+    TFmRadioFrequencyRange aRange )
+    {
+#ifdef _DEBUG
+    RDebug::Print(_L("CRadioFmTunerUtility::CBody::SetFrequencyRange, aRange = %d"), aRange);
+#endif
+    STUB.iPreviousRange = STUB.iRange;
+    STUB.iRange = aRange;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CRadioFmTunerUtility::CBody::CancelSetFrequencyRange
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CRadioFmTunerUtility::CBody::CancelSetFrequencyRange()
+    {
+    STUB.iRange = STUB.iPreviousRange;
+    }
+
+// -----------------------------------------------------------------------------
+// CRadioFmTunerUtility::CBody::SetFrequency
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CRadioFmTunerUtility::CBody::SetFrequency(
+    TInt aFrequency )
+    {
+#ifdef _DEBUG
+    RDebug::Print(_L("CRadioFmTunerUtility::CBody::SetFrequency, aFrequency = %d"), aFrequency);
+#endif
+    STUB.iPreviousFrequency = STUB.iFrequency;
+    STUB.iFrequency = aFrequency;
+    }
+
+// -----------------------------------------------------------------------------
+// CRadioFmTunerUtility::CBody::CancelSetFrequencyRange
+// Body of CancelSetFrequencyRange
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CRadioFmTunerUtility::CBody::CancelSetFrequency()
+    {
+    STUB.iFrequency = STUB.iPreviousFrequency;
+    STUB.iPreviousFrequency = 0;
+    }
+
+// -----------------------------------------------------------------------------
+// CRadioFmTunerUtility::CBody::GetFrequency
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CRadioFmTunerUtility::CBody::GetFrequency(
+    TInt& aFrequency ) const
+    {
+    aFrequency = STUB.iFrequency;
+    return STUB.iGetFrequencyError.Error();
+    }
+
+// -----------------------------------------------------------------------------
+// CRadioFmTunerUtility::CBody::StationSeek
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CRadioFmTunerUtility::CBody::StationSeek(
+    TBool aUpwards )
+    {
+#ifdef _DEBUG
+    RDebug::Print(_L("CRadioFmTunerUtility::CBody::StationSeek, aUpwards = %d"), aUpwards);
+#endif
+    STUB.iStationSeekUpwards = aUpwards;
+    }
+
+// -----------------------------------------------------------------------------
+// CRadioFmTunerUtility::CBody::CancelStationSeek
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CRadioFmTunerUtility::CBody::CancelStationSeek()
+    {
+    STUB.iStationSeekUpwards = EFalse;
+    }
+
+// -----------------------------------------------------------------------------
+// CRadioFmTunerUtility::CBody::GetSignalStrength
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CRadioFmTunerUtility::CBody::GetSignalStrength(
+    TInt& aSignalStrength ) const
+    {
+    aSignalStrength = STUB.iSignalStrength;
+    return STUB.iGetSignalStrengthError.Error();
+    }
+
+// -----------------------------------------------------------------------------
+// CRadioFmTunerUtility::GetMaxSignalStrength
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CRadioFmTunerUtility::CBody::GetMaxSignalStrength(
+    TInt& aMaxSignalStrength ) const
+    {
+    aMaxSignalStrength = STUB.iMaxSignalStrength;
+    return STUB.iGetMaxSignalStrengthError.Error();
+    }
+
+// -----------------------------------------------------------------------------
+// CRadioFmTunerUtility::CBody::GetStereoMode
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CRadioFmTunerUtility::CBody::GetStereoMode(
+    TBool& aStereo ) const
+    {
+    aStereo = STUB.iStereoMode;
+    return STUB.iGetStereoModeError.Error();
+    }
+
+// -----------------------------------------------------------------------------
+// CRadioFmTunerUtility::CBody::ForceMonoReception
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CRadioFmTunerUtility::CBody::ForceMonoReception(
+    TBool aForcedMono)
+    {
+    STUB.iForcedMono = aForcedMono;
+    return STUB.iForcedMonoReceptionError.Error();
+    }
+
+// -----------------------------------------------------------------------------
+// CRadioFmTunerUtility::CBody::GetForcedMonoReception
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CRadioFmTunerUtility::CBody::GetForcedMonoReception(
+    TBool& aForcedMono ) const
+    {
+    aForcedMono = STUB.iForcedMono;
+    return STUB.iGetForcedMonoReceptionError.Error();
+    }
+
+// -----------------------------------------------------------------------------
+// CRadioFmTunerUtility::CBody::SetSquelch
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CRadioFmTunerUtility::CBody::SetSquelch(
+    TBool aSquelch )
+    {
+    STUB.iSquelch = aSquelch;
+    return STUB.iSetSquelchError.Error();
+    }
+
+// -----------------------------------------------------------------------------
+// CRadioFmTunerUtility::CBody::GetSquelch
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CRadioFmTunerUtility::CBody::GetSquelch(
+    TBool& aSquelch ) const
+    {
+    aSquelch = STUB.iSquelch;
+    return STUB.iGetSquelchError.Error();
+    }
+
+// End of File
+
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmserv/radioutility/radio_utility/stub/src/StubRadioPlayerUtilityBody.cpp	Fri Aug 06 16:55:00 2010 -0500
@@ -0,0 +1,268 @@
+/*
+* Copyright (c) 2007 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:  Radio Player Utility body's stub implementation
+*
+*/
+
+
+#include <custominterfaceutility.h>
+#include "RadioServerData.h"
+#include "RadioPlayerUtilityBody.h"
+#include "RadioSession.h"
+#include "RadioStubManager.h"
+
+#define STUB  CRadioStubManager::GetRadioStubManager()->iPlayer
+
+// ======== MEMBER FUNCTIONS ========
+
+// -----------------------------------------------------------------------------
+// CRadioPlayerUtility::CBody::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+
+CRadioPlayerUtility::CBody* CRadioPlayerUtility::CBody::NewL(
+    RRadioSession& aRadioSession,
+    MRadioPlayerObserver& aObserver )
+    {
+    if ( STUB.iLeaveNewL.iError )
+        {
+        User::Leave( STUB.iLeaveNewL.iError );
+        }
+    CRadioPlayerUtility::CBody* s = new(ELeave) CRadioPlayerUtility::CBody( aRadioSession, aObserver);
+    CleanupStack::PushL(s);
+    s->ConstructL();
+    CleanupStack::Pop();
+    return s;
+    }
+
+// -----------------------------------------------------------------------------
+// CRadioPlayerUtility::ConstructL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+void CRadioPlayerUtility::CBody::ConstructL()
+    {
+    if ( STUB.iLeaveErrorForConstructL.iError )
+        {
+        User::Leave( STUB.iLeaveErrorForConstructL.iError );
+        }
+    STUB.iRadioPlayerUtilityClient = &iRadioPlayerUtilityClient;
+    }
+
+// -----------------------------------------------------------------------------
+// CRadioPlayerUtility::CBody::CBody
+// -----------------------------------------------------------------------------
+//
+CRadioPlayerUtility::CBody::CBody( 
+        RRadioSession& aRadioSession,
+        MRadioPlayerObserver& aObserver )
+    :iRadioSession( aRadioSession ),
+    iRadioPlayerUtilityClient( aObserver )
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// Destructor.
+// -----------------------------------------------------------------------------
+//
+CRadioPlayerUtility::CBody::~CBody()
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CRadioPlayerUtility::CBody::PlayerState
+// Get the player's state.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+//
+void CRadioPlayerUtility::CBody::PlayerState(
+    TPlayerState& aPlayerState ) const
+    {
+    aPlayerState = STUB.iPlayerState;
+    }
+
+// -----------------------------------------------------------------------------
+// CRadioPlayerUtility::CBody::Close
+// Stops radio playback only if no other primary clients are connected to the
+// radio server.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CRadioPlayerUtility::CBody::Close()
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CRadioPlayerUtility::CBody::Play
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CRadioPlayerUtility::CBody::Play()
+    {
+    STUB.iPlayerState = ERadioPlayerPlaying;
+    }
+
+// -----------------------------------------------------------------------------
+// CRadioPlayerUtility::CBody::Stop
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CRadioPlayerUtility::CBody::Stop()
+    {
+    STUB.iPlayerState = ERadioPlayerIdle;
+    }
+
+// -----------------------------------------------------------------------------
+// CRadioPlayerUtility::CBody::Mute
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CRadioPlayerUtility::CBody::Mute(
+    TBool aMute )
+    {
+    STUB.iMuteStatus = aMute;
+    return STUB.iMuteError.Error();
+    }
+
+// -----------------------------------------------------------------------------
+// CRadioPlayerUtility::CBody::IsMute
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TBool CRadioPlayerUtility::CBody::IsMute()
+    {
+    return STUB.iMuteStatus;
+    }
+
+// -----------------------------------------------------------------------------
+// CRadioPlayerUtility::CBody::SetVolume
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CRadioPlayerUtility::CBody::SetVolume(
+    TInt aVolume )
+    {
+    STUB.iVolume = aVolume;
+    return STUB.iSetVolumeError.Error();
+    }
+
+// -----------------------------------------------------------------------------
+// CRadioPlayerUtility::CBody::GetVolume
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CRadioPlayerUtility::CBody::GetVolume(
+    TInt& aVolume ) const
+    {
+    aVolume = STUB.iVolume;
+    return STUB.iGetVolumeError.Error();
+    }
+
+// -----------------------------------------------------------------------------
+// CRadioPlayerUtility::CBody::SetVolumeRamp
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CRadioPlayerUtility::CBody::SetVolumeRamp(
+    const TTimeIntervalMicroSeconds& aRampInterval )
+    {
+#ifdef _DEBUG
+    RDebug::Print(_L("CRadioPlayerUtility::CBody::SetVolumeRamp"));
+#endif
+    STUB.iRampInterval = aRampInterval;
+    return STUB.iSetVolumeRampError.Error();
+    }
+
+// -----------------------------------------------------------------------------
+// CRadioPlayerUtility::CBody::GetMaxVolume
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CRadioPlayerUtility::CBody::GetMaxVolume(
+    TInt& aMaxVolume ) const
+    {
+    aMaxVolume = STUB.iMaxVolume;
+    return STUB.iGetMaxVolumeError.Error();
+    }
+
+// -----------------------------------------------------------------------------
+// CRadioPlayerUtility::CBody::SetBalance
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CRadioPlayerUtility::CBody::SetBalance(
+    TInt aLeftPercentage,
+    TInt aRightPercentage )
+    {
+#ifdef _DEBUG
+    RDebug::Print(_L("CRadioPlayerUtility::CBody::SetBalance, aLeftPercentage = %d, aRightPercentage = %d"),
+        aLeftPercentage, aRightPercentage);
+#endif
+    STUB.iLeftPercentage = aLeftPercentage;
+    STUB.iRightPercentage = aRightPercentage;
+    return STUB.iSetBalanceError.Error();
+    }
+
+// -----------------------------------------------------------------------------
+// CRadioPlayerUtility::CBody::GetBalance
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CRadioPlayerUtility::CBody::GetBalance(
+    TInt& aLeftPercentage,
+    TInt& aRightPercentage ) const
+    {
+    aLeftPercentage = STUB.iLeftPercentage;
+    aRightPercentage = STUB.iRightPercentage;
+    return STUB.iGetBalanceError.Error();
+    }
+
+// -----------------------------------------------------------------------------
+// CRadioPlayerUtility::CBody::CustomInterface
+// Get a custom interface for the specified interface Id.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TAny* CRadioPlayerUtility::CBody::CustomInterface(
+    TUid aInterfaceId )
+    {
+//    TAny* ci = NULL;
+//    return ci;
+#ifdef _DEBUG
+    RDebug::Print(_L("CRadioPlayerUtility::CBody::CustomInterface, aInterfaceId = %d"), aInterfaceId);
+#endif
+    TAny* ci = NULL;
+    CCustomInterfaceUtility* customInterfaceUtil = NULL;
+
+    TRAPD( error, customInterfaceUtil = CCustomInterfaceUtility::NewL( iRadioSession ) );
+
+    if ( !error )
+        {
+        ci = customInterfaceUtil->CustomInterface( aInterfaceId );
+        if ( !ci )
+            {
+            // The custom interface utility is owned by the custom interface, implicitly.
+            // The custom interface utility instance is destroyed when the
+            // custom interface is finally destroyed!
+            // But if there's no valid ci, we need to take care of deleting the
+            // custom interface utility instance.
+            delete customInterfaceUtil;
+            }
+        }
+    return ci;
+    }
+
+//End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmserv/radioutility/radio_utility/stub/src/StubRadioRdsUtilityBody.cpp	Fri Aug 06 16:55:00 2010 -0500
@@ -0,0 +1,433 @@
+/*
+* Copyright (c) 2007 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:  Radio RDS Utility body's stub implementation
+*
+*/
+
+
+#include "RadioRdsUtilityBody.h"
+#include "RadioServerData.h"
+#include "RadioSession.h"
+#include "RadioStubManager.h"
+
+#define STUB  CRadioStubManager::GetRadioStubManager()->iRds
+
+// ======== MEMBER FUNCTIONS ========
+
+// -----------------------------------------------------------------------------
+// CRadioRdsUtility::CBody::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CRadioRdsUtility::CBody* CRadioRdsUtility::CBody::NewL(
+    RRadioSession& aRadioSession,
+    MRadioRdsObserver& aObserver )
+    {
+    if ( STUB.iLeaveNewL.iError )
+        {
+        User::Leave( STUB.iLeaveNewL.iError );
+        }
+    CRadioRdsUtility::CBody* s = new(ELeave) CRadioRdsUtility::CBody( aRadioSession, aObserver );
+    CleanupStack::PushL(s);
+    s->ConstructL();
+    CleanupStack::Pop();
+    return s;
+    }
+
+// -----------------------------------------------------------------------------
+// CRadioRdsUtility::CBody::ConstructL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+void CRadioRdsUtility::CBody::ConstructL()
+    {
+    if ( STUB.iLeaveErrorForConstructL.iError )
+        {
+        User::Leave( STUB.iLeaveErrorForConstructL.iError );
+        }
+    STUB.iRadioRdsUtilityClient = &iRadioRdsUtilityClient;
+    }
+
+// -----------------------------------------------------------------------------
+// CRadioRdsUtility::CBody::CBody
+// -----------------------------------------------------------------------------
+//
+CRadioRdsUtility::CBody::CBody(
+        RRadioSession& aRadioSession,
+        MRadioRdsObserver& aObserver )
+    : iRadioSession(aRadioSession),
+    iRadioRdsUtilityClient(aObserver)
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// Destructor.
+// -----------------------------------------------------------------------------
+//
+CRadioRdsUtility::CBody::~CBody()
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CRadioRdsUtility::CBody::Close
+// Cancel all requested RDS notifications if any were requested.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CRadioRdsUtility::CBody::Close()
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CRadioRdsUtility::CBody::GetCapabilities
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CRadioRdsUtility::CBody::GetCapabilities(
+    TRdsCapabilities& aCaps ) const
+    {
+    if ( !STUB.iGetCapabilitiesError.Error() )
+        {
+        aCaps.iRdsFunctions = STUB.iCaps.iRdsFunctions;
+        aCaps.iAdditionalFunctions1 = STUB.iCaps.iAdditionalFunctions1;
+        aCaps.iAdditionalFunctions2 = STUB.iCaps.iAdditionalFunctions2;
+        }
+    return STUB.iGetCapabilitiesError.Error();
+    }
+
+// -----------------------------------------------------------------------------
+// CRadioRdsUtility::CBody::GetRdsSignalStatus
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CRadioRdsUtility::CBody::GetRdsSignalStatus(
+    TBool& aRdsSignal ) const
+    {
+    aRdsSignal = STUB.iRdsSignal;
+    return STUB.iGetRdsSignalStatusError.Error();
+    }
+
+// -----------------------------------------------------------------------------
+// CRadioRdsUtility::CBody::NotifyRdsDataChange
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CRadioRdsUtility::CBody::NotifyRdsDataChange(
+    TRdsData aRdsData )
+    {
+    iRdsDataReq.iRdsFunctions = aRdsData.iRdsFunctions;
+    iRdsDataReq.iAdditionalFunctions1 = aRdsData.iAdditionalFunctions1;
+    iRdsDataReq.iAdditionalFunctions2 = aRdsData.iAdditionalFunctions2;
+    return STUB.iNotifyRdsDataChangeError.Error();
+    }
+
+// -----------------------------------------------------------------------------
+// CRadioRdsUtility::CBody::CancelNotifyRdsDataChange
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CRadioRdsUtility::CBody::CancelNotifyRdsDataChange()
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CRadioRdsUtility::CBody::SetAutomaticSwitching
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CRadioRdsUtility::CBody::SetAutomaticSwitching(
+    TBool aAuto )
+    {
+    STUB.iAutomaticSwitching = aAuto;
+    return STUB.iSetAutomaticSwitchingError.Error();
+
+    }
+
+// -----------------------------------------------------------------------------
+// CRadioRdsUtility::CBody::GetAutomaticSwitching
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CRadioRdsUtility::CBody::GetAutomaticSwitching(
+    TBool& aAuto )
+    {
+    aAuto = STUB.iAutomaticSwitching;
+    return STUB.iGetAutomaticSwitchingError.Error();
+    }
+
+// -----------------------------------------------------------------------------
+// CRadioRdsUtility::CBody::CancelAFSearch
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CRadioRdsUtility::CBody::CancelAFSearch()
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CRadioRdsUtility::CBody::SetAutomaticTrafficAnnouncement
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CRadioRdsUtility::CBody::SetAutomaticTrafficAnnouncement(
+    TBool aAuto )
+    {
+    STUB.iTaStatus = aAuto;
+    return STUB.iSetAutomaticTrafficAnnouncementError.Error();
+    }
+
+// -----------------------------------------------------------------------------
+// CRadioRdsUtility::CBody::GetAutomaticTrafficAnnouncement
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CRadioRdsUtility::CBody::GetAutomaticTrafficAnnouncement(
+    TBool& aAuto )
+    {
+    aAuto = STUB.iTaStatus;
+    return STUB.iGetAutomaticTrafficAnnouncementError.Error();
+    }
+
+// -----------------------------------------------------------------------------
+// CRadioRdsUtility::CBody::StationSeekByPTY
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CRadioRdsUtility::CBody::StationSeekByPTY(
+    TRdsProgrammeType /*aPty*/,
+    TBool /*aUpwards*/ )
+    {
+    iRadioRdsUtilityClient.MrroStationSeekByPTYComplete( 
+            STUB.iStationSeekByPTYError.Error(), STUB.iFrequency );
+    }
+
+// -----------------------------------------------------------------------------
+// CRadioRdsUtility::CBody::StationSeekByTA
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CRadioRdsUtility::CBody::StationSeekByTA(
+    TBool /*aSeekUp*/ )
+    {
+    iRadioRdsUtilityClient.MrroStationSeekByTAComplete( STUB.iStationSeekByTAError.Error(), STUB.iFrequency );
+    }
+
+// -----------------------------------------------------------------------------
+// CRadioRdsUtility::CBody::StationSeekByTP
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CRadioRdsUtility::CBody::StationSeekByTP(
+    TBool /*aSeekUp*/ )
+    {
+    iRadioRdsUtilityClient.MrroStationSeekByTPComplete( STUB.iStationSeekByTPError.Error(), STUB.iFrequency );
+    }
+
+// -----------------------------------------------------------------------------
+// CRadioRdsUtility::CBody::CancelRdsStationSeek
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CRadioRdsUtility::CBody::CancelRdsStationSeek()
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CRadioRdsUtility::CBody::GetFreqByPTY
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CRadioRdsUtility::CBody::GetFreqByPTY(
+    TRdsProgrammeType /*aPty*/ )
+    {
+    iRadioRdsUtilityClient.MrroGetFreqByPTYComplete( STUB.iGetFreqByPTYError.Error(), STUB.iFreqList );
+    }
+
+// -----------------------------------------------------------------------------
+// CRadioRdsUtility::CBody::CancelGetFreqByPTY
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CRadioRdsUtility::CBody::CancelGetFreqByPTY()
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CRadioRdsUtility::CBody::GetFreqByTA
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CRadioRdsUtility::CBody::GetFreqByTA()
+    {
+    iRadioRdsUtilityClient.MrroGetFreqByTAComplete( STUB.iGetFreqByTAError.Error(), STUB.iFreqList );
+    }
+
+// -----------------------------------------------------------------------------
+// CRadioRdsUtility::CBody::CancelGetFreqByTA
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CRadioRdsUtility::CBody::CancelGetFreqByTA()
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CRadioRdsUtility::CBody::GetPSByPTY
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CRadioRdsUtility::CBody::GetPSByPTY(
+    TRdsProgrammeType /*aPty*/ )
+    {
+    iRadioRdsUtilityClient.MrroGetPSByPTYComplete( STUB.iGetPSByPTYError.Error(), STUB.iPsList );
+    }
+
+// -----------------------------------------------------------------------------
+// CRadioRdsUtility::CBody::CancelGetPSByPTY
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CRadioRdsUtility::CBody::CancelGetPSByPTY()
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CRadioRdsUtility::CBody::GetPSByTA
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CRadioRdsUtility::CBody::GetPSByTA()
+    {
+    iRadioRdsUtilityClient.MrroGetPSByPTYComplete( STUB.iGetPSByTAError.Error(), STUB.iPsList );
+    }
+
+// -----------------------------------------------------------------------------
+// CRadioRdsUtility::CBody::CancelGetPSByTA
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CRadioRdsUtility::CBody::CancelGetPSByTA()
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CRadioRdsUtility::CBody::GetProgrammeIdentification
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CRadioRdsUtility::CBody::GetProgrammeIdentification(
+    TInt& /*aPi*/ )
+    {
+    return STUB.iGetProgrammeIdentificationError.Error();
+    }
+
+// -----------------------------------------------------------------------------
+// CRadioRdsUtility::CBody::GetProgrammeType
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CRadioRdsUtility::CBody::GetProgrammeType(
+    TRdsProgrammeType& /*aPty*/ )
+    {
+    return STUB.iGetProgrammeTypeError.Error();
+    }
+
+// -----------------------------------------------------------------------------
+// CRadioRdsUtility::CBody::GetProgrammeService
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CRadioRdsUtility::CBody::GetProgrammeService(
+    TRdsPSName& aPs )
+    {
+    if ( STUB.iPs.Length() )
+        {
+        aPs.Copy( STUB.iPs );
+        }
+
+    return STUB.iGetProgrammeServiceError.Error();
+    }
+
+// -----------------------------------------------------------------------------
+// CRadioRdsUtility::CBody::GetRadioText
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CRadioRdsUtility::CBody::GetRadioText(
+    TRdsRadioText& aRt )
+    {
+    if ( STUB.iRtPlusData.Length() )
+       {
+       aRt.Copy( STUB.iRtPlusData );
+       }
+
+    return STUB.iGetRadioTextError.Error();
+    }
+
+// -----------------------------------------------------------------------------
+// CRadioRdsUtility::CBody::GetRadioTextPlus
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CRadioRdsUtility::CBody::GetRadioTextPlus(
+    TRdsRTplusClass /*aRtPlusClass*/,
+    TRdsRadioText& aRtPlusData )
+    {
+
+    if ( STUB.iRtPlusData.Length() )
+        {
+        aRtPlusData.Copy( STUB.iRtPlusData );
+        }
+
+    return STUB.iGetRadioTextPlusError.Error();
+    }
+
+// -----------------------------------------------------------------------------
+// CRadioRdsUtility::CBody::GetClockTime
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CRadioRdsUtility::CBody::GetClockTime(
+    TDateTime& aCt )
+    {
+    aCt = STUB.iCt;
+    return STUB.iGetClockTimeError.Error();
+    }
+
+// -----------------------------------------------------------------------------
+// CRadioRdsUtility::CBody::GetTrafficAnnouncementStatus
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CRadioRdsUtility::CBody::GetTrafficAnnouncementStatus(
+    TBool& aTaStatus )
+    {
+    STUB.iTaStatus = aTaStatus;
+    return STUB.iGetTrafficAnnouncementStatusError.Error();
+    }
+
+// -----------------------------------------------------------------------------
+// CRadioRdsUtility::CBody::GetTrafficProgrammeStatus
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CRadioRdsUtility::CBody::GetTrafficProgrammeStatus(
+    TBool& aTpStatus )
+    {
+    aTpStatus = STUB.iTpStatus;
+    return STUB.iGetTrafficProgrammeStatusError.Error();
+    }
+
+
+//End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmserv/radioutility/radioserver/Session/stub/bwins/RadioSession_Stubu.def	Fri Aug 06 16:55:00 2010 -0500
@@ -0,0 +1,71 @@
+EXPORTS
+	?CustomCommandAsync@RRadioSession@@UAEXABV?$TPckgBuf@VTMMFMessageDestination@@@@HABVTDesC8@@1AAVTRequestStatus@@@Z @ 1 NONAME ; void RRadioSession::CustomCommandAsync(class TPckgBuf<class TMMFMessageDestination> const &, int, class TDesC8 const &, class TDesC8 const &, class TRequestStatus &)
+	?StationSeekByTP@RRadioSession@@QAEXH@Z @ 2 NONAME ; void RRadioSession::StationSeekByTP(int)
+	?SetSquelch@RRadioSession@@QAEHH@Z @ 3 NONAME ; int RRadioSession::SetSquelch(int)
+	?CustomCommandAsync@RRadioSession@@UAEXABV?$TPckgBuf@VTMMFMessageDestination@@@@HABVTDesC8@@1AAVTDes8@@AAVTRequestStatus@@@Z @ 4 NONAME ; void RRadioSession::CustomCommandAsync(class TPckgBuf<class TMMFMessageDestination> const &, int, class TDesC8 const &, class TDesC8 const &, class TDes8 &, class TRequestStatus &)
+	?NotifyRadioTextPlusChange@RRadioSession@@QAEHAAV?$RArray@H@@@Z @ 5 NONAME ; int RRadioSession::NotifyRadioTextPlusChange(class RArray<int> &)
+	?CancelGetPSByTA@RRadioSession@@QAEXXZ @ 6 NONAME ; void RRadioSession::CancelGetPSByTA(void)
+	?NotifyRdsDataChange@RRadioSession@@QAEHVTRsRdsData@@@Z @ 7 NONAME ; int RRadioSession::NotifyRdsDataChange(class TRsRdsData)
+	?CancelGetFreqByTA@RRadioSession@@QAEXXZ @ 8 NONAME ; void RRadioSession::CancelGetFreqByTA(void)
+	?Connect@RRadioSession@@QAEHAAVMRadioObserver@@H@Z @ 9 NONAME ; int RRadioSession::Connect(class MRadioObserver &, int)
+	?GetTrafficAnnouncementStatus@RRadioSession@@QAEHAAH@Z @ 10 NONAME ; int RRadioSession::GetTrafficAnnouncementStatus(int &)
+	?GetAutomaticSwitching@RRadioSession@@QAEHAAH@Z @ 11 NONAME ; int RRadioSession::GetAutomaticSwitching(int &)
+	?CancelGetFreqByPTY@RRadioSession@@QAEXXZ @ 12 NONAME ; void RRadioSession::CancelGetFreqByPTY(void)
+	?GetMuteStatus@RRadioSession@@QBEHAAH@Z @ 13 NONAME ; int RRadioSession::GetMuteStatus(int &) const
+	?StationSeekByTA@RRadioSession@@QAEXH@Z @ 14 NONAME ; void RRadioSession::StationSeekByTA(int)
+	?SetVolume@RRadioSession@@QAEHH@Z @ 15 NONAME ; int RRadioSession::SetVolume(int)
+	?GetMaxSignalStrength@RRadioSession@@QBEHAAH@Z @ 16 NONAME ; int RRadioSession::GetMaxSignalStrength(int &) const
+	?GetForceMonoReception@RRadioSession@@QBEHAAH@Z @ 17 NONAME ; int RRadioSession::GetForceMonoReception(int &) const
+	?GetProgrammeType@RRadioSession@@QAEHAAH@Z @ 18 NONAME ; int RRadioSession::GetProgrammeType(int &)
+	?GetTrafficProgrammeStatus@RRadioSession@@QAEHAAH@Z @ 19 NONAME ; int RRadioSession::GetTrafficProgrammeStatus(int &)
+	?GetFrequencyRange@RRadioSession@@QBEHAAW4TRsFrequencyRange@@AAH1@Z @ 20 NONAME ; int RRadioSession::GetFrequencyRange(enum TRsFrequencyRange &, int &, int &) const
+	?SetAutomaticSwitching@RRadioSession@@QAEHH@Z @ 21 NONAME ; int RRadioSession::SetAutomaticSwitching(int)
+	?GetAutomaticTrafficAnnouncement@RRadioSession@@QAEHAAH@Z @ 22 NONAME ; int RRadioSession::GetAutomaticTrafficAnnouncement(int &)
+	?GetStereoMode@RRadioSession@@QBEHAAH@Z @ 23 NONAME ; int RRadioSession::GetStereoMode(int &) const
+	?CancelRdsStationSeek@RRadioSession@@QAEXXZ @ 24 NONAME ; void RRadioSession::CancelRdsStationSeek(void)
+	?ForceMonoReception@RRadioSession@@QAEHH@Z @ 25 NONAME ; int RRadioSession::ForceMonoReception(int)
+	?CustomCommandSync@RRadioSession@@UAEHABV?$TPckgBuf@VTMMFMessageDestination@@@@HABVTDesC8@@1@Z @ 26 NONAME ; int RRadioSession::CustomCommandSync(class TPckgBuf<class TMMFMessageDestination> const &, int, class TDesC8 const &, class TDesC8 const &)
+	?GetRdsSignalStatus@RRadioSession@@QBEHAAH@Z @ 27 NONAME ; int RRadioSession::GetRdsSignalStatus(int &) const
+	?GetFrequency@RRadioSession@@QBEHAAH@Z @ 28 NONAME ; int RRadioSession::GetFrequency(int &) const
+	?RequestTunerControl@RRadioSession@@QAEXW4TRsTuner@@@Z @ 29 NONAME ; void RRadioSession::RequestTunerControl(enum TRsTuner)
+	?GetPSByTA@RRadioSession@@QAEXXZ @ 30 NONAME ; void RRadioSession::GetPSByTA(void)
+	?GetRadioTextPlus@RRadioSession@@QAEHW4TRsRdsRTplusClass@@AAV?$TBuf16@$0EA@@@@Z @ 31 NONAME ; int RRadioSession::GetRadioTextPlus(enum TRsRdsRTplusClass, class TBuf16<64> &)
+	?StationSeekByPTY@RRadioSession@@QAEXHH@Z @ 32 NONAME ; void RRadioSession::StationSeekByPTY(int, int)
+	?CancelSetFrequencyRange@RRadioSession@@QAEXXZ @ 33 NONAME ; void RRadioSession::CancelSetFrequencyRange(void)
+	?GetSquelch@RRadioSession@@QBEHAAH@Z @ 34 NONAME ; int RRadioSession::GetSquelch(int &) const
+	?Play@RRadioSession@@QAEXXZ @ 35 NONAME ; void RRadioSession::Play(void)
+	?StationSeek@RRadioSession@@QAEXH@Z @ 36 NONAME ; void RRadioSession::StationSeek(int)
+	?GetVolume@RRadioSession@@QBEHAAH@Z @ 37 NONAME ; int RRadioSession::GetVolume(int &) const
+	?PlayerState@RRadioSession@@QBEHAAW4TRsPlayerState@@@Z @ 38 NONAME ; int RRadioSession::PlayerState(enum TRsPlayerState &) const
+	?CancelNotifyRdsDataChange@RRadioSession@@QAEXXZ @ 39 NONAME ; void RRadioSession::CancelNotifyRdsDataChange(void)
+	?SetBalance@RRadioSession@@QAEHHH@Z @ 40 NONAME ; int RRadioSession::SetBalance(int, int)
+	?SetVolumeRamp@RRadioSession@@QAEHABVTTimeIntervalMicroSeconds@@@Z @ 41 NONAME ; int RRadioSession::SetVolumeRamp(class TTimeIntervalMicroSeconds const &)
+	?GetRdsCapabilities@RRadioSession@@QBEHAAVTRsRdsCapabilities@@@Z @ 42 NONAME ; int RRadioSession::GetRdsCapabilities(class TRsRdsCapabilities &) const
+	?GetProgrammeService@RRadioSession@@QAEHAAV?$TBuf16@$07@@@Z @ 43 NONAME ; int RRadioSession::GetProgrammeService(class TBuf16<8> &)
+	?GetSignalStrength@RRadioSession@@QBEHAAH@Z @ 44 NONAME ; int RRadioSession::GetSignalStrength(int &) const
+	?GetFreqByPTY@RRadioSession@@QAEXH@Z @ 45 NONAME ; void RRadioSession::GetFreqByPTY(int)
+	?CancelAFSearch@RRadioSession@@QAEXXZ @ 46 NONAME ; void RRadioSession::CancelAFSearch(void)
+	?GetBalance@RRadioSession@@QBEHAAH0@Z @ 47 NONAME ; int RRadioSession::GetBalance(int &, int &) const
+	?GetRadioText@RRadioSession@@QAEHAAV?$TBuf16@$0EA@@@@Z @ 48 NONAME ; int RRadioSession::GetRadioText(class TBuf16<64> &)
+	?Stop@RRadioSession@@QAEXH@Z @ 49 NONAME ; void RRadioSession::Stop(int)
+	?Close@RRadioSession@@QAEXXZ @ 50 NONAME ; void RRadioSession::Close(void)
+	?CancelStationSeek@RRadioSession@@QAEXXZ @ 51 NONAME ; void RRadioSession::CancelStationSeek(void)
+	?EnableTunerInOfflineMode@RRadioSession@@QAEHH@Z @ 52 NONAME ; int RRadioSession::EnableTunerInOfflineMode(int)
+	?CancelSetFrequency@RRadioSession@@QAEXXZ @ 53 NONAME ; void RRadioSession::CancelSetFrequency(void)
+	?GetPSByPTY@RRadioSession@@QAEXH@Z @ 54 NONAME ; void RRadioSession::GetPSByPTY(int)
+	?GetProgrammeIdentification@RRadioSession@@QAEHAAH@Z @ 55 NONAME ; int RRadioSession::GetProgrammeIdentification(int &)
+	?CustomCommandSync@RRadioSession@@UAEHABV?$TPckgBuf@VTMMFMessageDestination@@@@HABVTDesC8@@1AAVTDes8@@@Z @ 56 NONAME ; int RRadioSession::CustomCommandSync(class TPckgBuf<class TMMFMessageDestination> const &, int, class TDesC8 const &, class TDesC8 const &, class TDes8 &)
+	?CancelGetPSByPTY@RRadioSession@@QAEXXZ @ 57 NONAME ; void RRadioSession::CancelGetPSByPTY(void)
+	?Mute@RRadioSession@@QAEHH@Z @ 58 NONAME ; int RRadioSession::Mute(int)
+	?GetMaxVolume@RRadioSession@@QBEHAAH@Z @ 59 NONAME ; int RRadioSession::GetMaxVolume(int &) const
+	?CancelNotifyRadioTextPlusChange@RRadioSession@@QAEXXZ @ 60 NONAME ; void RRadioSession::CancelNotifyRadioTextPlusChange(void)
+	?GetFreqByTA@RRadioSession@@QAEXXZ @ 61 NONAME ; void RRadioSession::GetFreqByTA(void)
+	?Version@RRadioSession@@QBE?AVTVersion@@XZ @ 62 NONAME ; class TVersion RRadioSession::Version(void) const
+	??0RRadioSession@@QAE@XZ @ 63 NONAME ; RRadioSession::RRadioSession(void)
+	?SetFrequency@RRadioSession@@QAEXH@Z @ 64 NONAME ; void RRadioSession::SetFrequency(int)
+	?SetAutomaticTrafficAnnouncement@RRadioSession@@QAEHH@Z @ 65 NONAME ; int RRadioSession::SetAutomaticTrafficAnnouncement(int)
+	?GetTunerCapabilities@RRadioSession@@QBEHAAVTRsTunerCapabilities@@@Z @ 66 NONAME ; int RRadioSession::GetTunerCapabilities(class TRsTunerCapabilities &) const
+	?SetFrequencyRange@RRadioSession@@QAEXW4TRsFrequencyRange@@@Z @ 67 NONAME ; void RRadioSession::SetFrequencyRange(enum TRsFrequencyRange)
+	?GetClockTime@RRadioSession@@QAEHAAVTDateTime@@@Z @ 68 NONAME ; int RRadioSession::GetClockTime(class TDateTime &)
+	?NewL@RRadioSession@@SAPAV1@XZ @ 69 NONAME ; class RRadioSession * RRadioSession::NewL(void)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmserv/radioutility/radioserver/Session/stub/eabi/RadioSession_Stubu.def	Fri Aug 06 16:55:00 2010 -0500
@@ -0,0 +1,78 @@
+EXPORTS
+	_ZN13RRadioSession10GetPSByPTYEi @ 1 NONAME
+	_ZN13RRadioSession10SetBalanceEii @ 2 NONAME
+	_ZN13RRadioSession10SetSquelchEi @ 3 NONAME
+	_ZN13RRadioSession11GetFreqByTAEv @ 4 NONAME
+	_ZN13RRadioSession11StationSeekEi @ 5 NONAME
+	_ZN13RRadioSession12GetClockTimeER9TDateTime @ 6 NONAME
+	_ZN13RRadioSession12GetFreqByPTYEi @ 7 NONAME
+	_ZN13RRadioSession12GetRadioTextER6TBuf16ILi64EE @ 8 NONAME
+	_ZN13RRadioSession12SetFrequencyEi @ 9 NONAME
+	_ZN13RRadioSession13SetVolumeRampERK25TTimeIntervalMicroSeconds @ 10 NONAME
+	_ZN13RRadioSession14CancelAFSearchEv @ 11 NONAME
+	_ZN13RRadioSession15CancelGetPSByTAEv @ 12 NONAME
+	_ZN13RRadioSession15StationSeekByTAEi @ 13 NONAME
+	_ZN13RRadioSession15StationSeekByTPEi @ 14 NONAME
+	_ZN13RRadioSession16CancelGetPSByPTYEv @ 15 NONAME
+	_ZN13RRadioSession16GetProgrammeTypeERi @ 16 NONAME
+	_ZN13RRadioSession16GetRadioTextPlusE17TRsRdsRTplusClassR6TBuf16ILi64EE @ 17 NONAME
+	_ZN13RRadioSession16StationSeekByPTYEii @ 18 NONAME
+	_ZN13RRadioSession17CancelGetFreqByTAEv @ 19 NONAME
+	_ZN13RRadioSession17CancelStationSeekEv @ 20 NONAME
+	_ZN13RRadioSession17CustomCommandSyncERK8TPckgBufI22TMMFMessageDestinationEiRK6TDesC8S7_ @ 21 NONAME
+	_ZN13RRadioSession17CustomCommandSyncERK8TPckgBufI22TMMFMessageDestinationEiRK6TDesC8S7_R5TDes8 @ 22 NONAME
+	_ZN13RRadioSession17SetFrequencyRangeE17TRsFrequencyRange @ 23 NONAME
+	_ZN13RRadioSession18CancelGetFreqByPTYEv @ 24 NONAME
+	_ZN13RRadioSession18CancelSetFrequencyEv @ 25 NONAME
+	_ZN13RRadioSession18CustomCommandAsyncERK8TPckgBufI22TMMFMessageDestinationEiRK6TDesC8S7_R14TRequestStatus @ 26 NONAME
+	_ZN13RRadioSession18CustomCommandAsyncERK8TPckgBufI22TMMFMessageDestinationEiRK6TDesC8S7_R5TDes8R14TRequestStatus @ 27 NONAME
+	_ZN13RRadioSession18ForceMonoReceptionEi @ 28 NONAME
+	_ZN13RRadioSession19GetProgrammeServiceER6TBuf16ILi8EE @ 29 NONAME
+	_ZN13RRadioSession19NotifyRdsDataChangeE10TRsRdsData @ 30 NONAME
+	_ZN13RRadioSession19RequestTunerControlE8TRsTuner @ 31 NONAME
+	_ZN13RRadioSession20CancelRdsStationSeekEv @ 32 NONAME
+	_ZN13RRadioSession21GetAutomaticSwitchingERi @ 33 NONAME
+	_ZN13RRadioSession21SetAutomaticSwitchingEi @ 34 NONAME
+	_ZN13RRadioSession23CancelSetFrequencyRangeEv @ 35 NONAME
+	_ZN13RRadioSession24EnableTunerInOfflineModeEi @ 36 NONAME
+	_ZN13RRadioSession25CancelNotifyRdsDataChangeEv @ 37 NONAME
+	_ZN13RRadioSession25GetTrafficProgrammeStatusERi @ 38 NONAME
+	_ZN13RRadioSession25NotifyRadioTextPlusChangeER6RArrayIiE @ 39 NONAME
+	_ZN13RRadioSession26GetProgrammeIdentificationERi @ 40 NONAME
+	_ZN13RRadioSession28GetTrafficAnnouncementStatusERi @ 41 NONAME
+	_ZN13RRadioSession31CancelNotifyRadioTextPlusChangeEv @ 42 NONAME
+	_ZN13RRadioSession31GetAutomaticTrafficAnnouncementERi @ 43 NONAME
+	_ZN13RRadioSession31SetAutomaticTrafficAnnouncementEi @ 44 NONAME
+	_ZN13RRadioSession4MuteEi @ 45 NONAME
+	_ZN13RRadioSession4PlayEv @ 46 NONAME
+	_ZN13RRadioSession4StopEi @ 47 NONAME
+	_ZN13RRadioSession5CloseEv @ 48 NONAME
+	_ZN13RRadioSession7ConnectER14MRadioObserveri @ 49 NONAME
+	_ZN13RRadioSession9GetPSByTAEv @ 50 NONAME
+	_ZN13RRadioSession9SetVolumeEi @ 51 NONAME
+	_ZN13RRadioSessionC1Ev @ 52 NONAME
+	_ZN13RRadioSessionC2Ev @ 53 NONAME
+	_ZNK13RRadioSession10GetBalanceERiS0_ @ 54 NONAME
+	_ZNK13RRadioSession10GetSquelchERi @ 55 NONAME
+	_ZNK13RRadioSession11PlayerStateER14TRsPlayerState @ 56 NONAME
+	_ZNK13RRadioSession12GetFrequencyERi @ 57 NONAME
+	_ZNK13RRadioSession12GetMaxVolumeERi @ 58 NONAME
+	_ZNK13RRadioSession13GetMuteStatusERi @ 59 NONAME
+	_ZNK13RRadioSession13GetStereoModeERi @ 60 NONAME
+	_ZNK13RRadioSession17GetFrequencyRangeER17TRsFrequencyRangeRiS2_ @ 61 NONAME
+	_ZNK13RRadioSession17GetSignalStrengthERi @ 62 NONAME
+	_ZNK13RRadioSession18GetRdsCapabilitiesER18TRsRdsCapabilities @ 63 NONAME
+	_ZNK13RRadioSession18GetRdsSignalStatusERi @ 64 NONAME
+	_ZNK13RRadioSession20GetMaxSignalStrengthERi @ 65 NONAME
+	_ZNK13RRadioSession20GetTunerCapabilitiesER20TRsTunerCapabilities @ 66 NONAME
+	_ZNK13RRadioSession21GetForceMonoReceptionERi @ 67 NONAME
+	_ZNK13RRadioSession7VersionEv @ 68 NONAME
+	_ZNK13RRadioSession9GetVolumeERi @ 69 NONAME
+	_ZTI13CRadioRequest @ 70 NONAME
+	_ZTI13RRadioSession @ 71 NONAME
+	_ZTI18CRadioEventHandler @ 72 NONAME
+	_ZTV13CRadioRequest @ 73 NONAME
+	_ZTV13RRadioSession @ 74 NONAME
+	_ZTV18CRadioEventHandler @ 75 NONAME
+	_ZN13RRadioSession4NewLEv @ 76 NONAME
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmserv/radioutility/radioserver/Session/stub/group/RadioSession_Stub.mmp	Fri Aug 06 16:55:00 2010 -0500
@@ -0,0 +1,52 @@
+/*
+* Copyright (c) 2002-2004 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:  Project file for RadioSession Stub for Radio unit tests
+*
+*/
+
+
+#include <platform_paths.hrh>
+
+TARGET		RadioSession_Stub.dll
+CAPABILITY	CAP_CLIENT_DLL
+TARGETTYPE	DLL
+UID		0x1000008d 0x01000031
+VENDORID	VID_DEFAULT
+VERSION 10.1
+
+SOURCEPATH	../../Src
+SOURCE		RadioRequest.cpp
+SOURCE		RadioEventHandler.cpp
+
+SOURCEPATH ../src
+SOURCE StubRadioSession.cpp
+
+USERINCLUDE ../Src
+USERINCLUDE	../../Src
+USERINCLUDE	../../../Inc
+USERINCLUDE	../../../../inc
+USERINCLUDE /sf/mw/mmmw/mmserv/radioutility/radio_utility/stub/src
+USERINCLUDE             /sf/mw/mmmw/mmserv/radioutility/radio_utility/stub/src
+USERINCLUDE             /sf/mw/mmmw/mmserv/radioutility/radio_utility/src
+USERINCLUDE             /sf/mw/mmmw/mmserv/radioutility/inc
+USERINCLUDE             /sf/mw/mmmw/mmserv/inc
+USERINCLUDE             /sf/mw/mmmw/inc
+USERINCLUDE /sf/app/radio/radioengine/utils/inc
+
+MW_LAYER_SYSTEMINCLUDE
+
+LIBRARY		euser.lib
+LIBRARY		MmfControllerFramework.lib
+LIBRARY     flogger.lib
+MACRO STUB_CONSTELLATION
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmserv/radioutility/radioserver/Session/stub/group/bld.inf	Fri Aug 06 16:55:00 2010 -0500
@@ -0,0 +1,31 @@
+/*
+* Copyright (c) 2002-2004 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:  Project build file for RadioSession's stub
+*
+*/
+
+
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_EXPORTS
+../src/RadioStubManager.h /epoc32/include/RadioStubManager.h
+
+
+PRJ_MMPFILES
+RadioSession_Stub.mmp
+
+
+//  End of File  
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmserv/radioutility/radioserver/Session/stub/src/RadioStubManager.h	Fri Aug 06 16:55:00 2010 -0500
@@ -0,0 +1,263 @@
+/*
+* Copyright (c) 2002-2004 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:  
+*
+*/
+
+#ifndef RADIOSTUBMANAGER_H_
+#define RADIOSTUBMANAGER_H_
+#include <e32std.h>
+#include <e32base.h>
+
+#include <RadioFmTunerUtility.h>
+#include <RadioPlayerUtility.h>
+#include <RadioRdsUtility.h>
+#include <remconcallhandlingtargetobserver.h>
+#include <remconcoreapitargetobserver.h>
+
+#include "RadioServerData.h"
+#include "mradioheadseteventobserver.h"
+#include "RadioStubManager.h"
+
+_LIT(KRadioStubManagerLocalChunkName, "RadioStubManagerLocalChunkName");
+
+struct TStubError
+    {
+
+    void SetStubError( TFmRadioTunerError aError, TUint aFailCounter = 1, TBool aFailForEver = EFalse ) 
+        {
+        iError = aError;
+        iFailCounter = aFailCounter;
+        iFailForEver = aFailForEver; };
+    TInt Error() 
+        {
+        TInt aError (iError);
+        if (iFailCounter)
+            {
+            --iFailCounter;
+            }
+        else if (iFailForEver)
+            {
+            }
+        else
+            {
+            aError = KErrNone;
+            }            
+        return aError;
+        }
+    TFmRadioTunerError iError;
+    TUint iFailCounter;
+    TBool iFailForEver;
+    };
+
+struct TLeaveError
+    {
+    void Set( TInt aError = KErrGeneral );
+    TInt iError;
+    };
+
+struct SRadioStubManager
+    {
+public:
+    void  FillZ() 
+        { 
+        Mem::FillZ( this, sizeof( SRadioStubManager ) ); 
+        }
+public:
+    enum TCenRepDbs
+        {
+        // Redefine CenRep databases for test purposes.
+        // Original constant names are got by eliminating leading "ESub_"-prefix.
+        EStub_KPSUidCtsyCallInformation = 0x01001001,
+        EStub_KUidSystemCategory = 0x01001002,
+        EStub_KPSUidVoiceUiAccMonitor = 0x01001003,
+        EStub_KPSUidMMFAudioServer = 0x01001004,    
+        EStub_KRadioPSUid = 0x01001005,
+        EStub_KRadioServerPropertyCategory = 0x01001006
+        };
+    
+    struct TRemConTargetData
+    {
+    TLeaveError iLeaveNewL;
+    TLeaveError iLeaveConstructL;
+    
+    
+    MRemConCoreApiTargetObserver*   iRemConCoreApiTargetObserver;
+    MRemConCallHandlingTargetObserver*  iRemConCallHandlingTargetObserver;
+    } mutable iRemConTarget;
+    
+    struct TAccessoryObserverData
+    {
+    TLeaveError iLeaveNewL;
+    TLeaveError iLeaveIsHeadsetConnectedL;
+    TLeaveError iLeaveConstructL;
+    
+    TBool iHeadsetConnected;
+    MRadioHeadsetEventObserver* iObserver;
+    
+    
+    } mutable iAccessoryObserver;
+    
+    struct TFmTunerStubData
+        {
+        TRsTunerCapabilities iCaps;
+        TStubError iGetCapabilitiesError;
+        
+        
+        TBool iTunerInOfflineMode;
+        TStubError iEnableTunerInOfflineModeError;
+        
+        
+        TRsFrequencyRange iRange;
+        TRsFrequencyRange iPreviousRange;
+        TInt iMinFreq;
+        TInt iMaxFreq;
+        TStubError iGetFrequencyRangeError;
+        TStubError iSetFrequencyRangeError;
+        
+        TInt iFrequency;
+        TInt iPreviousFrequency;
+        TStubError iGetFrequencyError;
+        TStubError iSetFrequencyError;
+
+        struct TScanStations
+        {
+        TInt iCount;
+        TInt iMinFreq;
+        TInt iFrequencyStepSize;        
+        } mutable iScanStations;
+        
+        TBool iStationSeekUpwards;
+
+        TInt iSignalStrength;
+        TStubError iGetSignalStrengthError;
+        
+        TInt iMaxSignalStrength;
+        TStubError iGetMaxSignalStrengthError;
+        
+        TBool iStereoMode;
+        TStubError iGetStereoModeError;
+        
+        TBool iForcedMono;
+        TStubError iGetForcedMonoReceptionError;
+        TStubError iForcedMonoReceptionError;
+        
+        TBool iSquelch;
+        TStubError iSetSquelchError;
+        TStubError iGetSquelchError;
+        } mutable iTuner;
+
+    struct TPlayerStubData
+        {
+        TLeaveError iLeaveNewL;
+        TLeaveError iLeaveErrorForConstructL;
+        MRadioPlayerObserver* iRadioPlayerUtilityClient;
+
+        TRsPlayerState iPlayerState;
+        
+        TBool iMuteStatus;
+        TStubError iMuteError;
+        
+        TInt iVolume;
+        TStubError iSetVolumeError;
+        TStubError iGetVolumeError;
+        
+        TTimeIntervalMicroSeconds iRampInterval;
+        TStubError iSetVolumeRampError;
+        
+        TInt iMaxVolume;
+        TStubError iGetMaxVolumeError;
+        
+        TInt iLeftPercentage;
+        TInt iRightPercentage;
+        TStubError iSetBalanceError;
+        TStubError iGetBalanceError;
+        } mutable iPlayer;
+        
+    struct TRdsStubData
+        {
+        TLeaveError iLeaveNewL;
+        TLeaveError iLeaveErrorForConstructL;
+        MRadioRdsObserver* iRadioRdsUtilityClient;
+        TRsRdsCapabilities iCaps;
+        TStubError iGetCapabilitiesError;
+        
+        TBool iRdsSignal;
+        TStubError iGetRdsSignalStatusError;
+        
+        TStubError iNotifyRdsDataChangeError;    
+        
+        TBool iAutomaticSwitching;
+        TStubError iSetAutomaticSwitchingError;
+        TStubError iGetAutomaticSwitchingError;
+        
+        TStubError iStationSeekByPTYError;
+        TStubError iStationSeekByTAError;
+        TStubError iStationSeekByTPError;
+        TInt iFrequency;
+        TStubError iGetFreqByPTYError;
+        TStubError iGetFreqByTAError;
+        TStubError iGetPSByPTYError;
+        TStubError iGetPSByTAError;
+            
+        RArray<TRdsPSName> iPsList;
+        RArray<TInt> iFreqList;
+        
+        TInt iPi;
+        TStubError iGetProgrammeIdentificationError;
+        
+        TRdsProgrammeType iPty;
+        TStubError iGetProgrammeTypeError;
+        
+        TRdsPSName iPs;
+        TStubError iGetProgrammeServiceError;
+        
+        // Radio Text
+        TRdsRTplusClass iRtPlusClass;
+        TRdsRadioText iRtPlusData;
+        TStubError iGetRadioTextPlusError;
+        TRsRdsRadioText iRt;
+        TStubError iGetRadioTextError;
+        
+        // Automatic traffic announcement
+        TBool iAuto;
+        TStubError iGetTrafficAnnouncementStatusError;
+        TStubError iSetTrafficAnnouncementStatusError;
+    
+        TBool iTaStatus;
+        TStubError iGetAutomaticTrafficAnnouncementError;
+        TStubError iSetAutomaticTrafficAnnouncementError;
+        
+        TDateTime iCt;
+        TStubError iGetClockTimeError;
+        
+        TBool iTpStatus;
+        TStubError iGetTrafficProgrammeStatusError;
+        } mutable iRds;
+        
+    struct TMonitorStubData
+        {
+        TInt    iNone;
+        } mutable iMonitor;
+    };
+
+const TUid KStub_KRadioServerPropertyCategory = {SRadioStubManager::EStub_KRadioServerPropertyCategory};
+const TUid KStub_KUidSystemCategory = {SRadioStubManager::EStub_KUidSystemCategory};
+const TUid KStub_KPSUidCtsyCallInformation = {SRadioStubManager::EStub_KPSUidCtsyCallInformation};
+const TUid KStub_KPSUidVoiceUiAccMonitor = {SRadioStubManager::EStub_KPSUidVoiceUiAccMonitor};
+const TUid KStub_KPSUidMMFAudioServer = {SRadioStubManager::EStub_KPSUidMMFAudioServer};
+const TUid KStub_KRadioPSUid = {SRadioStubManager::EStub_KRadioPSUid};
+const TUid KStub_KRadioCRUid = {0x101FF976}; // tried with this {SRadioStubManager::EStub_KRadioPSUid} but failed
+
+#endif /* RADIOSTUBMANAGER_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmserv/radioutility/radioserver/Session/stub/src/StubRadioSession.cpp	Fri Aug 06 16:55:00 2010 -0500
@@ -0,0 +1,1773 @@
+/*
+* Copyright (c) 2002-2004 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:  This class is the main interface to the RadioServer. It implements
+*				 the client-side session.
+*
+*/
+
+
+
+// INCLUDE FILES
+#include 	<e32math.h>
+#include    "StubRadioSession.h"
+#include    "RadioClientServer.h"
+#include	"RadioRequest.h"
+#include	"RadioEventHandler.h"
+#include    "RadioDebug.h"
+#include    "trace.h"
+
+// CONSTANTS
+// Index to list of asynchronous requests that generates response to MRadioObserver.
+const TInt KReqInternal				 = 0;
+const TInt KReqRequestTunerControl   = 1;
+const TInt KReqSetFrequencyRange     = 2;
+const TInt KReqSetFrequency          = 3;
+const TInt KReqStationSeek           = 4;
+const TInt KReqPlay					 = 5;
+const TInt KReqStationSeekByPTY      = 6;
+const TInt KReqStationSeekByTA       = 7;
+const TInt KReqStationSeekByTP       = 8;
+
+// Max number of retries to start the server
+const TInt KRadioStartRetry	= 2;
+// Minimum of one for each asynchronous message + one to allow cancel
+const TInt KRadioMessageSlots = 11;
+
+#define TUNER  iRadioStubManager->iTuner
+#define PLAYER  iRadioStubManager->iPlayer
+#define RDS  iRadioStubManager->iRds
+
+
+// ============================= LOCAL FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// StartServer
+// Static function to start the server process thread.
+// Start the server process/thread which lives in an EPOCEXE object.
+// Returns: TInt: KErrNone (0) if no error
+// -----------------------------------------------------------------------------
+//
+static TInt StartServer()
+	{
+    FUNC_LOG;
+
+    const TUidType serverUid(KNullUid, KNullUid, KRadioServerUid3);
+
+    // We just create a new server process. Simultaneous launching of two such
+    // processes should be detected when the second one attempts to create
+    // the server object, failing with KErrAlreadyExists.
+    RProcess server;
+    TInt r = server.Create(KRadioServerImg, KNullDesC, serverUid);
+
+    if ( r != KErrNone )
+        {
+        INFO_1("server.Create() failed [%d]", r);
+        return r;
+        }
+    TRequestStatus stat;
+    server.Rendezvous(stat);
+    if ( stat != KRequestPending )
+        {
+        server.Kill(0);     // abort startup
+        }
+    else
+        {
+        server.Resume();    // logon OK - start the server
+        }
+    User::WaitForRequest(stat);     // wait for start or death
+    // we can't use the 'exit reason' if the server panicked as this
+    // is the panic 'reason' and may be '0' which cannot be distinguished
+    // from KErrNone
+    r = (server.ExitType() == EExitPanic) ? KErrGeneral : stat.Int();
+    server.Close();
+    return r;
+	}
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// RRadioSession::NewL
+// Two-phased constructor except no need for ConstrucL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C RRadioSession* RRadioSession::NewL()
+    {
+    FUNC_LOG;
+    RRadioSession* self = new (ELeave) RRadioSession();
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// RRadioSession::RRadioSession
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C RRadioSession::RRadioSession()
+	:	iConnected(EFalse),
+		iDestinationPckg(TMMFMessageDestination(KRadioServerInterfaceUid, KRadioServerObjectHandle)),
+		iObserver(NULL),
+		iPrimaryClient(EFalse),
+		iRdsNotify(EFalse)
+    {
+    FUNC_LOG;
+    }
+
+// -----------------------------------------------------------------------------
+// RRadioSession::Connect
+// Create a client-side session. Start the server if not started already.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt RRadioSession::Connect(
+	MRadioObserver& aObserver,
+	TBool aPrimaryClient )
+	{
+    FUNC_LOG;
+    INFO_1("Size of RRadioSession: %i", sizeof(RRadioSession) );
+    // check if already connected
+    if ( iConnected )
+        {
+        INFO("already connected");
+        return KErrAlreadyExists;
+        }
+
+    TInt retry = KRadioStartRetry;
+    TInt err = KErrGeneral;
+    TInt numMessageSlots = KRadioMessageSlots;
+    for (;;)
+        {
+        // Try to create a new session with the server
+        err = CreateSession(KRadioServerName, Version(), numMessageSlots);
+        if ( (err != KErrNotFound) && (err != KErrServerTerminated) )
+            {
+            break;  // Connected to existing server - ok
+            }
+        if ( --retry == 0 )
+            {
+            break;  // Failed.
+            }
+        // Server not running, try to start it.
+        err = StartServer();
+        if ( (err != KErrNone) && (err != KErrAlreadyExists) )
+            {
+            break;  // Server not launched - propagate error
+            }
+        }
+
+    if ( err != KErrNone )
+        {
+        INFO_1("Unable to start server [%d]", err);
+        return err;
+        }
+    // Dooing some temporary manipulation for heap
+    User::Check();
+    User::CompressAllHeaps();
+    CRadioRequest* req( NULL );
+    TRAP(err, req = CRadioRequest::NewLC(*this, aObserver, ERadioServNone); CleanupStack::Pop( req ) );
+    iExtraRequestForBugHunting = req;   
+    User::Check();
+    User::CompressAllHeaps();
+    //delete iExtraRequestForBugHunting;
+    //iExtraRequestForBugHunting = NULL;
+    
+    // Create active object request handlers and add it to scheduler
+    TRAP(err, StartRequestHandlersL(aObserver));
+    if ( err == KErrNone )
+        {
+        // Create active object event handlers and add it to scheduler
+        TRAP(err, StartEventHandlersL(aObserver));
+        if ( err == KErrNone )
+            {
+            iConnected = ETrue;
+            iObserver = &aObserver;
+            if ( aPrimaryClient )
+                {
+                iPrimaryClient = ETrue;
+                err = SendReceive(ERadioServAddPrimaryClient, TIpcArgs(&iDestinationPckg));
+                }
+            }
+        else
+            {
+            iRequests.ResetAndDestroy();
+            iEventHandlers.ResetAndDestroy();
+            }
+        }
+    else
+        {
+        iRequests.ResetAndDestroy();
+        }
+    // Open chunk for test configuration/control data
+    // Open chunk for test configuration/control data
+    User::Check();
+    User::CompressAllHeaps();
+    err = iRadioStubManagerChunk.OpenGlobal(
+            KRadioStubManagerLocalChunkName,
+            EFalse, // == Read | Write
+            EOwnerThread );
+    if (err)
+        {
+        goto exitAndReturn;
+        }
+    User::Check();
+    User::CompressAllHeaps();
+    if ( sizeof(SRadioStubManager) > iRadioStubManagerChunk.MaxSize() )
+        {
+        err =  KErrTooBig;
+        goto exitAndReturn;
+        }
+    TUint8* basePtr = iRadioStubManagerChunk.Base();
+    User::LeaveIfNull( basePtr );    
+    if (!basePtr)
+        {
+        err = KErrGeneral;
+        goto exitAndReturn;
+        }    
+    User::Check();
+    User::CompressAllHeaps();
+    iRadioStubManager = (SRadioStubManager*)basePtr;    
+
+exitAndReturn:    
+    User::Check();
+    User::CompressAllHeaps();
+    INFO_1("exit err=[%d]", err);
+    return err;
+	}
+
+// -----------------------------------------------------------------------------
+// RRadioSession::Version
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TVersion RRadioSession::Version() const
+	{
+	return(TVersion(KRadioServerVersionMajor, KRadioServerVersionMinor, KRadioServerVersionBuild));
+	}
+
+// -----------------------------------------------------------------------------
+// RRadioSession::Close
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void RRadioSession::Close()
+	{
+    FUNC_LOG;
+
+    //delete iExtraRequestForBugHunting;
+    iEventHandlers.ResetAndDestroy();
+    iEventHandlers.Close();
+
+    iRdsEventHandlers.ResetAndDestroy();
+    iRdsEventHandlers.Close();
+
+    for ( TInt i = (iRequests.Count() - 1) ; i >= 0; i = (iRequests.Count()- 1)  )
+        {
+        INFO_2("iRequests[i] pointer: 0x%x, no: %i", *&iRequests[i], i );
+        CRadioRequest* req = *&iRequests[i];
+        iRequests.Remove(i);
+        delete req;
+        }   
+    //iRequests.ResetAndDestroy();
+    iRequests.Close();
+
+    if ( iConnected )
+        {
+        iConnected = EFalse;
+        if ( iPrimaryClient )
+            {
+            SendReceive(ERadioServRemovePrimaryClient, TIpcArgs(&iDestinationPckg));
+            }
+        RSessionBase::Close();
+        }
+    // Dooing some temporary manipulation for heap
+    //User::Check();
+    //User::CompressAllHeaps();
+    delete iExtraRequestForBugHunting;
+	}
+
+//********** TunerUtility control begins
+
+// -----------------------------------------------------------------------------
+// RRadioSession::RequestTunerControl
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void RRadioSession::RequestTunerControl(
+	TRsTuner /*aTuner*/ )
+	{
+    FUNC_LOG;
+	if ( iConnected )
+		{
+        if ( !iRequests[KReqRequestTunerControl]->IsActive() )
+            {
+            iRequests[KReqRequestTunerControl]->CompleteRequest(ERadioServRequestTunerControl, KErrNone);
+            }
+		}
+	else
+		{
+		iRequests[KReqInternal]->CompleteRequest(ERadioServRequestTunerControl, KErrDisconnected);
+		}
+	}
+
+// -----------------------------------------------------------------------------
+// RRadioSession::GetTunerCapabilities
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt RRadioSession::GetTunerCapabilities(
+	TRsTunerCapabilities& aCaps ) const
+	{
+    FUNC_LOG;
+	if ( iConnected )
+		{
+        TInt err( TUNER.iGetCapabilitiesError.Error() );
+        if ( KErrNone == err )
+            {
+            aCaps.iFrequencyRange = TUNER.iCaps.iFrequencyRange;
+            aCaps.iCapabilities = TUNER.iCaps.iCapabilities;
+            aCaps.iAdditionalFunctions1 = TUNER.iCaps.iAdditionalFunctions1;
+            aCaps.iAdditionalFunctions2 = TUNER.iCaps.iAdditionalFunctions2;            
+            }
+	    return err;
+		}
+	else
+		{
+		return KErrDisconnected;
+		}
+	}
+
+// -----------------------------------------------------------------------------
+// RRadioSession::EnableTunerInOfflineMode
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt RRadioSession::EnableTunerInOfflineMode(
+	TBool aEnable )
+	{
+    FUNC_LOG;
+	if ( iConnected )
+		{
+        TInt err( TUNER.iEnableTunerInOfflineModeError.Error() );
+        if ( KErrNone == err )
+            {
+            TUNER.iTunerInOfflineMode = aEnable;
+            }
+	    return err;
+		}
+	else
+		{
+		return KErrDisconnected;
+		}
+	}
+
+// -----------------------------------------------------------------------------
+// RRadioSession::SetFrequencyRange
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void RRadioSession::SetFrequencyRange(
+	TRsFrequencyRange aRange )
+	{
+    FUNC_LOG;
+	if ( iConnected )
+		{
+        TInt err( TUNER.iSetFrequencyRangeError.Error() );
+        if ( KErrNone == err )
+            {
+            TUNER.iPreviousRange = TUNER.iRange;
+            TUNER.iRange = aRange;
+            }
+        if ( iRequests[KReqSetFrequencyRange]->IsActive() )
+            {
+            iRequests[KReqSetFrequencyRange]->Cancel();
+            }
+        iRequests[KReqSetFrequencyRange]->CompleteRequest(ERadioServSetFrequencyRange, err);
+		}
+	else
+		{
+		iRequests[KReqInternal]->CompleteRequest(ERadioServSetFrequencyRange, KErrDisconnected);
+		}
+	}
+
+// -----------------------------------------------------------------------------
+// RRadioSession::CancelSetFrequencyRange
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void RRadioSession::CancelSetFrequencyRange()
+	{
+    FUNC_LOG;
+	if ( iConnected && iRequests[KReqSetFrequencyRange]->IsActive() )
+		{
+		iRequests[KReqSetFrequencyRange]->Cancel();
+		}
+	}
+
+// -----------------------------------------------------------------------------
+// RRadioSession::GetFrequencyRange
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt RRadioSession::GetFrequencyRange(
+	TRsFrequencyRange& aRange,
+	TInt& aMinFreq,
+	TInt& aMaxFreq) const
+	{
+    FUNC_LOG;
+	if ( iConnected )
+		{
+        TInt err( TUNER.iGetFrequencyRangeError.Error() );
+        if ( KErrNone == err )
+            {
+            aRange = TUNER.iRange;
+            aMinFreq = TUNER.iMinFreq;
+            aMaxFreq = TUNER.iMaxFreq;
+            }
+	    return err;
+		}
+	else
+		{
+		return KErrDisconnected;
+		}
+	}
+
+// -----------------------------------------------------------------------------
+// RRadioSession::SetFrequency
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void RRadioSession::SetFrequency(
+	TInt aFrequency )
+	{
+    FUNC_LOG;
+	if ( iConnected )
+		{
+	    TUint err( TUNER.iSetFrequencyError.Error() );
+	    if  ( KErrNone == err )
+	        {
+	        TUNER.iPreviousFrequency = TUNER.iFrequency;
+	        TUNER.iFrequency = aFrequency;
+	        }       
+        if ( iRequests[KReqSetFrequency]->IsActive() )
+            {
+            iRequests[KReqSetFrequency]->Cancel();
+            }
+        iRequests[KReqSetFrequency]->CompleteRequest(ERadioServSetFrequency, err);
+		}
+	else
+		{
+		iRequests[KReqInternal]->CompleteRequest(ERadioServSetFrequency, KErrDisconnected);
+		}
+	}
+
+// -----------------------------------------------------------------------------
+// RRadioSession::CancelSetFrequency
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void RRadioSession::CancelSetFrequency()
+	{
+    FUNC_LOG;
+	if ( iConnected && iRequests[KReqSetFrequency]->IsActive() )
+		{
+		iRequests[KReqSetFrequency]->Cancel();
+		}
+    TUNER.iFrequency = TUNER.iPreviousFrequency;
+    TUNER.iPreviousFrequency = 0;
+	}
+
+// -----------------------------------------------------------------------------
+// RRadioSession::GetFrequency
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt RRadioSession::GetFrequency(
+	TInt& aFrequency ) const
+	{
+    FUNC_LOG;
+	if ( iConnected )
+		{
+        TInt err( TUNER.iGetFrequencyError.Error() );
+        if ( KErrNone == err )
+            {
+            aFrequency = TUNER.iFrequency;
+            }
+	    return err;
+		}
+	else
+		{
+		return KErrDisconnected;
+		}
+	}
+
+// -----------------------------------------------------------------------------
+// RRadioSession::StationSeek
+// -----------------------------------------------------------------------------
+EXPORT_C void RRadioSession::StationSeek(
+	TBool aUpwards )
+	{
+    FUNC_LOG;
+    INFO_1("aUpwards: %D", aUpwards );
+	if ( iConnected )
+		{
+	    TUNER.iStationSeekUpwards = aUpwards;
+        if ( iRequests[KReqStationSeek]->IsActive() )
+            {
+            iRequests[KReqStationSeek]->Cancel();
+            }
+        TInt err( KErrNone);
+        if ( KErrNotFound == TUNER.iScanStations.iCount )
+            {
+            err = KErrNotFound;
+            }
+        else if ( TUNER.iScanStations.iCount )
+            {
+            iRequests[KReqStationSeek]->iInt = TUNER.iScanStations.iMinFreq + ( TUNER.iScanStations.iCount * TUNER.iScanStations.iFrequencyStepSize );
+            --TUNER.iScanStations.iCount;
+            if ( 0 == TUNER.iScanStations.iCount )
+                {
+                TUNER.iScanStations.iCount = KErrNotFound;
+                }
+            }
+        else
+            {
+            iRequests[KReqStationSeek]->iInt = TUNER.iFrequency;
+            }
+        iRequests[KReqStationSeek]->CompleteRequest(ERadioServStationSeek, err);
+		}
+	else
+		{
+		iRequests[KReqInternal]->CompleteRequest(ERadioServStationSeek, KErrDisconnected);
+		}
+	}
+
+// -----------------------------------------------------------------------------
+// RRadioSession::CancelStationSeek
+// -----------------------------------------------------------------------------
+EXPORT_C void RRadioSession::CancelStationSeek()
+	{
+    FUNC_LOG;
+	if ( iConnected && iRequests[KReqStationSeek]->IsActive() )
+		{
+		iRequests[KReqStationSeek]->Cancel();
+		}
+	TUNER.iScanStations.iCount = 0;
+    TUNER.iStationSeekUpwards = EFalse;
+	}
+
+// -----------------------------------------------------------------------------
+// RRadioSession::GetSignalStrength
+// -----------------------------------------------------------------------------
+EXPORT_C TInt RRadioSession::GetSignalStrength(
+	TInt& aSignalStrength ) const
+	{
+    FUNC_LOG;
+	if ( iConnected )
+		{
+        TInt err( TUNER.iGetSignalStrengthError.Error() );
+        if ( KErrNone == err )
+            {
+            aSignalStrength = TUNER.iSignalStrength;
+            }
+	    return err;
+		}
+	else
+		{
+		return KErrDisconnected;
+		}
+	}
+
+// -----------------------------------------------------------------------------
+// RRadioSession::GetMaxSignalStrength
+// -----------------------------------------------------------------------------
+EXPORT_C TInt RRadioSession::GetMaxSignalStrength(
+	TInt& aMaxSignalStrength ) const
+	{
+    FUNC_LOG;
+	if ( iConnected )
+		{
+        TInt err( TUNER.iGetMaxSignalStrengthError.Error() );
+        if ( KErrNone == err )
+            {
+            aMaxSignalStrength = TUNER.iMaxSignalStrength;
+            }
+	    return err;
+		}
+	else
+		{
+		return KErrDisconnected;
+		}
+	}
+
+// -----------------------------------------------------------------------------
+// RRadioSession::GetStereoMode
+// -----------------------------------------------------------------------------
+EXPORT_C TInt RRadioSession::GetStereoMode(
+	TBool& aStereo ) const
+	{
+    FUNC_LOG;
+	if ( iConnected )
+		{
+        TInt err( TUNER.iGetStereoModeError.Error() );
+        if ( KErrNone == err )
+            {
+            aStereo = TUNER.iStereoMode;
+            }
+	    return err;
+		}
+	else
+		{
+		return KErrDisconnected;
+		}
+	}
+
+// -----------------------------------------------------------------------------
+// RRadioSession::ForceMonoReception
+// -----------------------------------------------------------------------------
+EXPORT_C TInt RRadioSession::ForceMonoReception(
+	TBool aForcedMono )
+	{
+    FUNC_LOG;
+	if ( iConnected )
+		{
+        TInt err( TUNER.iForcedMonoReceptionError.Error() );
+        if ( KErrNone == err )
+            {
+            TUNER.iForcedMono = aForcedMono;
+            }
+	    return err;
+		}
+	else
+		{
+		return KErrDisconnected;
+		}
+	}
+
+// -----------------------------------------------------------------------------
+// RRadioSession::GetForceMonoReception
+// -----------------------------------------------------------------------------
+EXPORT_C TInt RRadioSession::GetForceMonoReception(
+	TBool& aForcedMono ) const
+	{
+    FUNC_LOG;
+	if ( iConnected )
+		{
+        TInt err( TUNER.iGetForcedMonoReceptionError.Error() );
+        if ( KErrNone == err )
+            {
+            aForcedMono = TUNER.iForcedMono;
+            }
+	    return err;
+		}
+	else
+		{
+		return KErrDisconnected;
+		}
+	}
+
+// -----------------------------------------------------------------------------
+// RRadioSession::SetSquelch
+// -----------------------------------------------------------------------------
+EXPORT_C TInt RRadioSession::SetSquelch(
+	TBool aEnabled )
+	{
+    FUNC_LOG;
+	if ( iConnected )
+		{
+        TInt err( TUNER.iSetSquelchError.Error() );
+        if ( KErrNone == err )
+            {
+            TUNER.iSquelch = aEnabled;
+            }
+	    return err;
+		}
+	else
+		{
+		return KErrDisconnected;
+		}
+	}
+
+// -----------------------------------------------------------------------------
+// RRadioSession::GetSquelch
+// -----------------------------------------------------------------------------
+EXPORT_C TInt RRadioSession::GetSquelch(
+	TBool& aSquelch ) const
+	{
+    FUNC_LOG;
+	if ( iConnected )
+		{
+        TInt err( TUNER.iGetSquelchError.Error() );
+        if ( KErrNone == err )
+            {
+            aSquelch = TUNER.iSquelch;
+            }
+	    return err;
+		}
+	else
+		{
+		return KErrDisconnected;
+		}
+	}
+
+//********** PlayerUtility control begins
+
+// -----------------------------------------------------------------------------
+// RRadioSession::PlayerState
+// -----------------------------------------------------------------------------
+EXPORT_C TInt RRadioSession::PlayerState(
+	TRsPlayerState& aState ) const
+	{
+    FUNC_LOG;
+	if ( iConnected )
+		{
+	    aState = PLAYER.iPlayerState;
+        return KErrNone;
+		}
+	else
+		{
+		return KErrDisconnected;
+		}
+	}
+
+// -----------------------------------------------------------------------------
+// RRadioSession::Play
+// -----------------------------------------------------------------------------
+EXPORT_C void RRadioSession::Play()
+	{
+    FUNC_LOG;
+	if ( iConnected )
+		{
+		PLAYER.iPlayerState = ERsPlayerPlaying;
+        if ( iRequests[KReqPlay]->IsActive() )
+            {
+            iRequests[KReqStationSeek]->Cancel();
+            }
+        iRequests[KReqPlay]->CompleteRequest(ERadioServPlay, KErrNone);
+		}
+	}
+
+// -----------------------------------------------------------------------------
+// RRadioSession::Stop
+// -----------------------------------------------------------------------------
+EXPORT_C void RRadioSession::Stop(
+	TBool aIfOnlyPrimaryClient )
+	{
+    FUNC_LOG;
+    INFO_1("aIfOnlyPrimaryClient: [%d]", aIfOnlyPrimaryClient);
+    if ( iConnected & aIfOnlyPrimaryClient )
+        {
+        PLAYER.iPlayerState = ERsPlayerIdle;
+        RProperty::Set( KRadioServerPropertyCategory, ERadioServPsPlayerState,  PLAYER.iPlayerState );
+        }
+	}
+
+// -----------------------------------------------------------------------------
+// RRadioSession::GetMaxVolume
+// -----------------------------------------------------------------------------
+EXPORT_C TInt RRadioSession::GetMaxVolume(
+    TInt& aMaxVolume ) const
+	{
+    FUNC_LOG;
+	if ( iConnected )
+		{
+        TInt err( PLAYER.iGetMaxVolumeError.Error() );
+        if ( KErrNone == err )
+            {
+            aMaxVolume = PLAYER.iMaxVolume;
+            }
+	    return err;
+		}
+	else
+		{
+		return KErrDisconnected;
+		}
+	}
+
+// -----------------------------------------------------------------------------
+// RRadioSession::SetVolume
+// -----------------------------------------------------------------------------
+EXPORT_C TInt RRadioSession::SetVolume(
+	TInt aVolume )
+	{
+    FUNC_LOG;
+	if ( iConnected )
+		{
+        TInt err( PLAYER.iSetVolumeError.Error() );
+        if ( KErrNone == err )
+            {
+            PLAYER.iVolume = aVolume;
+            RProperty::Set( KRadioServerPropertyCategory, ERadioServPsVolume, PLAYER.iVolume );      
+            }
+	    return err;
+		}
+	else
+		{
+		return KErrDisconnected;
+		}
+	}
+
+// -----------------------------------------------------------------------------
+// RRadioSession::GetVolume
+// -----------------------------------------------------------------------------
+EXPORT_C TInt RRadioSession::GetVolume(
+	TInt& aVolume ) const
+	{
+    FUNC_LOG;
+	if ( iConnected )
+		{
+        TInt err( PLAYER.iGetVolumeError.Error() );
+        if ( KErrNone == err )
+            {
+            aVolume = PLAYER.iVolume;
+            }
+	    return err;
+		}
+	else
+		{
+		return KErrDisconnected;
+		}
+	}
+
+// -----------------------------------------------------------------------------
+// RRadioSession::SetVolumeRamp
+// -----------------------------------------------------------------------------
+EXPORT_C TInt RRadioSession::SetVolumeRamp(
+	const TTimeIntervalMicroSeconds& aRampInterval )
+	{
+    FUNC_LOG;
+	if ( iConnected )
+		{
+        TInt err( PLAYER.iSetVolumeRampError.Error() );
+        if ( KErrNone == err )
+            {
+            PLAYER.iRampInterval = aRampInterval;
+            }
+	    return err;
+		}
+	else
+		{
+		return KErrDisconnected;
+		}
+	}
+
+// -----------------------------------------------------------------------------
+// RRadioSession::Mute
+// -----------------------------------------------------------------------------
+EXPORT_C TInt RRadioSession::Mute(
+	TBool aMute )
+	{
+    FUNC_LOG;
+	if ( iConnected )
+		{
+        TInt err( PLAYER.iMuteError.Error() );
+        if ( KErrNone == err )
+            {
+            PLAYER.iMuteStatus = aMute;
+            RProperty::Set( KRadioServerPropertyCategory, ERadioServPsMuteStatus, PLAYER.iMuteStatus );      
+            }
+	    return err;
+		}
+	else
+		{
+		return KErrDisconnected;
+		}
+	}
+
+// -----------------------------------------------------------------------------
+// RRadioSession::GetMuteStatus
+// -----------------------------------------------------------------------------
+EXPORT_C TInt RRadioSession::GetMuteStatus(
+	TBool& aMute ) const
+	{
+    FUNC_LOG;
+	if ( iConnected )
+		{
+		aMute = PLAYER.iMuteStatus;
+		return KErrNone;
+		}
+	else
+		{
+		return KErrDisconnected;
+		}
+	}
+
+// -----------------------------------------------------------------------------
+// RRadioSession::SetBalance
+// -----------------------------------------------------------------------------
+EXPORT_C TInt RRadioSession::SetBalance(
+	TInt aLeftPercentage,
+	TInt aRightPercentage )
+	{
+    FUNC_LOG;
+	INFO_2("left=[%d] right=[%d]", aLeftPercentage, aRightPercentage);
+	if ( iConnected )
+		{
+		TInt err( PLAYER.iSetBalanceError.Error() );
+		if ( KErrNone == err )
+		    {
+	        PLAYER.iLeftPercentage = aLeftPercentage;
+	        PLAYER.iRightPercentage = aRightPercentage;
+	        //iRadioPlayerUtilityClient.MrpoBalanceChange( STUB.iLeftPercentage, STUB.iRightPercentage );
+	        TPckgBuf<TRsSettingsData> balance;
+	        balance().iData1 = aLeftPercentage;     // Left
+	        balance().iData2 = aRightPercentage;    // Right
+	        RProperty::Set( KRadioServerPropertyCategory, ERadioServPsBalance,  balance );      
+		    }
+	    return err;
+
+		}
+	else
+		{
+		return KErrDisconnected;
+		}
+	}
+
+// -----------------------------------------------------------------------------
+// RRadioSession::GetBalance
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt RRadioSession::GetBalance(
+	TInt& aLeftPercentage,
+	TInt& aRightPercentage ) const
+	{
+    FUNC_LOG;
+	if ( iConnected )
+		{
+        TInt err( PLAYER.iSetBalanceError.Error() );
+        if ( KErrNone == err )
+            {
+            aLeftPercentage = PLAYER.iLeftPercentage;
+            aRightPercentage = PLAYER.iRightPercentage;
+            }
+	    return err;
+		}
+	else
+		{
+		return KErrDisconnected;
+		}
+	}
+
+//********** RDSUtility control begins
+
+// -----------------------------------------------------------------------------
+// RRadioSession::GetRdsCapabilities
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt RRadioSession::GetRdsCapabilities(
+	TRsRdsCapabilities& aCaps ) const
+	{
+    FUNC_LOG;
+	if ( iConnected )
+		{
+		TInt err( RDS.iGetCapabilitiesError.Error() );
+	    if ( KErrNone == err )
+	        {
+	        aCaps.iRdsFunctions = RDS.iCaps.iRdsFunctions;
+	        aCaps.iAdditionalFunctions1 = RDS.iCaps.iAdditionalFunctions1;
+	        aCaps.iAdditionalFunctions2 = RDS.iCaps.iAdditionalFunctions2;
+	        }
+	    return err;
+		}
+	else
+		{
+		return KErrDisconnected;
+		}
+	}
+
+// -----------------------------------------------------------------------------
+// RRadioSession::GetRdsSignalStatus
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt RRadioSession::GetRdsSignalStatus(
+	TBool& aRdsSignal ) const
+    {
+    FUNC_LOG;
+	if ( iConnected )
+		{
+        TInt err( RDS.iGetRdsSignalStatusError.Error() );
+        if ( KErrNone == err )
+            {
+            aRdsSignal = RDS.iRdsSignal;
+            }
+	    return err;
+		}
+	else
+		{
+		return KErrDisconnected;
+		}
+	}
+
+// -----------------------------------------------------------------------------
+// RRadioSession::NotifyRdsDataChange
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt RRadioSession::NotifyRdsDataChange(
+	TRsRdsData aRdsData )
+	{
+    FUNC_LOG;
+	INFO_1("aRdsData.iRdsFunctions [%d]", aRdsData.iRdsFunctions);
+	if ( !iConnected )
+		{
+		return KErrDisconnected;
+		}
+
+	if ( !iObserver )
+		{
+		return KErrNotReady;
+		}
+
+	TRAPD(err, StartRdsEventHandlersL(aRdsData.iRdsFunctions));
+	if ( err != KErrNone )
+		{
+		INFO_1("err=[%d]", err);
+		return err;
+		}
+    iRdsNotify = ETrue;
+	return err;
+    }
+
+// -----------------------------------------------------------------------------
+// RRadioSession::CancelNotifyRdsDataChange
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void RRadioSession::CancelNotifyRdsDataChange()
+    {
+    FUNC_LOG;
+	if ( iConnected && iRdsNotify )
+		{
+		iRdsEventHandlers.ResetAndDestroy();
+	    iRdsNotify = EFalse;
+		}
+    }
+
+// -----------------------------------------------------------------------------
+// RRadioSession::NotifyRadioTextPlusChange
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt RRadioSession::NotifyRadioTextPlusChange(
+	RArray<TInt>& /*aRtPlusClasses*/ )
+	{
+    FUNC_LOG;
+	return KErrNotSupported;
+	}
+
+// -----------------------------------------------------------------------------
+// RRadioSession::CancelNotifyRadioTextPlusChange
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void RRadioSession::CancelNotifyRadioTextPlusChange()
+	{
+    FUNC_LOG;
+	// NotifyRadioTextPlusChange is not supported
+	}
+
+// -----------------------------------------------------------------------------
+// RRadioSession::SetAutomaticSwitching
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt RRadioSession::SetAutomaticSwitching(
+	TBool aAuto )
+	{
+    FUNC_LOG;
+	if ( iConnected )
+		{
+        TInt err( RDS.iSetAutomaticSwitchingError.Error() );
+        if ( KErrNone == err )
+            {
+            RDS.iAutomaticSwitching = aAuto;
+            }
+	    return err;
+		}
+	else
+		{
+		return KErrDisconnected;
+		}
+	}
+
+// -----------------------------------------------------------------------------
+// RRadioSession::GetAutomaticSwitching
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt RRadioSession::GetAutomaticSwitching(
+	TBool& aAuto )
+	{
+    FUNC_LOG;
+	if ( iConnected )
+		{
+        TInt err( RDS.iGetAutomaticSwitchingError.Error() );
+        if ( KErrNone == err )
+            {
+            aAuto = RDS.iAutomaticSwitching;
+            }
+	    return err;
+		}
+	else
+		{
+		return KErrDisconnected;
+		}
+	}
+
+// -----------------------------------------------------------------------------
+// RRadioSession::CancelAFSearch
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void RRadioSession::CancelAFSearch()
+	{
+    FUNC_LOG;
+	}
+
+ // -----------------------------------------------------------------------------
+// RRadioSession::SetAutomaticTrafficAnnouncement
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt RRadioSession::SetAutomaticTrafficAnnouncement(
+	TBool /*aAuto*/ )
+	{
+    FUNC_LOG;
+	return KErrNotSupported;
+	}
+
+// -----------------------------------------------------------------------------
+// RRadioSession::GetAutomaticTrafficAnnouncement
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt RRadioSession::GetAutomaticTrafficAnnouncement(
+	TBool& /*aAuto*/ )
+	{
+    FUNC_LOG;
+	return KErrNotSupported;
+   	}
+
+// -----------------------------------------------------------------------------
+// RRadioSession::StationSeekByPTY
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void RRadioSession::StationSeekByPTY(
+	TRsRdsProgrammeType aPty,
+	TBool aSeekUp )
+   	{
+    FUNC_LOG;
+   	INFO_2("pty=[%d], aSeekUp=%d", aPty, aSeekUp);
+	if ( iConnected )
+		{
+        if ( iRequests[KReqStationSeekByPTY]->IsActive() )
+            {
+            iRequests[KReqStationSeekByPTY]->Cancel();
+            }
+		iRequests[KReqStationSeekByPTY]->iInt = RDS.iFrequency;
+		iRequests[KReqInternal]->CompleteRequest(ERadioServStationSeekByPTY, KErrNone);
+		}
+	else
+		{
+		iRequests[KReqInternal]->CompleteRequest(ERadioServStationSeekByPTY, KErrDisconnected);
+		}
+   	}
+
+// -----------------------------------------------------------------------------
+// RRadioSession::StationSeekByTA
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void RRadioSession::StationSeekByTA(
+	TBool /*aSeekUp*/ )
+   	{
+    FUNC_LOG;
+	if ( iConnected )
+		{
+        if ( iRequests[KReqStationSeekByTA]->IsActive() )
+            {
+            iRequests[KReqStationSeekByTA]->Cancel();
+            }
+        iRequests[KReqStationSeekByTA]->iInt = RDS.iFrequency;
+	    iRequests[KReqInternal]->CompleteRequest(ERadioServStationSeekByTA, KErrNone);
+		}
+	else
+		{
+		iRequests[KReqInternal]->CompleteRequest(ERadioServStationSeekByTA, KErrDisconnected);
+		}
+	}
+
+// -----------------------------------------------------------------------------
+// RRadioSession::StationSeekByTP
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void RRadioSession::StationSeekByTP(
+	TBool /*aSeekUp*/ )
+   	{
+    FUNC_LOG;
+	if ( iConnected )
+		{
+        if ( iRequests[KReqStationSeekByTP]->IsActive() )
+            {
+            iRequests[KReqStationSeekByTP]->Cancel();
+            }
+        iRequests[KReqStationSeekByTP]->iInt = RDS.iFrequency;
+        iRequests[KReqInternal]->CompleteRequest(ERadioServStationSeekByTP, KErrNone);
+		}
+	else
+		{
+		iRequests[KReqInternal]->CompleteRequest(ERadioServStationSeekByTP, KErrDisconnected);
+		}
+	}
+
+// -----------------------------------------------------------------------------
+// RRadioSession::CancelRdsStationSeek
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void RRadioSession::CancelRdsStationSeek()
+  	{
+    FUNC_LOG;
+  	}
+
+// -----------------------------------------------------------------------------
+// RRadioSession::GetFreqByPTY
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void RRadioSession::GetFreqByPTY(
+	TRsRdsProgrammeType /*aPty*/ )
+	{
+    FUNC_LOG;
+	iRequests[KReqInternal]->CompleteRequest(ERadioServGetFreqByPTY, KErrNotSupported);
+  	}
+
+// -----------------------------------------------------------------------------
+// RRadioSession::CancelGetFreqByPTY
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void RRadioSession::CancelGetFreqByPTY()
+	{
+    FUNC_LOG;
+	// GetFreqByPTY is not supported
+	}
+
+// -----------------------------------------------------------------------------
+// RRadioSession::GetFreqByTA
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void RRadioSession::GetFreqByTA()
+	{
+    FUNC_LOG;
+	iRequests[KReqInternal]->CompleteRequest(ERadioServGetFreqByTA, KErrNotSupported);
+    }
+
+// -----------------------------------------------------------------------------
+// RRadioSession::CancelGetFreqByTA
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void RRadioSession::CancelGetFreqByTA()
+    {
+    FUNC_LOG;
+    // GetFreqByTA is not supported
+	}
+
+// -----------------------------------------------------------------------------
+// RRadioSession::GetPSByPTY
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void RRadioSession::GetPSByPTY(
+	TRsRdsProgrammeType /*aPty*/ )
+    {
+    FUNC_LOG;
+	iRequests[KReqInternal]->CompleteRequest(ERadioServGetPSByPTY, KErrNotSupported);
+    }
+
+// -----------------------------------------------------------------------------
+// RRadioSession::CancelGetPSByPTY
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void RRadioSession::CancelGetPSByPTY()
+    {
+    FUNC_LOG;
+    // GetPSByPTY is not supported
+	}
+
+// -----------------------------------------------------------------------------
+// RRadioSession::GetPSByTA
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void RRadioSession::GetPSByTA()
+    {
+    FUNC_LOG;
+	iRequests[KReqInternal]->CompleteRequest(ERadioServGetPSByTA, KErrNotSupported);
+    }
+
+// -----------------------------------------------------------------------------
+// RRadioSession::CancelGetPSByTA
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void RRadioSession::CancelGetPSByTA()
+    {
+    FUNC_LOG;
+    // GetPSByTA is not supported
+	}
+
+// -----------------------------------------------------------------------------
+// RRadioSession::GetProgrammeIdentification
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt RRadioSession::GetProgrammeIdentification(
+	TInt& aPi )
+    {
+    FUNC_LOG;
+	if ( iConnected )
+		{
+        TInt err( RDS.iGetProgrammeIdentificationError.Error() );
+        if ( KErrNone == err )
+            {
+            aPi = RDS.iPi;
+            }
+	    return err;
+		}
+	else
+		{
+		return KErrDisconnected;
+		}
+	}
+
+// -----------------------------------------------------------------------------
+// RRadioSession::GetProgrammeType
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt RRadioSession::GetProgrammeType(
+	TRsRdsProgrammeType& aPty )
+    {
+    FUNC_LOG;
+	if ( iConnected )
+		{
+        TInt err( RDS.iGetProgrammeTypeError.Error() );
+        if ( KErrNone == err )
+            {
+            aPty = RDS.iPty;
+            }
+        return err;
+		}
+	else
+		{
+		return KErrDisconnected;
+		}
+	}
+
+// -----------------------------------------------------------------------------
+// RRadioSession::GetProgrammeService
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt RRadioSession::GetProgrammeService(
+	TRsRdsPSName& aPs )
+    {
+    FUNC_LOG;
+	if ( iConnected )
+		{
+        TInt err( RDS.iGetProgrammeServiceError.Error() );
+        if ( KErrNone == err )
+            {
+            aPs = RDS.iPs;
+            }
+        return err;
+		}
+	else
+		{
+		return KErrDisconnected;
+		}
+	}
+
+// -----------------------------------------------------------------------------
+// RRadioSession::GetRadioText
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt RRadioSession::GetRadioText(
+	TRsRdsRadioText& aRt )
+	{
+    FUNC_LOG;
+	if ( iConnected )
+		{
+        TInt err( RDS.iGetRadioTextError.Error() );
+        if ( KErrNone == err )
+            {
+            aRt = RDS.iRt;
+            }
+        return err;
+		}
+	else
+		{
+		return KErrDisconnected;
+		}
+	}
+
+// -----------------------------------------------------------------------------
+// RRadioSession::GetRadioTextPlus
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt RRadioSession::GetRadioTextPlus(
+	TRsRdsRTplusClass /*aRtPlusClass*/,
+	TRsRdsRadioText& /*aRtPlusData*/ )
+	{
+    FUNC_LOG;
+	return KErrNotSupported;
+	}
+
+// -----------------------------------------------------------------------------
+// RRadioSession::GetClockTime
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt RRadioSession::GetClockTime(
+	TDateTime& aCt )
+	{
+    FUNC_LOG;
+	if ( iConnected )
+		{
+        TInt err( RDS.iGetClockTimeError.Error() );
+        if ( KErrNone == err )
+            {
+            aCt = RDS.iCt;
+            }
+        return err;
+		}
+	else
+		{
+		return KErrDisconnected;
+		}
+	}
+
+// -----------------------------------------------------------------------------
+// RRadioSession::GetTrafficAnnouncementStatus
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt RRadioSession::GetTrafficAnnouncementStatus(
+	TBool& aTaStatus )
+	{
+    FUNC_LOG;
+	if ( iConnected )
+		{
+        TInt err( RDS.iGetTrafficAnnouncementStatusError.Error() );
+        if ( KErrNone == err )
+            {
+            aTaStatus = RDS.iTaStatus;
+            }
+	    return err;
+ 		}
+ 	else
+ 		{
+ 		return KErrDisconnected;
+ 		}
+	}
+
+// -----------------------------------------------------------------------------
+// RRadioSession::GetTrafficProgrammeStatus
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt RRadioSession::GetTrafficProgrammeStatus(
+	TBool& aTpStatus )
+	{
+    FUNC_LOG;
+	if ( iConnected )
+		{
+        TInt err( RDS.iGetTrafficProgrammeStatusError.Error() );
+        if ( KErrNone == err )
+            {
+            aTpStatus = RDS.iTpStatus;
+            }
+	    return err;
+		}
+	else
+		{
+		return KErrDisconnected;
+		}
+	}
+
+// -----------------------------------------------------------------------------
+// RRadioSession::CustomCommandSync
+// -----------------------------------------------------------------------------
+EXPORT_C TInt RRadioSession::CustomCommandSync(
+    const TMMFMessageDestinationPckg& aDestination,
+    TInt aFunction,
+    const TDesC8& aDataTo1,
+    const TDesC8& aDataTo2 )
+    {
+    FUNC_LOG;
+    if ( iConnected )
+        {
+        return SendReceive(aFunction, TIpcArgs(&aDestination, &aDataTo1, &aDataTo2));
+        }
+    else
+        {
+        return KErrDisconnected;
+        }
+	}
+
+// -----------------------------------------------------------------------------
+// RRadioSession::CustomCommandSync
+// -----------------------------------------------------------------------------
+EXPORT_C TInt RRadioSession::CustomCommandSync(
+    const TMMFMessageDestinationPckg& aDestination,
+    TInt aFunction,
+    const TDesC8& aDataTo1,
+    const TDesC8& aDataTo2,
+    TDes8& aDataFrom )
+    {
+    FUNC_LOG;
+    if ( iConnected )
+        {
+        return SendReceive(aFunction, TIpcArgs(&aDestination, &aDataTo1, &aDataTo2, &aDataFrom));
+        }
+    else
+        {
+        return KErrDisconnected;
+        }
+	}
+
+// -----------------------------------------------------------------------------
+// RRadioSession::CustomCommandAsync
+// -----------------------------------------------------------------------------
+EXPORT_C void RRadioSession::CustomCommandAsync(
+    const TMMFMessageDestinationPckg& aDestination,
+    TInt aFunction,
+    const TDesC8& aDataTo1,
+    const TDesC8& aDataTo2,
+    TRequestStatus& aStatus )
+    {
+    FUNC_LOG;
+    if ( iConnected )
+        {
+        SendReceive(aFunction, TIpcArgs(&aDestination, &aDataTo1, &aDataTo2), aStatus);
+        }
+    else
+        {
+        TRequestStatus* stat = &aStatus;
+        User::RequestComplete(stat, KErrDisconnected);
+        }
+	}
+
+// -----------------------------------------------------------------------------
+// RRadioSession::CustomCommandAsync
+// -----------------------------------------------------------------------------
+EXPORT_C void RRadioSession::CustomCommandAsync(
+    const TMMFMessageDestinationPckg& aDestination,
+    TInt aFunction,
+    const TDesC8& aDataTo1,
+    const TDesC8& aDataTo2,
+    TDes8& aDataFrom,
+    TRequestStatus& aStatus )
+    {
+    FUNC_LOG;
+    if ( iConnected )
+        {
+        SendReceive(aFunction, TIpcArgs(&aDestination, &aDataTo1, &aDataTo2, &aDataFrom), aStatus);
+        }
+    else
+        {
+        TRequestStatus* stat = &aStatus;
+        User::RequestComplete(stat, KErrDisconnected);
+        }
+	}
+
+// -----------------------------------------------------------------------------
+// RRadioSession::CancelRequest
+// -----------------------------------------------------------------------------
+//
+void RRadioSession::CancelRequest(
+	TInt aRequest )
+	{
+    FUNC_LOG;
+	if ( iConnected )
+		{
+		SendReceive(ERadioServCancel, TIpcArgs(&iDestinationPckg, aRequest));
+		}
+	}
+
+// -----------------------------------------------------------------------------
+// RRadioSession::StartRequestHandlersL
+// Create asynchronous request handlers.
+// ** NOTE: The order in which each handler is appended to the iRequests array is critical.
+// Access to each request is done with constants declared at the beginning of this file.
+// -----------------------------------------------------------------------------
+//
+void RRadioSession::StartRequestHandlersL(
+	MRadioObserver& aObserver )
+	{
+    FUNC_LOG;
+
+	CRadioRequest* req = NULL;
+
+	req = CRadioRequest::NewLC(*this, aObserver, ERadioServNone);
+    User::LeaveIfError( iRequests.Append(req) );
+	CleanupStack::Pop( req );
+	INFO_2("CRadioRequest* req: 0x%x, no: %i", req, iRequests.Count() );
+
+	req = CRadioRequest::NewLC(*this, aObserver, ERadioServRequestTunerControl);
+	User::LeaveIfError( iRequests.Append(req) );
+	CleanupStack::Pop( req );
+    INFO_2("CRadioRequest* req: 0x%x, no: %i", req, iRequests.Count() );
+
+	req = CRadioRequest::NewLC(*this, aObserver, ERadioServSetFrequencyRange);
+	User::LeaveIfError( iRequests.Append(req) );
+	CleanupStack::Pop( req );
+    INFO_2("CRadioRequest* req: 0x%x, no: %i", req, iRequests.Count() );
+
+	req = CRadioRequest::NewLC(*this, aObserver, ERadioServSetFrequency);
+	User::LeaveIfError( iRequests.Append(req) );
+	CleanupStack::Pop( req );
+    INFO_2("CRadioRequest* req: 0x%x, no: %i", req, iRequests.Count() );
+
+	req = CRadioRequest::NewLC(*this, aObserver, ERadioServStationSeek);
+	User::LeaveIfError( iRequests.Append(req) );
+	CleanupStack::Pop( req );
+    INFO_2("CRadioRequest* req: 0x%x, no: %i", req, iRequests.Count() );
+
+	req = CRadioRequest::NewLC(*this, aObserver, ERadioServPlay);
+	User::LeaveIfError( iRequests.Append(req) );
+	CleanupStack::Pop( req );
+    INFO_2("CRadioRequest* req: 0x%x, no: %i", req, iRequests.Count() );
+
+	req = CRadioRequest::NewLC(*this, aObserver, ERadioServStationSeekByPTY);
+	User::LeaveIfError( iRequests.Append(req) );
+	CleanupStack::Pop( req );
+    INFO_2("CRadioRequest* req: 0x%x, no: %i", req, iRequests.Count() );
+
+	req = CRadioRequest::NewLC(*this, aObserver, ERadioServStationSeekByTA);
+	User::LeaveIfError( iRequests.Append(req) );
+	CleanupStack::Pop( req );
+    INFO_2("CRadioRequest* req: 0x%x, no: %i", req, iRequests.Count() );
+
+	req = CRadioRequest::NewLC(*this, aObserver, ERadioServStationSeekByTP);
+	User::LeaveIfError( iRequests.Append(req) );
+	CleanupStack::Pop( req );
+    INFO_2("CRadioRequest* req: 0x%x, no: %i", req, iRequests.Count() );
+	}
+
+// -----------------------------------------------------------------------------
+// RRadioSession::StartEventHandlersL
+// -----------------------------------------------------------------------------
+//
+void RRadioSession::StartEventHandlersL(
+	MRadioObserver& aEventObserver )
+	{
+    FUNC_LOG;
+
+	CRadioEventHandler* handler = NULL;
+	
+	handler = CRadioEventHandler::NewLC(aEventObserver, *this, ERadioServPsPlayerState);
+	User::LeaveIfError( iEventHandlers.Append(handler) );
+	CleanupStack::Pop( handler );
+
+	handler = CRadioEventHandler::NewLC(aEventObserver, *this, ERadioServPsAntennaStatus);
+	User::LeaveIfError( iEventHandlers.Append(handler) );
+	CleanupStack::Pop( handler );
+
+	handler = CRadioEventHandler::NewLC(aEventObserver, *this, ERadioServPsOfflineMode );
+	User::LeaveIfError( iEventHandlers.Append(handler) );
+	CleanupStack::Pop( handler );
+
+	handler = CRadioEventHandler::NewLC(aEventObserver, *this, ERadioServPsTransmitterStatus );
+	User::LeaveIfError( iEventHandlers.Append(handler) );
+	CleanupStack::Pop( handler );
+
+	handler = CRadioEventHandler::NewLC(aEventObserver, *this, ERadioServPsFrequency);
+	User::LeaveIfError( iEventHandlers.Append(handler) );
+	CleanupStack::Pop( handler );
+
+    handler = CRadioEventHandler::NewLC(aEventObserver, *this, ERadioServPsFrequencyRange);
+	User::LeaveIfError( iEventHandlers.Append(handler) );
+	CleanupStack::Pop( handler );
+
+	handler = CRadioEventHandler::NewLC(aEventObserver, *this, ERadioServPsForceMonoReception);
+	User::LeaveIfError( iEventHandlers.Append(handler) );
+	CleanupStack::Pop( handler );
+
+	handler = CRadioEventHandler::NewLC(aEventObserver, *this, ERadioServPsSquelch);
+	User::LeaveIfError( iEventHandlers.Append(handler) );
+	CleanupStack::Pop( handler );
+
+	handler = CRadioEventHandler::NewLC(aEventObserver, *this, ERadioServPsVolume);
+	User::LeaveIfError( iEventHandlers.Append(handler) );
+	CleanupStack::Pop( handler );
+
+	handler = CRadioEventHandler::NewLC(aEventObserver, *this, ERadioServPsMuteStatus);
+	User::LeaveIfError( iEventHandlers.Append(handler) );
+	CleanupStack::Pop( handler );
+
+	handler = CRadioEventHandler::NewLC(aEventObserver, *this, ERadioServPsBalance);
+	User::LeaveIfError( iEventHandlers.Append(handler) );
+	CleanupStack::Pop( handler );
+	}
+
+// -----------------------------------------------------------------------------
+// RRadioSession::StartRdsEventHandlersL
+// -----------------------------------------------------------------------------
+//
+void RRadioSession::StartRdsEventHandlersL(
+	TUint32 aRdsFunction )
+	{
+    FUNC_LOG;
+
+	iRdsEventHandlers.ResetAndDestroy();
+	CRadioEventHandler* handler = NULL;
+
+	// If RDS notification started always return the latest RdsSignalStatus
+	handler = CRadioEventHandler::NewLC(*iObserver, *this, ERadioServPsRdsSignalStatus);
+	User::LeaveIfError( iRdsEventHandlers.Append(handler) );
+	CleanupStack::Pop( handler );
+
+	handler = CRadioEventHandler::NewLC(*iObserver, *this, ERadioServPsAutoSwitchStatus);
+	User::LeaveIfError( iRdsEventHandlers.Append(handler) );
+	CleanupStack::Pop( handler );
+
+    if (aRdsFunction & TRsRdsData::ERsRdsProgrammeIdentification)
+    	{
+    	handler = CRadioEventHandler::NewLC(*iObserver, *this, ERadioServPsProgrammeIdentification);
+		User::LeaveIfError( iRdsEventHandlers.Append(handler) );
+		CleanupStack::Pop( handler );
+    	}
+
+    if (aRdsFunction & TRsRdsData::ERsRdsProgrammeType)
+    	{
+    	handler = CRadioEventHandler::NewLC(*iObserver, *this,ERadioServPsProgrammeType );
+		User::LeaveIfError( iRdsEventHandlers.Append(handler) );
+		CleanupStack::Pop( handler );
+    	}
+
+	if (aRdsFunction & TRsRdsData::ERsRdsProgrammeService)
+		{
+		handler = CRadioEventHandler::NewLC(*iObserver, *this, ERadioServPsProgrammeService);
+		User::LeaveIfError( iRdsEventHandlers.Append(handler) );
+		CleanupStack::Pop( handler );
+		}
+
+	if(aRdsFunction & TRsRdsData::ERsRdsRadioText)
+		{
+		handler = CRadioEventHandler::NewLC(*iObserver, *this, ERadioServPsRadioText);
+		User::LeaveIfError( iRdsEventHandlers.Append(handler) );
+		CleanupStack::Pop( handler );
+		}
+
+  if(aRdsFunction & TRsRdsData::ERsRdsRadioTextPlus)
+    {
+    handler = CRadioEventHandler::NewLC(*iObserver, *this, ERadioServPsRadioTextPlusObjects);
+    User::LeaveIfError( iRdsEventHandlers.Append(handler) );
+    CleanupStack::Pop( handler );
+    }
+
+	if (aRdsFunction & TRsRdsData::ERsRdsClockTime)
+		{
+	    handler = CRadioEventHandler::NewLC(*iObserver, *this, ERadioServPsClockTime);
+		User::LeaveIfError( iRdsEventHandlers.Append(handler) );
+		CleanupStack::Pop( handler );
+		}
+
+	if (aRdsFunction & TRsRdsData::ERsRdsTrafficAnnouncement)
+		{
+		handler = CRadioEventHandler::NewLC(*iObserver, *this, ERadioServPsTrafficAnnouncementStatus);
+		User::LeaveIfError( iRdsEventHandlers.Append(handler) );
+		CleanupStack::Pop( handler );
+		}
+
+	if (aRdsFunction & TRsRdsData::ERsRdsAlternateFrequency)
+		{
+	    handler = CRadioEventHandler::NewLC(*iObserver, *this, ERadioServPsAfSearchBegin);
+	    User::LeaveIfError( iRdsEventHandlers.Append(handler) );
+		CleanupStack::Pop( handler );
+
+	    handler = CRadioEventHandler::NewLC(*iObserver, *this, ERadioServPsAfSearchEnd);
+	    User::LeaveIfError( iRdsEventHandlers.Append(handler) );
+		CleanupStack::Pop( handler );
+		}
+	}
+
+//  End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmserv/radioutility/radioserver/Session/stub/src/StubRadioSession.h	Fri Aug 06 16:55:00 2010 -0500
@@ -0,0 +1,1198 @@
+/*
+* Copyright (c) 2002-2004 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:  This class is the main interface to the RadioServer. It implements
+*				 the client-side session. It also contains M-observer classes that
+*				 the client must implement to receive completion notification for
+*				 asynchronous requests and spontaneous event notifications.
+*
+*/
+
+
+
+#ifndef RADIOSESSION_H
+#define RADIOSESSION_H
+
+//  INCLUDES
+#include <mmf/common/mmfbase.h>
+#include <mmf/common/mmfcontrollerframework.h>
+#include <MCustomCommand.h>
+
+#include "RadioServerData.h"
+#include "RadioStubManager.h"
+
+// FORWARD DECLARATIONS
+class CRadioRequest;
+class CRadioEventHandler;
+
+// CLASS DECLARATION
+
+/**
+*  Defines functions that client must implement in order to receive
+*  events from the radio server.
+*
+*  @lib RadioSession.lib
+*  @since S60 3.0
+*/
+class MRadioObserver
+    {
+public: // New functions
+
+//********** Tuner related
+
+	/**
+     * Completion message for RequestTunerControl request.
+     *
+     * @since S60 3.2
+     * @param aError KErrNone if successful, otherwise one of the system/RadioServer errors.
+     */
+	virtual void RequestTunerControlComplete( TRadioServerError aError ) = 0;
+
+	/**
+     * Completion message for SetFrequencyRange request.
+     *
+     * @since S60 3.2
+     * @param aError KErrNone if successful, otherwise one of the system/RadioServer errors.
+     */
+	virtual void SetFrequencyRangeComplete( TRadioServerError aError ) = 0;
+
+	/**
+     * Completion message for SetFrequency request.
+     *
+     * @since S60 3.0
+     * @param aError KErrNone if successful, otherwise one of the system/RadioServer errors.
+     */
+	virtual void SetFrequencyComplete( TRadioServerError aError ) = 0;
+
+	/**
+     * Completion message for StationSeek request.
+     *
+     * @since S60 3.0
+     * @param aError KErrNone if successful, otherwise one of the system/RadioServer errors.
+     * @param aFrequency Valid only if aError is KErrNone. Contains the new frequency in Hz.
+     */
+	virtual void StationSeekComplete( TRadioServerError aError, TInt aFrequency ) = 0;
+
+	/**
+     * Event notification indicating FM transmitter status change. Radio receiver
+     * is turned off when FM transmitter is active.
+     *
+     * @since S60 3.2
+     * @param aActive ETrue if FM transmitter is active; EFalse otherwise.
+     */
+	virtual void RadioEventTransmitterStatusChange( TBool aActive ) = 0;
+
+	/**
+     * Event notification indicating antenna status change.
+     *
+     * @since S60 3.0
+     * @param aAttached ETrue if antenna is attached.
+     */
+	virtual void RadioEventAntennaStatusChange( TBool aAttached ) = 0;
+
+	/**
+     * Event notification indicating offline mode change.
+     *
+     * @since S60 3.0
+     * @param aOfflineMode ETrue if device is in offline mode.
+     */
+	virtual void RadioEventOfflineModeChange( TBool aOfflineMode ) = 0;
+
+	/**
+     * Event notification indicating frequency range change. This may be caused by
+     * other applications.
+     *
+     * @since S60 3.2
+     * @param aNewRange New frequency range.
+     */
+	virtual void RadioEventFrequencyRangeChanged( TRsFrequencyRange aNewRange ) = 0;
+
+	/**
+     * Event notification indicating frequency(Hz) change. This may be caused by
+     * other applications or RDS if AF/TA is enabled.
+     *
+     * @since S60 3.2
+     * @param aFrequency New frequency where tuner is currently tuned.
+     */
+	virtual void RadioEventFrequencyChange( TInt aFrequency ) = 0;
+
+	/**
+     * Event notification indicating forced mono status change.
+     *
+     * @since S60 3.2
+     * @param aForcedMono ETrue if forced mode is enabled; EFalse otherwise.
+     */
+	virtual void RadioEventForcedMonoChanged( TBool aForcedMono ) = 0;
+
+	/**
+     * Event notification indicating squelch (muting the frequencies without broadcast) status change.
+     *
+     * @since S60 3.2
+     * @param aSquelch ETrue if squelch is enabled; EFalse otherwise.
+     */
+	virtual void RadioEventSquelchChanged( TBool aSquelch ) = 0;
+
+//********** Player related
+
+	/**
+     * Event notification indicating radio player state change. This may be caused by
+     * other applications.
+     *
+     * @since S60 3.0
+     * @param aRadioOn ETrue if radio is playing, otherwise radio is off.
+     * @param aError Valid only if aRadioOn is EFalse. Contains the reason why radio is off.
+     */
+	virtual void RadioEventStateChange( TBool aRadioOn, TRadioServerError aError ) = 0;
+
+	/**
+     * Event notification indicating volume change.
+     *
+     * @since S60 3.2
+     * @param aVolume New volume.
+     */
+	virtual void RadioEventVolumeChange( TInt aVolume ) = 0;
+
+	/**
+     * Event notification indicating mute setting change.
+     *
+     * @since S60 3.2
+     * @param aMute ETrue indicates audio is muted.
+     */
+	virtual void RadioEventMuteChange( TBool aMute ) = 0;
+
+	/**
+     * Event notification indicating balance setting change.
+     *
+     * @since S60 3.2
+     * @param aLeftPercentage Left speaker volume percentage. This value ranges from 0 to 100.
+     * @param aRightPercentage Right speaker volume percentage. This value ranges from 0 to 100.
+     */
+	virtual void RadioEventBalanceChange( TInt aLeftPercentage, TInt aRightPercentage ) = 0;
+
+//********** RDS related
+
+	/**
+     * Completion message for StationSeekByPTY request.
+     *
+     * @since S60 3.2
+     * @param aError KErrNone if successful, otherwise one of the system/RadioServer errors.
+     * @param aFrequency The frequency(Hz) of the radio station that was found.
+     */
+	virtual void StationSeekByPTYComplete( TRadioServerError aError, TInt aFrequency ) = 0;
+
+	/**
+     * Completion message for StationSeekByTA request.
+     *
+     * @since S60 3.2
+     * @param aError KErrNone if successful, otherwise one of the system/RadioServer errors.
+     * @param aFrequency The frequency(Hz) of the radio station that was found.
+     */
+	virtual void StationSeekByTAComplete( TRadioServerError aError, TInt aFrequency ) = 0;
+
+	/**
+     * Completion message for StationSeekByTP request.
+     *
+     * @since S60 3.2
+     * @param aError KErrNone if successful, otherwise one of the system/RadioServer errors.
+     * @param aFrequency The frequency(Hz) of the radio station that was found.
+     */
+	virtual void StationSeekByTPComplete( TRadioServerError aError, TInt aFrequency ) = 0;
+
+	/**
+     * Completion message for GetFreqByPTY request.
+     *
+     * @since S60 3.2
+     * @param aError KErrNone if successful, otherwise one of the system/RadioServer errors.
+     * @param aFreqList Array of frequencies (Hz), valid only if aError is KErrNone.
+     */
+	virtual void GetFreqByPTYComplete( TRadioServerError aError, RArray<TInt>& aFreqList ) = 0;
+
+	/**
+     * Completion message for GetFreqByTA request.
+     *
+     * @since S60 3.2
+     * @param aError KErrNone if successful, otherwise one of the system/RadioServer errors.
+     * @param aFreqList Array of frequencies (Hz), valid only if aError is KErrNone.
+     */
+	virtual void GetFreqByTAComplete( TRadioServerError aError, RArray<TInt>& aFreqList ) = 0;
+
+	/**
+     * Completion message for StatGetPSByPTY request.
+     *
+     * @since S60 3.2
+     * @param aError KErrNone if successful, otherwise one of the system/RadioServer errors.
+     * @param aPsList Array of programme service names, valid only if aError is KErrNone.
+     */
+	virtual void GetPSByPTYComplete( TRadioServerError aError, RArray<TRsRdsPSName>& aPsList ) = 0;
+
+	/**
+     * Completion message for GetPSByTA request.
+     *
+     * @since S60 3.2
+     * @param aError KErrNone if successful, otherwise one of the system/RadioServer errors.
+     * @param aPsList Array of programme service names, valid only if aError is KErrNone.
+     */
+	virtual void GetPSByTAComplete( TRadioServerError aError, RArray<TRsRdsPSName>& aPsList ) = 0;
+
+	/**
+     * Event notification indicating new Programme Identification(PI) is available.
+     *
+     * @since S60 3.2
+     * @param aPi Programme identification
+     */
+	virtual void RadioEventRdsDataPI( TInt aPi ) = 0;
+
+	/**
+     * Event notification indicating new Programme Type(PTY) is available.
+     *
+     * @since S60 3.2
+     * @param aPty Programme type
+     */
+	virtual void RadioEventRdsDataPTY( TRsRdsProgrammeType aPty ) = 0;
+
+	/**
+     * Event notification indicating new Programme Service(PS) is available.
+     *
+     * @since S60 3.2
+     * @param aPs Programme service
+     */
+	virtual void RadioEventRdsDataPS( TRsRdsPSName& aPs ) = 0;
+
+	/**
+     * Event notification indicating new Radio Text(RT) is available.
+     *
+     * @since S60 3.2
+     * @param aRt Radio text
+     */
+	virtual void RadioEventRdsDataRT( TRsRdsRadioText& aRt ) = 0;
+
+	/**
+     * Event notification indicating new Clock Time(CT) is available.
+     *
+     * @since S60 3.2
+     * @param aCt Clock time
+     */
+	virtual void RadioEventRdsDataCT( TDateTime& aCt ) = 0;
+
+	/**
+     * Event notification indicating Traffice Announcement(TA) status change.
+     *
+     * @since S60 3.2
+     * @param aTaOn ETrue indicates that Traffic Announcement is on.
+     */
+	virtual void RadioEventRdsDataTA( TBool aTaOn ) = 0;
+
+	/**
+     * Event notification indicating new Radio Text+(RT+) is available.
+     *
+     * @since S60 3.2
+	 * @param aRtPlusClass Radio text plus class
+	 * @param aRtPlusData Radio text plus data
+	 */
+	virtual void RadioEventRdsDataRTplus( TRsRdsRTplusClass aRtPlusClass, TRsRdsRadioText& aRtPlusData ) = 0;
+
+	/**
+     * Event notification indicating the beginning of Alternate Frequency(AF) search.
+     *
+     * @since S60 3.2
+     */
+	virtual void RadioEventRdsSearchBeginAF() = 0;
+
+	/**
+     * Event notification indicating the end of Alternate Frequency(AF) search.
+     *
+     * @since S60 3.2
+     * @param aError KErrNone if successful, otherwise one of the system/RadioServer errors.
+     * @param aFrequency The frequency(Hz) of the radio station that was found.
+     */
+	virtual void RadioEventRdsSearchEndAF( TRadioServerError aError, TInt aFrequency ) = 0;
+
+	/**
+     * Event notification indicating station change to another frequency(Hz) that is
+     * broadcasting Traffic Announcement(TA).
+     *
+     * @since S60 3.2
+     * @param aFrequency The frequency(Hz) of the radio station that was found.
+     */
+	virtual void RadioEventRdsStationChangeTA( TInt aFrequency ) = 0;
+
+	/**
+     * Event notification indicating automatic switching (AF) setting change.
+     *
+     * @since S60 3.2
+     * @param aAuto ETrue indicates that automatic switching is on.
+     */
+	virtual void RadioEventRdsAutomaticSwitchingChange( TBool aAuto ) = 0;
+
+	/**
+     * Event notification indicating automatic traffic announcement setting change.
+     *
+     * @since S60 3.2
+     * @param aAuto ETrue indicates that automatic traffic announcement is on.
+     */
+	virtual void RadioEventRdsAutomaticTrafficAnnouncement( TBool aAuto ) = 0;
+
+	/**
+     * Event notification indicating RDS signal status change (i.e. signal is lost/restored).
+     *
+     * @since S60 3.2
+     * @param aSignal ETrue indicates that RDS signal is available in the tuned frequency.
+     */
+	virtual void RadioEventRdsSignalChange( TBool aSignal ) = 0;
+    };
+
+/**
+*  Main interface to the Radio Server.
+*  Implements the client-side session.
+*
+*  @lib RadioSession.lib
+*  @since S60 3.0
+*/
+class RRadioSession : public RSessionBase,
+					  public MCustomCommand
+    {
+public: // New functions
+    IMPORT_C static RRadioSession* NewL();
+    
+public:  // Constructors and destructor
+
+	/**
+     * C++ default constructor.
+     */
+	IMPORT_C RRadioSession();
+
+public: // New functions
+
+    /**
+     * Connects a client to the radio server.
+     * @since S60 3.0
+     *
+     * @param aObserver The observer object for receiving async completion callbacks.
+     * @param aPrimaryClient Indicates whether the client is a primary client. Primary
+     * clients are clients that can control the radio tuner such as FM Radio Application,
+     * Visual Radio, or a Java Radio App.  Non-primary clients are observers of the tuner,
+     * player, and RDS utilities and cannot exist without a primary client such as Active
+     * Idle, Cover UI, or a smart accessory driver.
+     * @return A standard system error code.
+     */
+	IMPORT_C TInt Connect( MRadioObserver& aObserver, TBool aPrimaryClient );
+
+	/**
+     * Gets the client side version number.
+     *
+     * @since S60 3.0
+     * @return The client side version number.
+     */
+	IMPORT_C TVersion Version() const;
+
+	/**
+     * Closes connection to the radio server.
+     *
+     * @since S60 3.0
+     */
+	IMPORT_C void Close();
+
+//********** TunerUtility control begins
+
+	/**
+     * Request for control of a tuner. If this method returns KErrNone, control of
+     * the tuner has been granted. Control to the tuner must be granted before any
+     * other request can be made.
+     *
+     * @since S60 3.2
+     * @param Tuner type (e.g. FM, AM)
+     * @return A standard system error code.
+     * @see MRadioObserver::RequestTunerControlComplete
+     */
+	IMPORT_C void RequestTunerControl( TRsTuner aTuner );
+
+	/**
+     * Get the capabilities of the radio on the device.
+     *
+     * @since S60 3.2
+     * @param aCaps The capabilities object to fill
+     * @return A standard system error code.
+     */
+	IMPORT_C TInt GetTunerCapabilities( TRsTunerCapabilities& aCaps ) const;
+
+	/**
+     * EnableTunerInOfflineMode on the device.
+     *
+     * @since S60 3.2
+     * @param aEnable ETrue to enable tuner functions in offline mode, EFalse to disable.
+     * @return A standard system/RadioServer error code.
+     */
+	IMPORT_C TInt EnableTunerInOfflineMode( TBool aEnable );
+
+	/**
+     * Asynchronous request to set the frequency range. If the frequency range is not set,
+     * it will be defaulted to ERsTunerFM.
+     *
+     * @since S60 3.2
+     * @param aRange Frequency range
+     * @see MRadioObserver::SetFrequencyRangeComplete
+     */
+	IMPORT_C void SetFrequencyRange( TRsFrequencyRange aRange );
+
+	/**
+     * Cancels an outstanding SetFrequencyRange request. Note that SetFrequencyRange may
+     * complete before cancel can occur and a callback may occur.
+     *
+     * @since S60 3.2
+     * @return A standard system error code.
+     */
+	IMPORT_C void CancelSetFrequencyRange();
+
+	/**
+     * Get the current frequency range. It also returns the minimum and maximum frequencies(Hz)
+     * for the returned range.
+     *
+     * @since S60 3.2
+     * @param aRange On return contains the current frequency range.
+     * @param aMinFreq On return contains the minimum frequency for the current frequency range.
+     * @param aMaxFreq On return contains the maximum frequency for the current frequency range.
+     * @return A standard system/RadioServer error code.
+     */
+	IMPORT_C TInt GetFrequencyRange( TRsFrequencyRange& aRange, TInt& aMinFreq, TInt& aMaxFreq ) const;
+
+	/**
+     * Asynchronous request to tune the tuner to the specified frequency.
+     *
+     * @since S60 3.2
+     * @param aFrequency The frequency (Hz) to tune to
+     * @see MRadioObserver::SetFrequecyComplete
+     */
+	IMPORT_C void SetFrequency( TInt aFrequency );
+
+	/**
+     * Cancels an outstanding SetFrequency request. Note that SetFrequency may complete before
+     * cancel can occur and a callback to MRadioObserver::SetFrequencyComplete may occur.
+     *
+     * @since S60 3.0
+     * @return A standard system/RadioServer error code.
+     */
+	IMPORT_C void CancelSetFrequency();
+
+	/**
+     * Get the current frequency.
+     *
+     * @since S60 3.2
+     * @param aFrequency On return contains the current frequency(Hz).
+     * @return A standard system/RadioServer error code.
+     */
+	IMPORT_C TInt GetFrequency( TInt& aFrequency ) const;
+
+	/**
+     * Asynchronous request to find a radio station, starting from current frequency and
+     * seaching in the direction specified (i.e. up or down).
+     *
+     * @since S60 3.0
+     * @param aSeekUp Search direction
+     * @see MRadioObserver::StationSeekComplete
+     */
+	IMPORT_C void StationSeek( TBool aUpwards );
+
+	/**
+     * Cancels an outstanding StationSeek request. Note that StationSeek may complete before
+     * cancel can occur and a callback to MRadioObserver::StationSeekComplete may occur.
+     *
+     * @since S60 3.0
+     * @return A standard system/RadioServer error code.
+     */
+	IMPORT_C void CancelStationSeek();
+
+	/**
+     * Gets the signal strength of the currently tuned signal.
+     *
+     * @since S60 3.2
+     * @param aStrength On return contains the current signal strength.
+     * @return A standard system/RadioServer error code.
+     */
+	IMPORT_C TInt GetSignalStrength( TInt& aSignalStrength ) const;
+
+	/**
+     * Gets the maximum possible signal strength of a tuned signal.
+     *
+     * @since S60 3.2
+     * @param aMaxStrength On return contains the maximum signal strength.
+     * @return A standard system/RadioServer error code.
+     */
+	IMPORT_C TInt GetMaxSignalStrength( TInt& aMaxSignalStrength ) const;
+
+	/**
+     * Get the stereo mode of the radio.
+     *
+     * @since S60 3.2
+     * @param aStereo On return, will be ETrue if signal is stereo.
+     * @return A standard system/RadioServer error code.
+     */
+	IMPORT_C TInt GetStereoMode( TBool& aStereo ) const;
+
+	/**
+     * Indicates whether the reception should be forced into monophonic mode.
+     *
+     * @since S60 3.2
+     * @param aMono If ETrue, all reception will be in mono mode even if a stereo signal is
+     *		 available. If EFalse, a stereo signal will be received when possible.
+     * @return A standard system/RadioServer error code.
+     */
+	IMPORT_C TInt ForceMonoReception( TBool aForcedMono );
+
+	/**
+     * Checks whether force mono reception is on or not.
+     * @since S60 3.2
+     * @param aForceMono ETrue if force mono is on, EFalse otherwise.
+     * @return A standard system/RadioServer error code.
+     */
+	IMPORT_C TInt GetForceMonoReception( TBool& aForcedMono ) const;
+
+	/**
+     * Enable or disable quelch.
+     *
+     * @since S60 3.2
+     * @param aEnabled ETrue to enable squelching, EFalse to disable it.
+     * @return A standard system/RadioServer error code.
+     */
+	IMPORT_C TInt SetSquelch( TBool aEnabled );
+
+	/**
+	 * Retrieves the current squelching (muting in frequencies without reception) setting
+     *
+     * @since S60 3.2
+     * @param aSquelch ETrue if a squelching is currently enabled
+     * @return A standard system/RadioServer error code.
+     */
+	IMPORT_C TInt GetSquelch( TBool& aSquelch ) const;
+
+//********** PlayerUtility control begins
+
+	/**
+     * Retrieve the current state of the player.
+	 * If the radio is already playing, client should simply retrieve current settings such
+     * as volume, etc.
+     *
+     * @since S60 3.2
+     * @return Radio player state.
+     */
+	IMPORT_C TInt PlayerState( TRsPlayerState& aState ) const;
+
+	/**
+     * Starts radio playback.
+     *
+     * @since S60 3.0
+     */
+	IMPORT_C void Play();
+
+	/**
+     * Stops playback, and release the output device for use by other clients.
+     *
+     * @since S60 3.0
+     * @param aIfOnlyPrimaryClient ETrue to stop playback only if there are no other primary clients
+     */
+	IMPORT_C void Stop( TBool aIfOnlyPrimaryClient = EFalse );
+
+	/**
+     * Retrieves the maximum volume supported.
+     *
+     * @since S60 3.0
+     * @param aVolume On return contains the maximum volume.
+     * @return A standard system/RadioServer error code.
+     */
+	IMPORT_C TInt GetMaxVolume( TInt& aMaxVolume ) const;
+
+	/**
+     * Sets the volume to the specified level.
+     *
+     * @since S60 3.0
+     * @param aVolume The volume level to set
+     * @return A standard system/RadioServer error code.
+     */
+	IMPORT_C TInt SetVolume( TInt aVolume );
+
+	/**
+     * Get the current volume.
+     *
+     * @since S60 3.2
+     * @param aVolume On return contains the current volume.
+     * @return A standard system/RadioServer error code.
+     */
+	IMPORT_C TInt GetVolume( TInt& aVolume ) const;
+
+	/**
+     * Set a volume ramp.
+     *
+     * @since S60 3.2
+     * @param aRampInterval The time interval over which the volume should be increased from
+     *		 zero to the current volume setting.
+     * @return A standard system/RadioServer error code.
+     */
+	IMPORT_C TInt SetVolumeRamp( const TTimeIntervalMicroSeconds& aRampInterval );
+
+	/**
+     * Mutes or unmutes playback.
+     *
+     * @since S60 3.0
+     * @param aMute ETrue to mute the audio, EFalse to unmute it.
+     * @return A standard system/RadioServer error code.
+     */
+	IMPORT_C TInt Mute( TBool aMute );
+
+	/**
+     * Find out if the audio is muted or not.
+     *
+     * @since S60 3.2
+     * @param aVolume On return set to ETrue if audio is muted.
+     * @return A standard system/RadioServer error code.
+     */
+	IMPORT_C TInt GetMuteStatus( TBool& aMute ) const;
+
+	/**
+     * Set the speaker balance for playing.
+     *
+     * @since S60 3.2
+     * @param aLeftPercentage Left speaker volume percentage. This value ranges from 0 to 100.
+     * @param aRightPercentage Right speaker volume percentage. This value ranges from 0 to 100.
+     * @return A standard system/RadioServer error code.
+     */
+	IMPORT_C TInt SetBalance( TInt aLeftPercentage, TInt aRightPercentage );
+
+	/**
+     * Get the current speaker balance setting.
+     *
+     * @since S60 3.2
+     * @param aLeftPercentage On return contains the left speaker volume percentage.
+     * @param aRightPercentage On return contains the right speaker volume percentage.
+     * @return A standard system/RadioServer error code.
+     */
+	IMPORT_C TInt GetBalance( TInt& aLeftPercentage, TInt& aRightPercentage ) const;
+
+//********** RDSUtility control begins
+
+	/**
+     * Get the capabilities of the RDS control on the device.
+     *
+     * @since S60 3.2
+     * @param aCaps The capabilities object to fill
+     * @return A standard system/RadioServer error code.
+     */
+	IMPORT_C TInt GetRdsCapabilities( TRsRdsCapabilities& aCaps ) const;
+
+	/**
+     * Get the status of the RDS reception.
+     *
+     * @since S60 3.2
+     * @param aRdsSignal On return, will be ETrue if RDS signal can be recepted, EFalse otherwise.
+     * @return A standard system/RadioServer error code.
+     */
+	IMPORT_C TInt GetRdsSignalStatus( TBool& aRdsSignal ) const;
+
+	/**
+     * Subscribe for notification for the specified RDS data. Client should first check
+     * the capabilities to see if a feature is supported.
+     * Request for notification for non-supported features will simply be ignored.
+     *
+     * @since S60 3.2
+     * @param aRdsData Bitfield indicating notification request.
+     * @return A standard system/RadioServer error code.
+     * @see MRadioObserver::RadioEventRdsDataPI
+     * @see MRadioObserver::RadioEventRdsDataPTY
+     * @see MRadioObserver::RadioEventRdsDataPS
+     * @see MRadioObserver::RadioEventRdsDataRT
+     * @see MRadioObserver::RadioEventRdsDataCT
+     * @see MRadioObserver::RadioEventRdsDataTA
+     */
+	IMPORT_C TInt NotifyRdsDataChange( TRsRdsData aRdsData );
+
+	/**
+     * Cancel NotifyRdsDataChange request.
+     *
+     * @since S60 3.2
+     */
+	IMPORT_C void CancelNotifyRdsDataChange();
+
+    /**
+     * Subscribe for notification for the specified RadioText+ data. Client should first check
+     * the capabilities to see if RT+ feature is supported.
+     * Returns KErrNotSupported if RT+ is not supported.
+     *
+     * Note that if the client wishes to receive the entire radio text data chunk, client should
+     * subscribe for ERsRdsRadioText using NotifyRdsDataChange instead.
+     *
+     * @since S60 3.2
+     * @param aRtPlusClasses Array of RT+ class to be notified
+     * @return A standard system/RadioServer error code.
+     * @see MRadioObserver::RadioEventRdsDataRTplus
+     */
+    IMPORT_C TInt NotifyRadioTextPlusChange( RArray<TInt>& aRtPlusClasses );
+
+	/**
+     * Cancel NotifyRadioTextPlusChange request.
+     *
+     * @since S60 3.2
+     */
+	IMPORT_C void CancelNotifyRadioTextPlusChange();
+
+	/**
+     * Turn on/off automatic switching of frequency based on Alternate Frequency.
+     * This will cause RDS device to search for alternate frequency when the signal strength
+     * deteriorates. User should be ready to receive RadioEventRdsSearchBeginAF and
+     * RadioEventRdsSearchEndAF. Automatic switching is off by default.
+     *
+     * @since S60 3.2
+     * @param aAuto ETrue to turn automatic switching on, EFalse to turn it off.
+     * @return A standard system/RadioServer error code.
+     * @see MRadioObserver::RadioEventRdsSearchBeginAF
+	 * @see MRadioObserver::RadioEventRdsSearchEndAF
+     */
+	IMPORT_C TInt SetAutomaticSwitching( TBool aAuto );
+
+	/**
+     * Find out whether automatic switching is on or off.
+     *
+     * @since S60 3.2
+     * @param aAuto On return, ETrue indicates that automatic switching is enabled.
+     * @return A standard system/RadioServer error code.
+     */
+	IMPORT_C TInt GetAutomaticSwitching( TBool& aAuto );
+
+	/**
+     * Cancel ongoing search for an Alternate Frequency (AF) with stronger signal.
+     *
+     * Client can issue this request to interrupt the search indicated with
+     * MRadioObserver::RadioEventRdsSearchBeginAF.
+     *
+     * @since S60 3.2
+     */
+	IMPORT_C void CancelAFSearch();
+
+	/**
+     * Turns on/off automatic switching of frequency based on Traffic Announcement.
+     * This will cause RDS device to search for frequencies broadcasting traffic announcement.
+     * Client will be notified of frequency change though the tuner event.
+     * It's up to the client to return to the previous frequency when the traffic announcement
+     * is finished.
+     *
+     * NOTE: This is only supported in dual tuner configuration since the secondary tuner
+     * needs to perform continuous scanning for frequency broadcasting traffic announcement,
+     * while the primary tuner is used for normal tuner activities.
+     *
+     * @since S60 3.2
+     * @param aAuto ETrue indicates that automatic switching is on.
+     * @return A standard system/RadioServer error code.
+     */
+	IMPORT_C TInt SetAutomaticTrafficAnnouncement( TBool aAuto );
+
+	/**
+     * Find out whether automatic traffic announcement is enabled.
+     *
+     * @since S60 3.2
+     * @param aAuto On return, ETrue indicates that automatic traffic announcement is on.
+     * @return A standard system/RadioServer error code.
+     */
+	IMPORT_C TInt GetAutomaticTrafficAnnouncement( TBool& aAuto );
+
+	/**
+     * Asynchronous request to find a radio station with the specified Programme Type(PTY),
+     * starting from the currently tuned frequency and searching in the direction specified
+     * (i.e. up or down). User must be ready to receive callback method StationSeekByPTYComplete
+     * The station found is returned in the callback.
+     *
+     * @since S60 3.2
+     * @param aPty The type of programme to search for.
+     * @param aSeekUp The direction to search in. Searches upwards if set to ETrue.
+     * @see MRadioObserver::StationSeekByPTYComplete
+     */
+	IMPORT_C void StationSeekByPTY( TRsRdsProgrammeType aPty, TBool aSeekUp );
+
+	/**
+     * Asynchronous request to find a radio station with Traffic Announcement(TA),
+     * starting from the currently tuned frequency and searching in the direction specified
+     * (i.e. up or down). User must be ready to receive callback method StationSeekByTAComplete
+     * The station found is returned in the callback.
+     *
+     * @since S60 3.2
+     * @param aSeekUp The direction to search in. Searches upwards if set to ETrue.
+     * @see MRadioObserver::StationSeekByTAComplete
+     */
+	IMPORT_C void StationSeekByTA( TBool aSeekUp );
+
+	/**
+     * Asynchronous request to find a radio station with Traffic Programme(TP),
+     * starting from the currently tuned frequency and searching in the direction specified
+     * (i.e. up or down). User must be ready to receive callback method StationSeekByTPComplete
+     * The station found is returned in the callback.
+     *
+     * @since S60 3.2
+     * @param aSeekUp The direction to search in. Searches upwards if set to ETrue.
+     * @see MRadioObserver::StationSeekByTPComplete
+     */
+	IMPORT_C void StationSeekByTP( TBool aSeekUp );
+
+	/**
+     * Cancels an ongoing retune operation, as initiated by a call to StationSeekByPTY,
+     * StationSeekByTA, or StationSeekByTP.
+     * The usual callback will not occur if this has been called.
+     *
+     * @since S60 3.2
+     */
+	IMPORT_C void CancelRdsStationSeek();
+
+	/**
+     * Asynchronous request to find all frequencies sending the given Programme Type (PTY).
+     * User must be ready to receive callback method GetFreqByPTYComplete.
+     *
+     * NOTE: This is only supported in dual tuner configuration since the secondary tuner
+     * needs to perform continuous scanning for frequencies broadcasting given Programme Type
+     * while the primary tuner is used for normal tuner activities.
+     * Client should first check the tuner capabilities. Will return KErrNotSupported in
+     * callback method if this feature is not supported.
+     *
+     * @since S60 3.2
+     * @param aPty The type of programme to search for
+     * @see MRadioObserver::GetFreqByPTYComplete
+     */
+	IMPORT_C void GetFreqByPTY( TRsRdsProgrammeType aPty );
+
+	/**
+     * Cancels an ongoing request to find all frequencies sending a given Programme Type (PTY).
+     * The usual callback will not occur if this has been called.
+     *
+     * @since S60 3.2
+     */
+	IMPORT_C void CancelGetFreqByPTY();
+
+	/**
+     * Asynchronous request to find all frequencies sending Traffic Announcement (TA). User must
+     * be ready to receive callback method GetFreqByTAComplete.
+     *
+     * NOTE: This is only supported in dual tuner configuration since the secondary tuner
+     * needs to perform continuous scanning for frequencies broadcasting given Traffic Announcement
+     * while the primary tuner is used for normal tuner activities.
+     * Client should first check the tuner capabilities. Will return KErrNotSupported in
+     * callback method if this feature is not supported.
+     *
+     * @since S60 3.2
+     * @see MRadioObserver::GetFreqByTAComplete
+     */
+	IMPORT_C void GetFreqByTA();
+
+	/**
+     * Cancels an ongoing request to find all frequencies sending Traffic Announcement.
+     * The usual callback will not occur if this has been called.
+     *
+     * @since S60 3.2
+     */
+	IMPORT_C void CancelGetFreqByTA();
+
+	/**
+     * Asynchronous request to find all Programme Service names (PS) sending the given Programme
+     * Type (PTY). User must be ready to receive callback method GetPSByPTYComplete.
+     *
+     * NOTE: This is only supported in dual tuner configuration since the secondary tuner
+     * needs to perform continuous scanning for frequencies broadcasting given Programme Type
+     * while the primary tuner is used for normal tuner activities.
+     * Client should first check the tuner capabilities. Will return KErrNotSupported in
+     * callback method if this feature is not supported.
+     *
+     * @since S60 3.2
+     * @param aPty The type of programme to search for
+     * @see MRadioObserver::GetPSByPTYComplete
+     */
+	IMPORT_C void GetPSByPTY( TRsRdsProgrammeType aPty );
+
+	/**
+     * Cancels an ongoing request to find all Programme Service names (PS) sending a given
+     * Programme Type (PTY). The usual callback will not occur if this has been called.
+     *
+     * @since S60 3.2
+     */
+	IMPORT_C void CancelGetPSByPTY();
+
+	/**
+     * Asynchronous request to find all Programme Service names (PS) sending Traffic Announcement (TA).
+     * User must be ready to receive callback method GetPSByTAComplete.
+     *
+     * NOTE: This is only supported in dual tuner configuration since the secondary tuner
+     * needs to perform continuous scanning for frequencies broadcasting given Traffic Announcement
+     * while the primary tuner is used for normal tuner activities.
+     * Client should first check the tuner capabilities. Will return KErrNotSupported in
+     * callback method if this feature is not supported.
+     *
+     * @since S60 3.2
+     * @see MRadioObserver::GetPSByTAComplete
+     */
+	IMPORT_C void GetPSByTA();
+
+	/**
+     * Cancels an ongoing request to find all Programme Service names (PS) sending Traffic Announcement.
+     * The usual callback will not occur if this has been called.
+     *
+     * @since S60 3.2
+     */
+	IMPORT_C void CancelGetPSByTA();
+
+	/**
+     * Get the current Programme Identification code.
+     * RDS data is received over the air and may not be available immediately following
+     * tune operation. If data is not available, this function will return KErrNotFound.
+     * If a value is returned, this is the last known value, which may not be up to date.
+     * To be notified of the most recent value, client should use NotifyRdsDataChange.
+     *
+     * @since S60 3.2
+     * @param aPi On return contains Programme Identification code
+     * @return A standard system/RadioServer error code.
+     */
+	IMPORT_C TInt GetProgrammeIdentification( TInt& aPi );
+
+	/**
+     * Get the current Programme Type.
+     * RDS data is received over the air and may not be available immediately following
+     * tune operation. If data is not available, this function will return KErrNotFound.
+     * If a value is returned, this is the last known value, which may not be up to date.
+     * To be notified of the most recent value, client should use NotifyRdsDataChange.
+     *
+     * @since S60 3.2
+     * @param aPty On return contains Programme Type
+     * @return A standard system/RadioServer error code.
+     */
+	IMPORT_C TInt GetProgrammeType( TRsRdsProgrammeType& aPty );
+
+	/**
+     * Get the current Programme Service name.
+     * RDS data is received over the air and may not be available immediately following
+     * tune operation. If data is not available, this function will return KErrNotFound.
+     * If a value is returned, this is the last known value, which may not be up to date.
+     * To be notified of the most recent value, client should use NotifyRdsDataChange.
+     *
+     * Programme Service name is fixed to 8 characters.
+     *
+     * @since S60 3.2
+     * @param aPs On return contains Programme Service name
+     * @return A standard system/RadioServer error code.
+     */
+	IMPORT_C TInt GetProgrammeService( TRsRdsPSName& aPs );
+
+	/**
+     * Get the current Radio Text.
+     * RDS data is received over the air and may not be available immediately following
+     * tune operation. If data is not available, this function will return KErrNotFound.
+     * If a value is returned, this is the last known value, which may not be up to date.
+     * To be notified of the most recent value, client should use NotifyRdsDataChange.
+     *
+     * The maximum possible length for radio text field is 64 characters.
+     *
+     * @since S60 3.2
+     * @param aRt On return contains Radio Text
+     * @return A standard system/RadioServer error code.
+     */
+	IMPORT_C TInt GetRadioText( TRsRdsRadioText& aRt );
+
+    /**
+     * Get the current Radio Text+.
+     * RDS data is received over the air and may not be available immediately following
+     * tune operation. If data is not available, this function will return KErrNotFound.
+     * If a value is returned, this is the last known value, which may not be up to date.
+     * To be notified of the most recent value, client should use NotifyRdsDataChange.
+     *
+     * The maximum possible length for radio text+ field is 64 characters.
+     *
+     * @since S60 3.2
+     * @param aRtPlusClass Radio text plus class
+     * @param aRtPlusData On return contains Radio Text+ field
+     * @return A standard system/RadioServer error code.
+     */
+    IMPORT_C TInt GetRadioTextPlus( TRsRdsRTplusClass aRtPlusClass, TRsRdsRadioText& aRtPlusData );
+
+	/**
+     * Get the current Clock Time and date.
+     * RDS data is received over the air and may not be available immediately following
+     * tune operation. If data is not available, this function will return KErrNotFound.
+     * If a value is returned, this is the last known value, which may not be up to date.
+     * To be notified of the most recent value, client should use NotifyRdsDataChange.
+     *
+     * @since S60 3.2
+     * @param aCt On return contains current time and date
+     * @return A standard system/RadioServer error code.
+     */
+	IMPORT_C TInt GetClockTime( TDateTime& aCt );
+
+	/**
+     * Get Traffic Announcement status at the current station.
+     *
+     * @since S60 3.2
+     * @param aTaStatus On return, will be ETrue if current station has ongoing traffic announcement
+     * @return A standard system/RadioServer error code.
+     */
+	IMPORT_C TInt GetTrafficAnnouncementStatus( TBool& aTaStatus );
+
+	/**
+     * Get Traffic Programme status at the current station.
+     *
+     * @since S60 3.2
+     * @param aTpStatus On return, will be ETrue if current station supports traffic programme
+     * @return A standard system/RadioServer error code.
+     */
+	IMPORT_C TInt GetTrafficProgrammeStatus( TBool& aTpStatus );
+
+// from base class MCustomCommand
+
+    /**
+     * From MCustomCommand
+     * Sends a synchronous custom command to the radio server.
+     *
+     * @since S60 3.0
+     * @param aDestination The destination of the message, consisting of the uid of
+     * 		 the interface of this message
+     * @param aFunction The function number to indicate which function is to be called
+     *		 on the interface defined in the aDestination parameter
+     * @param aDataTo1 The first chunk of data to be copied to the controller
+     *		 framework. The exact contents of the data are dependent on the
+     *		 interface being called. Can be KNullDesC8.
+     * @param aDataTo2 The second chunk of data to be copied to the controller
+     *		 framework. The exact contents of the data are dependent on the
+     *		 interface being called. Can be KNullDesC8.
+     * @return A standard system error code.
+     */
+	IMPORT_C  TInt CustomCommandSync( const TMMFMessageDestinationPckg& aDestination,
+					TInt aFunction, const TDesC8& aDataTo1, const TDesC8& aDataTo2 );
+
+	/**
+     * From MCustomCommand
+     * Sends a synchronous custom command to the radio server.
+     *
+     * @since S60 3.0
+     * @param aDestination The destination of the message, consisting of the uid of
+     *		 the interface of this message
+     * @param aFunction The function number to indicate which function is to be called
+     *		 on the interface defined in the aDestination parameter
+     * @param aDataTo1 The first chunk of data to be copied to the controller
+     *		 framework. The exact contents of the data are dependent on the
+     *		 interface being called. Can be KNullDesC8.
+     * @param aDataTo2 The second chunk of data to be copied to the controller
+     *		 framework. The exact contents of the data are dependent on the
+     *		 interface being called. Can be KNullDesC8.
+     * @param aDataFrom The area of memory to which the controller framework
+     *		 will write any data to be passed back to the client. Can't be KNullDesC8.
+     * @return A standard system error code.
+     */
+	IMPORT_C  TInt CustomCommandSync( const TMMFMessageDestinationPckg& aDestination,
+					TInt aFunction, const TDesC8& aDataTo1, const TDesC8& aDataTo2, TDes8& aDataFrom );
+
+	/**
+     * From MCustomCommand
+     * Sends an asynchronous custom command to the radio server.
+     *
+     * @since S60 3.0
+     * @param aDestination The destination of the message, consisting of the uid of
+     *		 the interface of this message
+     * @param aFunction The function number to indicate which function is to be called
+     *		 on the interface defined in the aDestination parameter
+     * @param aDataTo1 The first chunk of data to be copied to the controller
+     *		 framework. The exact contents of the data are dependent on the
+     *		 interface being called. Can be KNullDesC8.
+     * @param aDataTo2 The second chunk of data to be copied to the controller
+     *		 framework. The exact contents of the data are dependent on the
+     *		 interface being called. Can be KNullDesC8.
+     * @param aStatus The TRequestStatus of an active object. This will contain the
+     *		 result of the request on completion.  The exact range of result values is
+     *		 dependent on the interface.
+     */
+	IMPORT_C  void CustomCommandAsync( const TMMFMessageDestinationPckg& aDestination,
+					TInt aFunction, const TDesC8& aDataTo1, const TDesC8& aDataTo2, TRequestStatus& aStatus );
+
+	/**
+     * From MCustomCommand
+     * Sends an asynchronous custom command to the radio server.
+     *
+     * @since S60 3.0
+     * @param aDestination The destination of the message, consisting of the uid of
+     *		 the interface of this message
+     * @param aFunction The function number to indicate which function is to be called
+     *		 on the interface defined in the aDestination parameter
+     * @param aDataTo1 The first chunk of data to be copied to the controller
+     *		 framework. The exact contents of the data are dependent on the
+     *		 interface being called. Can be KNullDesC8.
+     * @param aDataTo2 The second chunk of data to be copied to the controller
+     *		 framework. The exact contents of the data are dependent on the
+     *		 interface being called. Can be KNullDesC8.
+     * @param aDataFrom The area of memory to which the controller framework
+     *		 will write any data to be passed back to the client. Can't be KNullDesC8.
+     * @param aStatus The TRequestStatus of an active object. This will contain the
+     *		 result of the request on completion.  The exact range of result values is
+     *		 dependent on the interface.
+     */
+	IMPORT_C  void CustomCommandAsync( const TMMFMessageDestinationPckg& aDestination, TInt aFunction,
+					const TDesC8& aDataTo1, const TDesC8& aDataTo2, TDes8& aDataFrom, TRequestStatus& aStatus );
+
+//********** Internal functions begin
+
+	/**
+     * Used internally to cancel outstanding asynchronous requests. This is triggered by
+     * CRadioRequest.
+     *
+     * @since S60 3.0
+     * @param aRequest The outstanding asynchronous request being cancelled
+     */
+	void CancelRequest( TInt aRequest );
+
+private:
+
+	/**
+     * Creates request handlers for each asynchronous request.
+     */
+	void StartRequestHandlersL( MRadioObserver& aObserver );
+
+	/**
+     * Creates event handlers for tuner and playback events from radio tuner.
+     */
+	void StartEventHandlersL( MRadioObserver& aObserver );
+
+	/**
+     * Creates event handlers for RDS events from radio tuner.
+     */
+	void StartRdsEventHandlersL( TUint32 aRdsFunctions );
+
+private:    // Data
+
+	// Connection status
+	TBool iConnected;
+	// Requests that generates response to MRadioObserver
+	RPointerArray<CRadioRequest> iRequests;
+	// Event handlers that generates response to MRadioEventObserver
+	RPointerArray<CRadioEventHandler> iEventHandlers;
+	//Rds Event handlers
+	RPointerArray<CRadioEventHandler> iRdsEventHandlers;
+
+	// Destination information for standard radio interface messages
+	TMMFMessageDestinationPckg iDestinationPckg;
+
+	// Radio observer
+	MRadioObserver* iObserver;
+	// Client type
+	TBool iPrimaryClient;
+	// RDS notify flag
+	TBool iRdsNotify;
+
+	// RadioStubManager pointer points inside RadioStubManagerChunk
+    SRadioStubManager* iRadioStubManager;
+    
+    // RadioStubManagerChunk handle
+    RChunk iRadioStubManagerChunk;
+    
+    CRadioRequest* iExtraRequestForBugHunting;
+    
+    };
+
+#endif      // RADIOSESSION_H
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmserv/radioutility/tsrc/bld.inf	Fri Aug 06 16:55:00 2010 -0500
@@ -0,0 +1,23 @@
+/*
+* Copyright (c) 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:
+*
+*/
+
+PRJ_MMPFILES
+
+PRJ_TESTMMPFILES
+#include "../presetutility/group/bld.inf"
+#include "../radioserver/Session/stub/group/bld.inf"
+#include "../radio_utility/stub/group/bld.inf"
--- a/mmserv/sts/rom/mmmwsystemtoneservice.iby	Fri Jul 23 17:29:03 2010 -0500
+++ b/mmserv/sts/rom/mmmwsystemtoneservice.iby	Fri Aug 06 16:55:00 2010 -0500
@@ -14,10 +14,6 @@
 * Description: STS IBY file
 *
 */
-/*
- * sts.iby
- *
- */
 
 #ifndef MMMWSYSTEMTONESERVICE_IBY
 #define MMMWSYSTEMTONESERVICE_IBY
@@ -32,4 +28,4 @@
 
 #endif //MMMWSYSTEMTONESERVICE_IBY
 
-//End of File
\ No newline at end of file
+//End of File
--- a/mmserv/sts/sts/src/stsplayer.cpp	Fri Jul 23 17:29:03 2010 -0500
+++ b/mmserv/sts/sts/src/stsplayer.cpp	Fri Aug 06 16:55:00 2010 -0500
@@ -28,8 +28,6 @@
     {
     CStsPlayer* self = 0;
     
-   
-
     self = new CStsPlayer(aObserver, aFileName, 0, aContext, aVolume, aAudioPreference, aAudioPriority);
     
            	        
--- a/mmserv/sts/stsserver/group/stsserver.mmp	Fri Jul 23 17:29:03 2010 -0500
+++ b/mmserv/sts/stsserver/group/stsserver.mmp	Fri Aug 06 16:55:00 2010 -0500
@@ -49,4 +49,4 @@
 LIBRARY        libc.lib
 LIBRARY        libstdcpp.lib
 LIBRARY        mediaclientaudio.lib
-LIBRARY        profileengine.lib
\ No newline at end of file
+LIBRARY        profileengine.lib
--- a/mmserv/tms/rom/tms.iby	Fri Jul 23 17:29:03 2010 -0500
+++ b/mmserv/tms/rom/tms.iby	Fri Aug 06 16:55:00 2010 -0500
@@ -1,28 +1,26 @@
 /*
-* Copyright (c) 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: Telephony Multimedia Service
-*
-*/
-/*
- * tms.iby
+ * Copyright (c) 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: Telephony Multimedia Service
  *
  */
 
-#ifndef __TMS_IBY__
-#define __TMS_IBY__
+#ifndef TMS_IBY
+#define TMS_IBY
 
+#include <data_caging_paths_for_iby.hrh>
 #include <bldvariant.hrh>
+
 #ifdef FF_TMS
 
 file=ABI_DIR/BUILD_DIR/tmsapi.dll         SHARED_LIB_DIR/tmsapi.dll
@@ -39,6 +37,6 @@
 
 #endif //FF_TMS
 
-#endif //__TMS_IBY__
+#endif //TMS_IBY
 
 //End of File
\ No newline at end of file
--- a/mmserv/tms/tmscallserver/eabi/tmscallserver.def	Fri Jul 23 17:29:03 2010 -0500
+++ b/mmserv/tms/tmscallserver/eabi/tmscallserver.def	Fri Aug 06 16:55:00 2010 -0500
@@ -1,25 +1,25 @@
 EXPORTS
 	_ZN3TMS13TMSCallServer11StartThreadEPv @ 1 NONAME
-	_ZTIN3TMS11TMSCallAdptE @ 2 NONAME
-	_ZTIN3TMS11TMSIPUplinkE @ 3 NONAME
-	_ZTIN3TMS13TMSCallCSAdptE @ 4 NONAME
-	_ZTIN3TMS13TMSCallIPAdptE @ 5 NONAME
-	_ZTIN3TMS13TMSCallServerE @ 6 NONAME
-	_ZTIN3TMS13TMSIPDownlinkE @ 7 NONAME
-	_ZTIN3TMS14TMSCallSessionE @ 8 NONAME
-	_ZTIN3TMS14TMSTarSettingsE @ 9 NONAME
-	_ZTIN3TMS17TMSCallDelayTimerE @ 10 NONAME
-	_ZTIN3TMS19TMSIPCallStreamBaseE @ 11 NONAME
-	_ZTVN3TMS11TMSCallAdptE @ 12 NONAME
-	_ZTVN3TMS11TMSIPUplinkE @ 13 NONAME
-	_ZTVN3TMS13TMSCallCSAdptE @ 14 NONAME
-	_ZTVN3TMS13TMSCallIPAdptE @ 15 NONAME
-	_ZTVN3TMS13TMSCallServerE @ 16 NONAME
-	_ZTVN3TMS13TMSIPDownlinkE @ 17 NONAME
-	_ZTVN3TMS14TMSCallSessionE @ 18 NONAME
-	_ZTVN3TMS14TMSTarSettingsE @ 19 NONAME
-	_ZTVN3TMS17TMSCallDelayTimerE @ 20 NONAME
-	_ZTVN3TMS19TMSIPCallStreamBaseE @ 21 NONAME
-	_ZTIN3TMS10TMSSyncVolE @ 22 NONAME
-	_ZTVN3TMS10TMSSyncVolE @ 23 NONAME
+	_ZTIN3TMS10TMSSyncVolE @ 2 NONAME
+	_ZTIN3TMS11TMSCallAdptE @ 3 NONAME
+	_ZTIN3TMS11TMSIPUplinkE @ 4 NONAME
+	_ZTIN3TMS13TMSCallCSAdptE @ 5 NONAME
+	_ZTIN3TMS13TMSCallIPAdptE @ 6 NONAME
+	_ZTIN3TMS13TMSCallServerE @ 7 NONAME
+	_ZTIN3TMS13TMSIPDownlinkE @ 8 NONAME
+	_ZTIN3TMS14TMSCallSessionE @ 9 NONAME
+	_ZTIN3TMS14TMSTarSettingsE @ 10 NONAME
+	_ZTIN3TMS17TMSCallDelayTimerE @ 11 NONAME
+	_ZTIN3TMS19TMSIPCallStreamBaseE @ 12 NONAME
+	_ZTVN3TMS10TMSSyncVolE @ 13 NONAME
+	_ZTVN3TMS11TMSCallAdptE @ 14 NONAME
+	_ZTVN3TMS11TMSIPUplinkE @ 15 NONAME
+	_ZTVN3TMS13TMSCallCSAdptE @ 16 NONAME
+	_ZTVN3TMS13TMSCallIPAdptE @ 17 NONAME
+	_ZTVN3TMS13TMSCallServerE @ 18 NONAME
+	_ZTVN3TMS13TMSIPDownlinkE @ 19 NONAME
+	_ZTVN3TMS14TMSCallSessionE @ 20 NONAME
+	_ZTVN3TMS14TMSTarSettingsE @ 21 NONAME
+	_ZTVN3TMS17TMSCallDelayTimerE @ 22 NONAME
+	_ZTVN3TMS19TMSIPCallStreamBaseE @ 23 NONAME
 
--- a/mmserv/tms/tmscallserver/src/tmscallipadpt.cpp	Fri Jul 23 17:29:03 2010 -0500
+++ b/mmserv/tms/tmscallserver/src/tmscallipadpt.cpp	Fri Aug 06 16:55:00 2010 -0500
@@ -259,6 +259,7 @@
             if (strmId == iUplinkStreamId && iIPUplink)
                 {
                 iIPUplink->Stop();
+                iUplState = EInitialized;
                 status = TMS_RESULT_SUCCESS;
                 NotifyClient(iUplinkStreamId, ECmdUplinkPaused, status);
                 }
@@ -269,6 +270,7 @@
             if (strmId == iDnlinkStreamId && iIPDownlink)
                 {
                 iIPDownlink->Stop();
+                iDnlState = EInitialized;
                 status = TMS_RESULT_SUCCESS;
                 NotifyClient(iDnlinkStreamId, ECmdDownlinkPaused, status);
                 }
--- a/mmserv/tms/tmscallserver/src/tmscsdevsound.cpp	Fri Jul 23 17:29:03 2010 -0500
+++ b/mmserv/tms/tmscallserver/src/tmscsdevsound.cpp	Fri Aug 06 16:55:00 2010 -0500
@@ -68,11 +68,7 @@
         iPreference = KAudioPrefCSCallDownlink;
         }
 
-    if (iInitRetryTime != 0)
-        {
-        iTimer = TMSTimer::NewL();
-        }
-
+    iTimer = TMSTimer::NewL();
     InitializeL();
     TRACE_PRN_FN_EXT;
     }
--- a/mmserv/tms/tmsimpl/group/tmsimpl.mmp	Fri Jul 23 17:29:03 2010 -0500
+++ b/mmserv/tms/tmsimpl/group/tmsimpl.mmp	Fri Aug 06 16:55:00 2010 -0500
@@ -96,6 +96,7 @@
 LIBRARY         tmsapi.lib
 LIBRARY         tmscallproxy.lib
 LIBRARY         tmsproxy.lib
+LIBRARY         tmsutility.lib
 LIBRARY         libc.lib
 
 DEFFILE         tmsimpl.def
--- a/mmserv/tms/tmsimpl/src/tmsstreambodyimpl.cpp	Fri Jul 23 17:29:03 2010 -0500
+++ b/mmserv/tms/tmsimpl/src/tmsstreambodyimpl.cpp	Fri Aug 06 16:55:00 2010 -0500
@@ -722,7 +722,7 @@
         void* user_data)
     {
     TMSSignalEvent event = {}; //all elements initialized to zeros
-    event.reason = aError;
+    event.reason = TMSRESULT(aError);
     event.user_data = user_data;
     iStreamState = aEventType;
 
--- a/mmserv/tms/tmsserver/inc/tmsrtplayer.h	Fri Jul 23 17:29:03 2010 -0500
+++ b/mmserv/tms/tmsserver/inc/tmsrtplayer.h	Fri Aug 06 16:55:00 2010 -0500
@@ -201,7 +201,7 @@
     /**
      * Initializes ring tone configuration parameters.
      */
-    void InitRtParamsL(TRtPlayerType aPlayerType);
+    void InitRtParams(TRtPlayerType aPlayerType);
 
     /*
      * from TMSRtAudioHdlrObsrv
--- a/mmserv/tms/tmsserver/src/tmsrtplayer.cpp	Fri Jul 23 17:29:03 2010 -0500
+++ b/mmserv/tms/tmsserver/src/tmsrtplayer.cpp	Fri Aug 06 16:55:00 2010 -0500
@@ -115,7 +115,7 @@
 
     iEngine =  ProEngFactory::NewEngineL();
 
-    InitRtParamsL(EPlayerBackup);
+    InitRtParams(EPlayerBackup);
     //CreateDefaultRingToneL();
     CreateBkpRtPlayerL();
     //GetMaxToneFileSizeL(iToneFileSizeLimitKB);
@@ -152,10 +152,10 @@
     }
 
 // -----------------------------------------------------------------------------
-// TMSRingTonePlayer::InitRtParamsL
+// TMSRingTonePlayer::InitRtParams
 // -----------------------------------------------------------------------------
 //
-void TMSRingTonePlayer::InitRtParamsL(TRtPlayerType aPlayerType)
+void TMSRingTonePlayer::InitRtParams(TRtPlayerType aPlayerType)
     {
     TRACE_PRN_FN_ENT;
 
@@ -183,7 +183,7 @@
     {
     TRACE_PRN_FN_ENT;
 
-    InitRtParamsL(EPlayerDefault);
+    InitRtParams(EPlayerDefault);
     LoadProfileRingToneL();
 
     TRACE_PRN_FN_EXT;
--- a/mmserv/tms/tmsserver/src/tmsserver.cpp	Fri Jul 23 17:29:03 2010 -0500
+++ b/mmserv/tms/tmsserver/src/tmsserver.cpp	Fri Aug 06 16:55:00 2010 -0500
@@ -142,6 +142,7 @@
     iDTMFDnlinkPlayer = NULL;
     iDTMFUplinkPlayer = NULL;
     iDTMFUplinkPlayerEtel = NULL;
+    iActiveCallType = -1;
     iSyncVol = TMSPubSubListener::NewL(KTMSPropertyCategory,ESyncVolume, this);
 
     //TODO: EUnit fails to initialize ProfileEngine in RT in eshell mode
@@ -858,12 +859,7 @@
             }
         if (!iDTMFUplinkPlayer) //IP call
             {
-            // TODO: Ongoing work with Audio Policy team...
             TRAP(status, iDTMFUplinkPlayer = TMSAudioDtmfTonePlayer::NewL(*this,
-//                    KAudioPrefVoipAudioUplinkNonSignal,
-//                    KAudioPrefVoipAudioUplink,
-//                    KAudioPrefUnknownVoipAudioUplink
-//                    KAudioPriorityDTMFString));
                     KAudioDTMFString, KAudioPriorityDTMFString));
             }
         }
@@ -988,6 +984,7 @@
             status = TMS_RESULT_SUCCESS;
             }
         }
+    iActiveCallType = -1;
     NotifyDtmfClients(ECmdDTMFTonePlayFinished, status);
     aMessage.Complete(status);
     TRACE_PRN_FN_EXT;
@@ -1002,16 +999,13 @@
 TInt TMSServer::ContinueSendingDTMF(const RMessage2& aMessage)
     {
     TRACE_PRN_FN_ENT;
-
     TInt status(TMS_RESULT_INVALID_STATE);
-    TBool continuesnd;
-    continuesnd = (TBool) aMessage.Int0();
-     if (iActiveCallType == TMS_CALL_CS && iDTMFUplinkPlayerEtel)
+    if (iActiveCallType == TMS_CALL_CS && iDTMFUplinkPlayerEtel)
         {
+        TBool continuesnd = (TBool) aMessage.Int0();
         status = iDTMFUplinkPlayerEtel->ContinueDtmfStringSending(continuesnd);
         status = TMSUtility::EtelToTMSResult(status);
         }
-
     aMessage.Complete(status);
     TRACE_PRN_FN_EXT;
     return status;
--- a/mmserv/voipaudioservices/VoIPIntfc/src/VoIPUtilityFactoryImpl.cpp	Fri Jul 23 17:29:03 2010 -0500
+++ b/mmserv/voipaudioservices/VoIPIntfc/src/VoIPUtilityFactoryImpl.cpp	Fri Aug 06 16:55:00 2010 -0500
@@ -71,7 +71,7 @@
     // deny access to audio resources.
     iPriorityDn.iPref = KAudioPrefVoipAudioDownlink;
     iPriorityDn.iPriority = KAudioPriorityVoipAudioDownlink;
-    iPriorityUp.iPref = KAudioPrefVoipAudioUplink;
+    iPriorityUp.iPref = KAudioPrefVoipAudioUplinkNonSignal; //for DTMF mixing
     iPriorityUp.iPriority = KAudioPriorityVoipAudioUplink;
     }
 
--- a/mmserv/voipaudioservices/VoIPServer/inc/VoIPQueueHandlerSrv.h	Fri Jul 23 17:29:03 2010 -0500
+++ b/mmserv/voipaudioservices/VoIPServer/inc/VoIPQueueHandlerSrv.h	Fri Aug 06 16:55:00 2010 -0500
@@ -22,8 +22,6 @@
 #include <e32base.h>
 #include <e32msgqueue.h>
 #include "VoIPAudioClientServer.h"   // for TVoIPMsgBuf
-// FORWARD DECLARATIONS
-
 
 /**
  *  MQueueHandlerObserver
--- a/mmserv/voipaudioservices/VoIPServer/inc/VoIPServerThread.h	Fri Jul 23 17:29:03 2010 -0500
+++ b/mmserv/voipaudioservices/VoIPServer/inc/VoIPServerThread.h	Fri Aug 06 16:55:00 2010 -0500
@@ -16,8 +16,8 @@
  *
  */
 
-#ifndef __VOIPAUDIOSERVERTHREAD_H
-#define __VOIPAUDIOSERVERTHREAD_H
+#ifndef VOIPAUDIOSERVERTHREAD_H
+#define VOIPAUDIOSERVERTHREAD_H
 
 #include <e32msgqueue.h>
 #include <sounddevice.h>
@@ -281,6 +281,6 @@
 
     };
 
-#endif  // __VOIPAUDIOSERVERTHREAD_H
+#endif  // VOIPAUDIOSERVERTHREAD_H
 
 // End of file
--- a/package_definition.xml	Fri Jul 23 17:29:03 2010 -0500
+++ b/package_definition.xml	Fri Aug 06 16:55:00 2010 -0500
@@ -1,79 +1,178 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<SystemDefinition schema="3.0.0">
-  <package id="mmmw" name="Multimedia Middleware" levels="plugin framework server generic specific">
-    <collection id="khronosfws" name="Khronos Frameworks" level="framework">
-      <component id="openmax_al" filter="s60" name="OpenMAX AL" class="framework" introduced="^4">
+<SystemDefinition schema="3.0.1">
+ <package id="mmmw" name="Multimedia Middleware" levels="plugin framework server generic specific">
+  <collection id="mmmw_plat" name="Multimedia Middleware Platform Interfaces" level="specific">
+      <meta rel="testbuild">
+       <group name="mmmw_tsrc_group"/>
+      </meta>
+   <component id="audio_metadata_reader_api" name="Audio MetaData Reader API" class="api" filter="s60">
+    <meta rel="Api" href="mmmw_plat/audio_metadata_reader_api/audio_metadata_reader_api.metaxml"/>
+    <unit bldFile="mmmw_plat/audio_metadata_reader_api/group" filter="!test"/>
+    <unit bldFile="mmmw_plat/audio_metadata_reader_api/tsrc/Group" filter="test,api_test,pref_test,TA_MMMW"/>
+   </component>
+   <component id="audio_output_control_utility_api" name="Audio Output Control Utility API" class="api" filter="s60">
+    <meta rel="Api" href="mmmw_plat/audio_output_control_utility_api/audio_output_control_utility_api.metaxml"/>
+    <unit bldFile="mmmw_plat/audio_output_control_utility_api/group" filter="!test"/>
+    <unit bldFile="mmmw_plat/audio_output_control_utility_api/tsrc/Group" filter="test,api_test,pref_test,TA_MMMW"/>
+   </component>
+   <component id="audio_output_control_utility_proxy_api" name="Audio Output Control Utility Proxy API" class="api" filter="s60">
+    <meta rel="Api" href="mmmw_plat/audio_output_control_utility_proxy_api/audio_output_control_utility_proxy_api.metaxml"/>
+    <unit bldFile="mmmw_plat/audio_output_control_utility_proxy_api/group"/>
+   </component>
+   <component id="call_audio_control_api" name="Call AudioControl API" class="api" filter="s60">
+    <meta rel="Api" href="mmmw_plat/call_audio_control_api/call_audio_control_api.metaxml"/>
+    <unit bldFile="mmmw_plat/call_audio_control_api/group" filter="!test"/>
+    <unit bldFile="mmmw_plat/call_audio_control_api/tsrc/Group" filter="test,api_test,pref_test,TA_MMMW"/>
+   </component>
+   <component id="configuration_components_factory_api" name="Configuration Components Factory API" class="api" filter="s60">
+    <meta rel="Api" href="mmmw_plat/configuration_components_factory_api/configuration_components_factory_api.metaxml"/>
+    <unit bldFile="mmmw_plat/configuration_components_factory_api/group"/>
+   </component>
+   <component id="emc_audio_effects_api" name="EMC Audio Effects API" class="api" filter="s60">
+    <meta rel="Api" href="mmmw_plat/emc_audio_effects_api/emc_audio_effects_api.metaxml"/>
+    <unit bldFile="mmmw_plat/emc_audio_effects_api/group"/>
+   </component>
+   <component id="emc_balance_effect_api" name="EMC Balance Effect API" class="api" filter="s60">
+    <unit bldFile="mmmw_plat/emc_balance_effect_api/group"/>
+   </component>
+   <component id="emc_buffer_source_api" name="EMC Buffer Source API" class="api" filter="s60">
+    <meta rel="Api" href="mmmw_plat/emc_buffer_source_api/emc_buffer_source_api.metaxml"/>
+    <unit bldFile="mmmw_plat/emc_buffer_source_api/group"/>
+   </component>
+   <component id="emc_descriptor_source_api" name="EMC Descriptor Source API" class="api" filter="s60">
+    <meta rel="Api" href="mmmw_plat/emc_descriptor_source_api/emc_descriptor_source_api.metaxml"/>
+    <unit bldFile="mmmw_plat/emc_descriptor_source_api/group"/>
+   </component>
+   <component id="emc_drm_config_intfc_api" name="EMC DRM Config Intfc API" class="api" filter="s60">
+    <meta rel="Api" href="mmmw_plat/emc_drm_config_intfc_api/emc_drm_config_intfc_api.metaxml"/>
+    <unit bldFile="mmmw_plat/emc_drm_config_intfc_api/group"/>
+   </component>
+   <component id="emc_file_source_api" name="EMC File Source API" class="api" filter="s60">
+    <meta rel="Api" href="mmmw_plat/emc_file_source_api/emc_file_source_api.metaxml"/>
+    <unit bldFile="mmmw_plat/emc_file_source_api/group"/>
+   </component>
+   <component id="emc_volume_effect_api" name="EMC Volume Effect API" class="api" filter="s60">
+    <meta rel="Api" href="mmmw_plat/emc_volume_effect_api/emc_volume_effect_api.metaxml"/>
+    <unit bldFile="mmmw_plat/emc_volume_effect_api/group"/>
+   </component>
+   <component id="enhanced_media_client_api" name="Enhanced Media Client API" class="api" filter="s60">
+    <meta rel="Api" href="mmmw_plat/enhanced_media_client_api/enhanced_media_client_api.metaxml"/>
+    <unit bldFile="mmmw_plat/enhanced_media_client_api/group" filter="!test"/>
+    <unit bldFile="mmmw_plat/enhanced_media_client_api/tsrc/Group" filter="test,api_test,pref_test,TA_MMMW"/>
+   </component>
+   <component id="multimedia_data_source_api" name="Multimedia Data Source API" class="api" filter="s60">
+    <meta rel="Api" href="mmmw_plat/multimedia_data_source_api/multimedia_data_source_api.metaxml"/>
+    <unit bldFile="mmmw_plat/multimedia_data_source_api/group"/>
+   </component>
+   <component id="openmax_al_api" name="OpenMAX AL API" class="api" filter="s60" introduced="^4">
+      <meta rel="Api" href="mmmw_plat/openmax_al_api/openmax_al_api.metaxml"/>
+      <unit bldFile="mmmw_plat/openmax_al_api/group" filter="!test"/>
+      <unit bldFile="mmmw_plat/openmax_al_api/tsrc/openmaxaltestmodule/group" filter="test,api_test,pref_test,TA_MMMW"/>
+   </component>
+   <component id="openmax_al_ext_api" name="OpenMAX AL Extensions API" class="api" filter="s60" introduced="^4">
+      <meta rel="Api" href="mmmw_plat/openmax_al_ext_api/openmax_al_ext_api.metaxml"/>
+      <unit bldFile="mmmw_plat/openmax_al_ext_api/group"/>
+   </component>
+   <component id="radio_monitor_api" name="Radio Monitor API" class="api" filter="s60">
+    <meta rel="Api" href="mmmw_plat/radio_monitor_api/radio_monitor_api.metaxml"/>
+    <unit bldFile="mmmw_plat/radio_monitor_api/group"/>
+   </component>
+   <component id="radio_preset_utilities_api" name="Radio Preset Utilities API" class="api" filter="s60">
+    <meta rel="Api" href="mmmw_plat/radio_preset_utilities_api/radio_preset_utilities_api.metaxml"/>
+    <unit bldFile="mmmw_plat/radio_preset_utilities_api/group"/>
+   </component>
+   <component id="radio_utilities_api" name="Radio Utilities API" class="api" filter="s60">
+    <meta rel="Api" href="mmmw_plat/radio_utilities_api/radio_utilities_api.metaxml"/>
+    <unit bldFile="mmmw_plat/radio_utilities_api/group" filter="!test"/>
+    <unit bldFile="mmmw_plat/radio_utilities_api/tsrc/Group" filter="test,api_test,pref_test,TA_MMMW"/>
+   </component>
+   <component id="stream_control_custom_command_api" name="Stream Control Custom Command API" class="api" filter="s60">
+    <meta rel="Api" href="mmmw_plat/stream_control_custom_command_api/stream_control_custom_command_api.metaxml"/>
+    <unit bldFile="mmmw_plat/stream_control_custom_command_api/group"/>
+   </component>
+   <component id="system_tone_service_api" name="System Tone Service API" class="api" filter="s60" introduced="^4">
+      <unit bldFile="mmmw_plat/system_tone_service_api/group"/>
+      <unit bldFile="mmmw_plat/system_tone_service_api/tsrc/group" filter="test,api_test,pref_test,TA_MMMW"/>
+   </component>
+   <component id="telephony_multimedia_service_api" name="Telephony Multimedia Service API" class="api" filter="s60">
+      <meta rel="testbuild">
+       <group name="mmmw_tms_tsrc_group"/>
+      </meta>
+    <unit bldFile="mmmw_plat/telephony_multimedia_service_api/group" filter="!test"/>
+    <unit bldFile="mmmw_plat/telephony_multimedia_service_api/tsrc/Group" filter="test,api_test,pref_test,TA_MMMW,TA_TMS"/>
+   </component>
+   <component id="thumbnail_engine_api" name="Thumbnail Engine API" class="api" filter="s60">
+    <meta rel="Api" href="mmmw_plat/thumbnail_engine_api/thumbnail_engine_api.metaxml"/>
+    <unit bldFile="mmmw_plat/thumbnail_engine_api/group" filter="!test"/>
+    <unit bldFile="mmmw_plat/thumbnail_engine_api/tsrc/Group" filter="test,api_test,pref_test,TA_MMMW"/>
+   </component>
+   <component id="voip_audio_services_api" name="VoIP Audio Services" class="api" filter="s60">
+    <meta rel="Api" href="mmmw_plat/voip_audio_services_api/voip_audio_services_api.metaxml"/>
+    <unit bldFile="mmmw_plat/voip_audio_services_api/group" filter="!test"/>
+    <unit bldFile="mmmw_plat/voip_audio_services_api/tsrc/Group" filter="test,api_test,pref_test,TA_MMMW"/>
+   </component>
+  </collection>
+  <collection id="khronosfws" name="Khronos Frameworks" level="framework">
+      <component id="openmax_al" filter="s60" name="OpenMAX AL" introduced="^4">
         <unit bldFile="khronosfws/openmax_al/group"/>
       </component>
-    </collection>
-    <collection id="mmfenh" name="MMF Enhancements" level="generic">
-      <component id="advancedaudiocontroller" filter="s60" name="Advanced Audio Controllers" class="plugin">
-        <unit bldFile="mmfenh/advancedaudiocontroller/group"/>
-      </component>
-      <component id="audiooutputcontrolutility" filter="s60" name="Audio Output Control Utility">
-        <unit bldFile="mmfenh/audiooutputcontrolutility/group"/>
-      </component>
-      <component id="configurationcomponentsfactory" filter="s60" name="Configuration Components Factory">
-        <unit bldFile="mmfenh/configurationcomponentsfactory/group"/>
-      </component>
-      <component id="enhancedaudioplayerutility" filter="s60" name="Enhanced Audio Player Utility">
-        <unit bldFile="mmfenh/enhancedaudioplayerutility/group"/>
-      </component>
-      <component id="enhancedmediaclient" filter="s60" name="Enhanced Media Client">
-        <unit bldFile="mmfenh/enhancedmediaclient/group"/>
-      </component>
-      <component id="profilesettingsmonitor" filter="s60" name="Profile Settings Monitor">
-        <unit bldFile="mmfenh/profilesettingsmonitor/group"/>
-      </component>
-      <component id="progressivedownload" filter="s60" name="Progressive Download">
-        <unit bldFile="mmfenh/progressivedownload/group"/>
-      </component>
-      <component id="mmfenh_test" filter="s60,test,module_test,pref_test" name="MMF Enhancements Tests" purpose="development">
-        <unit bldFile="mmfenh/advancedaudiocontroller/tsrc/advancedaudiocontrollertestmodule/group"/>
-      </component>      
-    </collection>
-    <collection id="mmserv" name="Multimedia Services" level="specific">
-      <component id="audioeffectsui" filter="s60" name="Audio Effects UI">
-        <unit bldFile="mmserv/audioeffectsui/group"/>
-      </component>
-      <component id="callaudiocontrol" filter="s60" name="Call Audio Control">
-        <unit bldFile="mmserv/callaudiocontrol/group"/>
-      </component>
-      <component id="metadatautility" filter="s60" name="Metadata Utility">
-        <unit bldFile="mmserv/metadatautility/group"/>
-      </component>
-      <component id="radioutility" filter="s60" name="Radio Utility">
-        <unit bldFile="mmserv/radioutility/group"/>
-      </component>
-      <component id="sts" filter="s60" name="System Tone Service" introduced="^4">
-        <unit bldFile="mmserv/sts/group"/>
-      </component>
-      <component id="thumbnailengine" filter="s60" name="Thumbnail Engine" introduced="^2">
-        <unit bldFile="mmserv/thumbnailengine/group"/>
-      </component>
-      <component id="tms" filter="s60" name="Telephony Multimedia Service" introduced="^3">
-        <unit bldFile="mmserv/tms/group"/>
-      </component>
-      <component id="voipaudioservices" filter="s60" name="VoIP Audio Services">
-        <unit bldFile="mmserv/voipaudioservices/group"/>
-      </component>
-      <component id="lib3gpextparser" filter="s60"  name="3GP Extension Metadata Parser Library">
-        <unit bldFile="mmserv/metadatautility/3GPExtParserLib_stub/group" filter="sf_build"/>
-      </component>
-    </collection>    
-    <collection id="mmmw_info" name="Multimedia Middleware Info" level="specific">
-      <component id="mmmw_test" filter="s60,test,api_test,pref_test" name="Multimedia Middleware Tests" purpose="development">
-        <unit bldFile="tsrc/group"/>
-      </component>
-      <component id="mmmw_api_test" filter="s60,test,api_test" name="Multimedia Middleware API Tests" purpose="development">
-        <unit bldFile="mmmw_plat/telephony_multimedia_service_api/tsrc/group"/>
-      </component>
-      <component id="mmmw_plat" filter="s60" name="Multimedia Middleware Platform Interfaces" class="api">
-        <unit bldFile="mmmw_plat/group"/>
-      </component>
-      <component id="mmmw_metadata" name="Multimedia Middleware Metadata" class="config" introduced="^2" purpose="development" target="desktop">
-        <unit mrp="mmmw_info/mmmw_metadata/mmmw_metadata.mrp"/>
-      </component>
-    </collection>
-  </package>
+  </collection>
+  <collection id="mmfenh" name="MMF Enhancements" level="generic">
+   <component id="advancedaudiocontroller" filter="s60" name="Advanced Audio Controllers" class="plugin">
+    <unit bldFile="mmfenh/advancedaudiocontroller/group"/>
+   </component>
+   <component id="audiooutputcontrolutility" filter="s60" name="Audio Output Control Utility">
+    <unit bldFile="mmfenh/audiooutputcontrolutility/group"/>
+   </component>
+   <component id="configurationcomponentsfactory" filter="s60" name="Configuration Components Factory">
+    <unit bldFile="mmfenh/configurationcomponentsfactory/group"/>
+   </component>
+   <component id="enhancedaudioplayerutility" filter="s60" name="Enhanced Audio Player Utility">
+    <unit bldFile="mmfenh/enhancedaudioplayerutility/group"/>
+   </component>
+   <component id="enhancedmediaclient" filter="s60" name="Enhanced Media Client">
+    <unit bldFile="mmfenh/enhancedmediaclient/group"/>
+   </component>
+   <component id="profilesettingsmonitor" filter="s60" name="Profile Settings Monitor">
+    <unit bldFile="mmfenh/profilesettingsmonitor/group"/>
+   </component>
+   <component id="mmfenh_test" filter="s60,test,module_test,pref_test" name="MMF Enhancements Tests" purpose="development">
+      <meta rel="testbuild">
+       <group name="advancedaudiocontroller_tsrc_group"/>
+      </meta>
+    <unit bldFile="mmfenh/advancedaudiocontroller/tsrc/advancedaudiocontrollertestmodule/group"/>
+   </component>
+  </collection>
+  <collection id="mmserv" name="Multimedia Services" level="specific">
+   <component id="callaudiocontrol" filter="s60" name="Call Audio Control">
+    <unit bldFile="mmserv/callaudiocontrol/group"/>
+   </component>
+   <component id="metadatautility" filter="s60" name="Metadata Utility">
+    <unit bldFile="mmserv/metadatautility/group"/>
+   </component>
+   <component id="radioutility" filter="s60" name="Radio Utility">
+    <unit bldFile="mmserv/radioutility/group"/>
+   </component>
+   <component id="sts" filter="s60" name="System Tone Service" introduced="^4">
+    <unit bldFile="mmserv/sts/group"/>
+   </component>
+   <component id="thumbnailengine" filter="s60" name="Thumbnail Engine" introduced="^2">
+    <unit bldFile="mmserv/thumbnailengine/group"/>
+   </component>
+   <component id="tms" filter="s60" name="Telephony Multimedia Service" introduced="^3">
+    <unit bldFile="mmserv/tms/group"/>
+   </component>
+   <component id="voipaudioservices" filter="s60" name="VoIP Audio Services">
+    <unit bldFile="mmserv/voipaudioservices/group"/>
+   </component>
+   <component id="lib3gpextparser" filter="s60" name="3GP Extension Metadata Parser Library">
+    <unit bldFile="mmserv/metadatautility/3GPExtParserLib_stub/group"/>
+   </component>
+  </collection>
+  <collection id="mmmw_info" name="Multimedia Middleware Info" level="specific">
+   <component id="mmmw_test" filter="s60,test,api_test,pref_test" name="Multimedia Middleware Tests" purpose="development">
+    <unit bldFile="tsrc/group"/>
+   </component>
+  </collection>
+ </package>
 </SystemDefinition>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/package_map.xml	Fri Aug 06 16:55:00 2010 -0500
@@ -0,0 +1,1 @@
+<PackageMap root="sf" layer="mw"/>