コード例 #1
0
// ---------------------------------------------------------------------------
// CDTMFPayloadFormatWrite::StartDTMFToneL
// Starts a timer which sends specified DTMF digit periodically until 
// StopDTMFTone() is called.
// ---------------------------------------------------------------------------
//
void CDTMFPayloadFormatWrite::StartDTMFToneL( const TChar aTone )
    {
    TUint32 tickCount( User::NTickCount() );
    
    DP_DTMF_WRITE3(  _L("CDTMFPayloadFormatWrite::StartDTMFToneL aTone = %c, tick = %u"),
        static_cast<TUint>( aTone ), tickCount );
    
    DP_DTMF_WRITE2( _L("CDTMFPayloadFormatWrite::StartDTMFToneL enc state %d"),
        iStateMachine->State() );
    
    __ASSERT_ALWAYS( IsValidDigit( aTone ), User::Leave( KErrArgument ) );
    
    iSendingMode = EModeManual;
    
    TSendBufferElement element( aTone, tickCount );
    iSendBuffer.AppendL( element );
    
    if ( EStateSendingIdle == iStateMachine->State() )
        {
        if ( KSignalOutbandDtmf == iGenerationMode )
            {
            iSinkBuffer->Data().FillZ( KDTMFDefaultPayloadSize );
            }

        iStateMachine->ChangeStateTo( EStateEncodeNextDigit );
        }
    else
        {
        DP_DTMF_WRITE( 
            _L("CDTMFPayloadFormatWrite::StartDTMFToneL - REQ BUFFERED") );
        }
    }
コード例 #2
0
ファイル: globegame.cpp プロジェクト: Tkachov/scummvm
void GlobeTracker::stopGlobeMovie() {
	switch (_trackDirection) {
	case kTrackLeft:
		_leftHighlight->hide();
		_globeMovie->stop();
		break;
	case kTrackRight:
		_rightHighlight->hide();
		_globeMovie->stop();
		break;
	case kTrackUp:
		_upHighlight->hide();
		_trackTime = tickCount() - kVerticalDuration;
		break;
	case kTrackDown:
		_downHighlight->hide();
		_trackTime = tickCount() - kVerticalDuration;
		break;
	}
}
コード例 #3
0
ファイル: globegame.cpp プロジェクト: Tkachov/scummvm
void GlobeTracker::trackGlobeMovie() {
	TimeValue time;

	switch (_trackDirection) {
	case kTrackLeft:
		if (!_globeMovie->isRunning())
			_globeMovie->start();

		_leftHighlight->show();
		break;
	case kTrackRight:
		if (!_globeMovie->isRunning())
			_globeMovie->start();

		_rightHighlight->show();
		break;
	case kTrackUp:
		time = _globeMovie->getTime();

		if (_trackTime == 0) {
			_trackTime = tickCount();
		} else if ((int)time - (int)kDurationPerRow * 2 >= 0 && (int)tickCount() >= _trackTime + kVerticalDuration) {
			_trackTime = tickCount();
			_globeMovie->setTime(time - kDurationPerRow * 2);
			_globeMovie->redrawMovieWorld();
		}

		_upHighlight->show();
		break;
	case kTrackDown:
		time = _globeMovie->getTime();

		if (_trackTime == 0) {
			_trackTime = tickCount();
		} else if (time + kDurationPerRow * 2 < _globeMovie->getDuration() && (int)tickCount() >= _trackTime + kVerticalDuration) {
			_trackTime = tickCount();
			_globeMovie->setTime(time + kDurationPerRow * 2);
			_globeMovie->redrawMovieWorld();
		}

		_downHighlight->show();
		break;
	}
}
コード例 #4
0
// ---------------------------------------------------------------------------
// CDTMFPayloadFormatWrite::StopDTMFToneL
// Stops the timer for DTMF digit update packet sending. Starts a timer for 
// sending Final Packet three times according to RFC 2833, section 2.5.1.4.
// ---------------------------------------------------------------------------
//
void CDTMFPayloadFormatWrite::StopDTMFToneL()
    {
    TUint32 tickCount( User::NTickCount() );
    DP_DTMF_WRITE2( _L("CDTMFPayloadFormatWrite::StopDTMFTone, tick = %u"),
        tickCount );
    
    // set stop time to the first unupdated element
    TBool elementFound( EFalse );
    TInt index( 0 );
    while ( !elementFound && index < iSendBuffer.Count() )
        {
        if ( iSendBuffer[index].StopTime() == 0 )
            {
            iSendBuffer[index].SetStopTime( tickCount );
            if ( iSendBuffer[index].StopTime() == 0 )
                {
                // mark stop time as updated to prevent update of the same 
                // element in future
                iSendBuffer[index].SetStopTime( 1 );
                }
            
            elementFound = ETrue;
            }
        
        index++;
        }
    
    if ( EStateToneOn == iStateMachine->State() )
        {
        if ( KSignalOutbandDtmf == iGenerationMode )
            {
            if ( EDTMFPayloadFormatEvent == iPayloadFormat
                || EDTMFPayloadFormatRedEvents == iPayloadFormat )
                {
                // Send final packet with "E" bit set. According to 
                // RFC 2833 2.5.1.4 final packet SHOULD be sent three times.
                iPayloadEncoder
                    ->UpdateEventPayload( ETrue, iToneDuration, iSinkBuffer );
                iStateMachine->ChangeStateTo( EStateToneOff );
                }
            else if ( EDTMFPayloadFormatTone == iPayloadFormat )
                {
                // Tone Payload Format doesn't have final packet redundancy
                iPayloadEncoder->UpdateTonePayload( iToneDuration, 
                                                                iSinkBuffer );
                }
            else
                {
                // Not acceptable payload format
                }
            }
        else
            {
            iStateMachine->ChangeStateTo( EStateToneOff );
            }
        }
    else
        {
        DP_DTMF_WRITE( _L("CDTMFPayloadFormatWrite::StopDTMFTone OUT-OF-SYNC") );
        }
    }