--- 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);
+ }
}
}