mmserv/tms/tmscallserver/src/tmscsdevsound.cpp
changeset 32 94fc26b6e006
parent 31 8dfd592727cb
child 33 5e8b14bae8c3
child 42 1fa3fb47b1e3
equal deleted inserted replaced
31:8dfd592727cb 32:94fc26b6e006
    23 #include "tmscsdevsoundobserver.h"
    23 #include "tmscsdevsoundobserver.h"
    24 
    24 
    25 using namespace TMS;
    25 using namespace TMS;
    26 
    26 
    27 // CONSTANTS
    27 // CONSTANTS
    28 const gint KTimeoutInitial = 200000; // 200 ms initial timeout
    28 const gint KTimeoutInitial = 250000; // 250 ms initial timeout
    29 const gint KTimeoutMultiplier = 2;   // Double the timeout for each retry
    29 const gint KTimeoutMultiplier = 2;   // Double the timeout for each retry
    30 const gint KMicroSecMultiply = 1000000; //1 sec
    30 const gint KPeriodicTimeoutMax = 2000000; // 2 sec max periodic timeout
       
    31 const gint KMicroSecMultiply = 1000000;   // 1 sec
    31 
    32 
    32 // -----------------------------------------------------------------------------
    33 // -----------------------------------------------------------------------------
    33 // TMSCSDevSound
    34 // TMSCSDevSound
    34 // -----------------------------------------------------------------------------
    35 // -----------------------------------------------------------------------------
    35 //
    36 //
    36 TMSCSDevSound::TMSCSDevSound(TMSCSDevSoundObserver& observer) :
    37 TMSCSDevSound::TMSCSDevSound(TMSCSDevSoundObserver& observer) :
    37     iObserver(observer)
    38     iObserver(observer)
    38     {
    39     {
    39     iTimer = NULL;
    40     iTimer = NULL;
    40     iTimeout = KTimeoutInitial;
    41     iPeriodic = KTimeoutInitial;
       
    42     iElapsedTime = 0;
    41     iInitRetryTime = 0;
    43     iInitRetryTime = 0;
    42     iStartRetryTime = 0;
    44     iStartRetryTime = 0;
    43     }
    45     }
    44 
    46 
    45 // -----------------------------------------------------------------------------
    47 // -----------------------------------------------------------------------------
   118     delete iDevSound;
   120     delete iDevSound;
   119     TRACE_PRN_FN_EXT;
   121     TRACE_PRN_FN_EXT;
   120     }
   122     }
   121 
   123 
   122 // -----------------------------------------------------------------------------
   124 // -----------------------------------------------------------------------------
   123 // Tries to activate the audio stream if not active or activating
   125 // Tries to activate the audio stream if not already active or activating
   124 // -----------------------------------------------------------------------------
   126 // -----------------------------------------------------------------------------
   125 //
   127 //
   126 void TMSCSDevSound::Activate(const gint retrytime)
   128 void TMSCSDevSound::Activate(const gint retrytime)
   127     {
   129     {
   128     iStartRetryTime = retrytime;
   130     iStartRetryTime = retrytime;
   141 void TMSCSDevSound::Deactivate(gboolean reset)
   143 void TMSCSDevSound::Deactivate(gboolean reset)
   142     {
   144     {
   143     TRACE_PRN_FN_ENT;
   145     TRACE_PRN_FN_ENT;
   144     if (reset)
   146     if (reset)
   145         {
   147         {
   146         iTimeout = KTimeoutInitial;
   148         iPeriodic = KTimeoutInitial;
   147         }
   149         }
   148     CancelTimer();
   150     CancelTimer();
   149     if (iDevSound && (iActive || iActivationOngoing))
   151     if (iDevSound && (iActive || iActivationOngoing))
   150         {
   152         {
   151         iDevSound->Stop();
   153         iDevSound->Stop();
   175         {
   177         {
   176         StartTimer();
   178         StartTimer();
   177         }
   179         }
   178     else
   180     else
   179         {
   181         {
   180         iTimeout = KTimeoutInitial;
   182         iPeriodic = KTimeoutInitial;
   181         CancelTimer();
   183         CancelTimer();
   182         NotifyEvent(aError);
   184         NotifyEvent(aError);
   183         }
   185         }
   184     TRACE_PRN_FN_EXT;
   186     TRACE_PRN_FN_EXT;
   185     }
   187     }
   186 
   188 
   187 
       
   188 // -----------------------------------------------------------------------------
   189 // -----------------------------------------------------------------------------
   189 // TMSCSDevSound::NotifyEvent
   190 // TMSCSDevSound::NotifyEvent
   190 // -----------------------------------------------------------------------------
   191 // -----------------------------------------------------------------------------
   191 //
   192 //
   192 void TMSCSDevSound::NotifyEvent(gint error)
   193 void TMSCSDevSound::NotifyEvent(gint error)
   207 // -----------------------------------------------------------------------------
   208 // -----------------------------------------------------------------------------
   208 //
   209 //
   209 void TMSCSDevSound::CancelTimer()
   210 void TMSCSDevSound::CancelTimer()
   210     {
   211     {
   211     iInitRetryTime = 0;
   212     iInitRetryTime = 0;
       
   213     iStartRetryTime = 0;
       
   214     iElapsedTime = 0;
       
   215 
   212     if (iTimer)
   216     if (iTimer)
   213         {
   217         {
   214         if (iTimer->IsRunning())
   218         if (iTimer->IsRunning())
   215             {
   219             {
   216             iTimer->CancelNotify();
   220             iTimer->CancelNotify();
   225 //
   229 //
   226 void TMSCSDevSound::StartTimer()
   230 void TMSCSDevSound::StartTimer()
   227     {
   231     {
   228     if (iTimer && (iInitRetryTime != 0 || iStartRetryTime != 0))
   232     if (iTimer && (iInitRetryTime != 0 || iStartRetryTime != 0))
   229         {
   233         {
   230         iTimer->NotifyAfter(iTimeout, *this);
   234         iTimer->NotifyAfter(iPeriodic, *this);
   231         }
   235         }
   232     }
   236     }
   233 
   237 
   234 // -----------------------------------------------------------------------------
   238 // -----------------------------------------------------------------------------
   235 // From TMSTimerObserver
   239 // From TMSTimerObserver
   236 // Notification upon TMSTimer timeout.
   240 // Notification upon TMSTimer timeout.
   237 // -----------------------------------------------------------------------------
   241 // -----------------------------------------------------------------------------
   238 //
   242 //
   239 void TMSCSDevSound::TimerEvent()
   243 void TMSCSDevSound::TimerEvent()
   240     {
   244     {
   241     iTimeout *= KTimeoutMultiplier;
   245     if (iPeriodic < KPeriodicTimeoutMax)
       
   246         {
       
   247         iPeriodic *= KTimeoutMultiplier;
       
   248         }
       
   249     iElapsedTime += iPeriodic;
   242 
   250 
   243     if (!iActivationOngoing) //Initializing
   251     if (!iActivationOngoing) //Initializing
   244         {
   252         {
   245         if (iTimeout > (iInitRetryTime * KMicroSecMultiply))
   253         if (iElapsedTime >= (iInitRetryTime * KMicroSecMultiply))
   246             {
   254             {
   247             iInitRetryTime = 0;
   255             iInitRetryTime = 0; //timer will not start again
   248             }
   256             }
   249         TRAPD(status, InitializeL());
   257         TRAPD(status, InitializeL());
   250         if (status != TMS_RESULT_SUCCESS)
   258         if (status != TMS_RESULT_SUCCESS)
   251             {
   259             {
   252             NotifyEvent(status);
   260             NotifyEvent(status);
   253             }
   261             }
   254         }
   262         }
   255     else //Activating
   263     else //Activating
   256         {
   264         {
   257         if (iTimeout > (iStartRetryTime * KMicroSecMultiply))
   265         if (iElapsedTime >= (iStartRetryTime * KMicroSecMultiply))
   258             {
   266             {
   259             iStartRetryTime = 0;
   267             iStartRetryTime = 0; //timer will not start again
   260             }
   268             }
   261         Deactivate(FALSE);
   269         Deactivate(FALSE);
   262         Activate(iStartRetryTime);
   270         Activate(iStartRetryTime);
   263         }
   271         }
   264     }
   272     }