mmserv/tms/tmsserver/src/tmsserver.cpp
branchRCL_3
changeset 13 f5c5c82a163e
parent 10 3d8c721bf319
child 17 3570217d8c21
--- a/mmserv/tms/tmsserver/src/tmsserver.cpp	Wed Apr 14 16:29:54 2010 +0300
+++ b/mmserv/tms/tmsserver/src/tmsserver.cpp	Tue Apr 27 17:11:02 2010 +0300
@@ -79,7 +79,7 @@
     iUplCodecs.Reset();
     iUplCodecs.Close();
     delete iEffectSettings;
-    CancelRoutingNotifier();
+    delete iTarHandler;
     CancelCenRepHandler();
 
     TRACE_PRN_FN_EXT;
@@ -129,7 +129,10 @@
     iEffectSettings = TMSGlobalEffectsSettings::NewL();
     iTarHandler = NULL;
     iAudioCenRepHandler = NULL;
-    iCurrentRouting = TMS_AUDIO_OUTPUT_NONE;
+    iCurrentRouting = TMS_AUDIO_OUTPUT_PRIVATE;
+
+    // We need it running for global volume change updates
+    StartRoutingNotifierL();
 
     TRACE_PRN_FN_EXT;
     }
@@ -333,7 +336,7 @@
 //
 void TMSServer::CancelRoutingNotifier()
     {
-    if (--iTarHandlerCount <= 0)
+    if (--iTarHandlerCount < 1)
         {
         delete iTarHandler;
         iTarHandler = NULL;
@@ -628,7 +631,8 @@
         while (serverSession != NULL)
             {
             serverSession->HandleGlobalEffectChange(
-                    TMS_EVENT_EFFECT_VOL_CHANGED);
+                    TMS_EVENT_EFFECT_VOL_CHANGED, level, EFalse,
+                    iCurrentRouting);
 
             serverSession = static_cast<TMSServerSession*> (iSessionIter++);
             }
@@ -703,7 +707,7 @@
         while (serverSession != NULL)
             {
             serverSession->HandleGlobalEffectChange(
-                    TMS_EVENT_EFFECT_GAIN_CHANGED);
+                    TMS_EVENT_EFFECT_GAIN_CHANGED, level);
             serverSession = static_cast<TMSServerSession*> (iSessionIter++);
             }
         }
@@ -822,19 +826,37 @@
     {
     TRACE_PRN_FN_ENT;
 
+    TInt vol;
     iCurrentRouting = routingpckg().iOutput;
+    if (iCurrentRouting == TMS_AUDIO_OUTPUT_PUBLIC ||
+            iCurrentRouting == TMS_AUDIO_OUTPUT_LOUDSPEAKER)
+        {
+        iEffectSettings->GetLoudSpkrVolume(vol);
+        }
+    else
+        {
+        iEffectSettings->GetEarPieceVolume(vol);
+        }
+
+    TInt status = SendMessageToCallServ(TMS_EFFECT_GLOBAL_VOL_SET, vol);
+
     iSessionIter.SetToFirst();
     TMSServerSession* serverSession =
             static_cast<TMSServerSession*> (iSessionIter++);
-
     while (serverSession != NULL)
         {
-        serverSession->HandleRoutingChange(routingpckg);
+        // Send only if there is a subscriber to TMS routing notifications.
+        if (iTarHandlerCount > 1)
+            {
+            serverSession->HandleRoutingChange(routingpckg);
+            }
+        serverSession->HandleGlobalEffectChange(TMS_EVENT_EFFECT_VOL_CHANGED,
+                vol, ETrue, iCurrentRouting);
         serverSession = static_cast<TMSServerSession*> (iSessionIter++);
         }
 
     TRACE_PRN_FN_EXT;
-    return TMS_RESULT_SUCCESS;
+    return status;
     }
 
 // -----------------------------------------------------------------------------