mmserv/radioutility/radioserver/Server/Src/RadioServer.cpp
branchRCL_3
changeset 7 709f89d8c047
parent 3 4f62049db6ac
child 8 e35735ece90c
--- a/mmserv/radioutility/radioserver/Server/Src/RadioServer.cpp	Fri Feb 19 23:19:48 2010 +0200
+++ b/mmserv/radioutility/radioserver/Server/Src/RadioServer.cpp	Fri Mar 12 15:45:41 2010 +0200
@@ -70,7 +70,8 @@
         iMaxSigStrength(0),
         iEnableTunerInOffline(EFalse),
         iSquelch(EFalse),
-        iPreEmpted(EFalse)
+        iPreEmpted(EFalse),
+        iSchedulerWait( NULL )
     {
     }
 
@@ -127,6 +128,8 @@
     iMapper = CTspClientMapper::NewL();
     iTspState = CTspClientMapper::ERegisteredClients;
 #endif // RD_TSP_CLIENT_MAPPER
+    
+    iSchedulerWait  = new (ELeave) CActiveSchedulerWait;
 
     RADIO_RDEBUG(_L("[RADIO-SVR] ConstructL() - End"));
     }
@@ -166,6 +169,7 @@
     delete iTunerControl;
     delete iTunerControlObserver;
     delete iAsyncRequest;
+    delete iSchedulerWait;
 
     ClearQueue();
     iRdsNotifyClientIdArray.Close();
@@ -619,6 +623,11 @@
                 }
             break;
         case EStateTunerOff:
+            if( iSchedulerWait->IsStarted() )
+                {
+                // let the PlayError() continue after this callback
+                iSchedulerWait->AsyncStop();
+                }
             if ( iAsyncRequest && iAsyncRequest->iType == ERadioServSetFrequencyRange )
                 {
                 if ( aError == KErrNone )
@@ -639,6 +648,14 @@
                     CompleteAsyncRequest(aError);
                     }
                 }
+            else
+                {
+                if( aError == KRadioServErrDuplicateRequest )
+                    {
+                    // tuner off and duplicate request going on, trace it out
+                    RADIO_RDEBUG(_L("[RADIO-SVR] TunerOffComplete() - EStateTunerOff - KRadioServErrDuplicateRequest"));
+                    }
+                }
             break;
         default:
             // should never happen
@@ -1387,7 +1404,7 @@
                 iDevSound->SetVolume(iSettings->Volume());
                 iSquelch = EFalse;
                 }
-            CompleteAsyncRequest(KRadioServErrTuning);
+            // do not yet complete async request with KRadioServErrTuning
             }
 
         // We are being pre-empted by another application with higher priority.
@@ -1395,8 +1412,18 @@
         iState = EStateTunerOff;
         iPreEmpted = ETrue;
         iSettings->SetRadioOff(aError);
-        iTunerControl->TunerOff();
+        iTunerControl->TunerOff();		//The adaptation is expected to call TunerOffComplete() upon completion
+        // wait for TunerOffComplete callback
+        iSchedulerWait->Start();
         SetTspTargetClient( ERsPlayerIdle );
+        
+        if ( iAsyncRequest && ( (iAsyncRequest->iType == ERadioServStationSeek) ||
+                                (iAsyncRequest->iType == ERadioServStationSeekByPTY) ||
+                                (iAsyncRequest->iType == ERadioServStationSeekByTA) ||
+                                (iAsyncRequest->iType == ERadioServStationSeekByTP) ) )
+            {
+            CompleteAsyncRequest(KRadioServErrTuning);
+            }
         }
     }