bluetoothengine/btsac/btrcc/src/btrccVolumeLevelControllerBase.cpp
branchRCL_3
changeset 21 53b7818cd282
parent 0 f63038272f30
child 45 b0aebde9b1fb
--- a/bluetoothengine/btsac/btrcc/src/btrccVolumeLevelControllerBase.cpp	Tue May 11 16:23:08 2010 +0300
+++ b/bluetoothengine/btsac/btrcc/src/btrccVolumeLevelControllerBase.cpp	Tue May 25 12:53:11 2010 +0300
@@ -82,6 +82,7 @@
     iBtrccActive->GoActive(); 
 
     (void) GetPhoneVolume(iPhoneVolume);
+    ScalePhoneVolume(iPhoneVolume);
     if( iPhoneVolume > -1)
         {
         DoStart( iPhoneVolume );
@@ -152,10 +153,13 @@
     iRemoteVolume = aVolumeInPhoneScale;
     TInt vol;
     TInt err = GetPhoneVolume(vol);
+    ScalePhoneVolume(iPhoneVolume);
     if(!err)
         {
+        TInt prevPhVol = iPhoneVolume;
         iPhoneVolume = vol;
-        SetPhoneVolume();
+        TInt remoteVol = RoundRemoteVolume(prevPhVol);
+        SetPhoneVolume(remoteVol);
         }
     }
 
@@ -163,24 +167,18 @@
 // CBTRCCVolumeLevelControllerBase::SetPhoneVolume
 // -----------------------------------------------------------------------------
 //
-void CBTRCCVolumeLevelControllerBase::SetPhoneVolume()
+void CBTRCCVolumeLevelControllerBase::SetPhoneVolume(TInt aRemoteVol)
     {
     TRACE_FUNC
-    TRACE_INFO((_L("iRemoteVolume = %d, iPhoneVolume = %d"), iRemoteVolume, iPhoneVolume))
-    if (iRemoteVolume != iPhoneVolume)
+    TRACE_INFO((_L("Remote Volume = %d, iPhoneVolume = %d"), aRemoteVol, iPhoneVolume))
+    TInt err( KErrNotFound );
+    if (aRemoteVol != iPhoneVolume)
         {
-        TInt event = (iRemoteVolume > iPhoneVolume) ? KPSVolumeUpClicked : KPSVolumeDownClicked;
-        TInt err = iVolKeyEventProperty.Set(event);
-        if (err)
-            {
-            TRACE_ERROR((_L("Set KMediaKeysVolumeKeyEvent err %d"), err));
-            }
-        iState = ESetPhoneVolume;
+        TInt event = (aRemoteVol > iPhoneVolume) ? KPSVolumeUpClicked : KPSVolumeDownClicked;
+        err = iVolKeyEventProperty.Set(event);
+        TRACE_INFO((_L("Set KMediaKeysVolumeKeyEvent click %d err %d"), event, err));
         }    
-    else
-        {
-        iState = ESubscribePhoneVolume;
-        } 
+    iState = err ? ESubscribePhoneVolume : ESetPhoneVolume;
     }
 
 // -----------------------------------------------------------------------------
@@ -205,6 +203,36 @@
     }
 
 // -----------------------------------------------------------------------------
+// CBTRCCVolumeLevelControllerBase::GetCurrentRemoteVolume
+// -----------------------------------------------------------------------------
+//
+TInt CBTRCCVolumeLevelControllerBase::GetCurrentRemoteVolume()
+    {
+    return iRemoteVolume;
+    }
+
+// -----------------------------------------------------------------------------
+// CBTRCCVolumeLevelControllerBase::RoundRemoteVolume
+// -----------------------------------------------------------------------------
+//
+TInt CBTRCCVolumeLevelControllerBase::RoundRemoteVolume(TInt /*aPrevPhVol*/)
+    {
+    TRACE_FUNC
+    // default implementation
+    return iRemoteVolume;
+    }
+
+// -----------------------------------------------------------------------------
+// CBTRCCVolumeLevelControllerBase::ScalePhoneVolume
+// -----------------------------------------------------------------------------
+//
+void CBTRCCVolumeLevelControllerBase::ScalePhoneVolume(TInt& /*aVolume*/)
+    {
+    TRACE_FUNC
+    // default implementation
+    }
+
+// -----------------------------------------------------------------------------
 // CBTRCCVolumeLevelControllerBase::RequestCompletedL
 // -----------------------------------------------------------------------------
 //
@@ -213,7 +241,9 @@
     TRACE_FUNC
     if(aActive.ServiceId() == KVolumeChangeListenerServiceId)
         {
+        TInt prevPhVol = iPhoneVolume;
         TInt err = GetPhoneVolume(iPhoneVolume);
+        ScalePhoneVolume(iPhoneVolume);
                 
         if(!err && !aErr && iPhoneVolume > -1)
             {
@@ -224,7 +254,8 @@
                     AdjustRemoteVolume(iPhoneVolume); 
                     break;
                 case ESetPhoneVolume:
-                    SetPhoneVolume();
+                    TInt remoteVol = RoundRemoteVolume(prevPhVol);
+                    SetPhoneVolume(remoteVol);
                     break;
                 }
             }