?? classone.cpp
字號:
m_nPPRCtr = 0;
m_nPhaseState = STATE_SEND_CTC;
DecrementSpeed();
SendHDLCFrame();
}
else
{
//OutputDebugString( "Sending bad frames\n" );
m_FaxFile.ReadBadFrames( m_nClass1Speed );
// Send 75ms of silence
SendFormattedCommand( "FTS", 8 );
m_nPhaseState = STATE_SEND_SILENCE_BEFORE_PHASE_C;
}
}
else if ( m_FaxFile.GetPartialPage() )
{
// Send 75ms of silence
SendFormattedCommand( "FTS", 8 );
m_nPhaseState = STATE_SEND_SILENCE_BEFORE_PHASE_C;
//OutputDebugString( "Sending next block\n" );
m_nPPRCtr = 0;
if( m_FaxFile.ReadPage( m_bECM, m_nClass1Speed, m_wMinLineChars ) == false )
{
m_sLastError.assign( (char*)LoadString(GEN_ERROR_READING_TIFF_FILE).c_str() );
// SignalEvent( EVENT_ERROR );
SendHDLCFrame();
SetState( STATE_PHASE_E, STATE_SEND_DCN );
}
}
else
{
// Send 75ms of silence
SendFormattedCommand( "FTS", 8 );
m_nPhaseState = STATE_SEND_SILENCE_BEFORE_PHASE_C;
m_nPPRCtr = 0;
if( m_FaxFile.ReadNextHeader() == false )
{
m_sLastError.assign( (char*)LoadString(GEN_ERROR_READING_TIFF_FILE).c_str() );
// SignalEvent( EVENT_ERROR );
SendHDLCFrame();
SetState( STATE_PHASE_E, STATE_SEND_DCN );
}
else
{
if( m_FaxFile.ReadPage( m_bECM, m_nClass1Speed, m_wMinLineChars ) == false )
{
m_sLastError.assign( (char*)LoadString(GEN_ERROR_READING_TIFF_FILE).c_str() );
// SignalEvent( EVENT_ERROR );
SendHDLCFrame();
SetState( STATE_PHASE_E, STATE_SEND_DCN );
}
}
}
}
}
else if( m_bFinalHDLCFrame && m_bGotCRP )
{
// repeat last command
m_nPhaseState = STATE_SEND_PAGE_FINISHED;
SendHDLCFrame();
}
else if( m_bFinalHDLCFrame && m_bGotRNR )
{
if( (GetTickCount() - m_dwRNRStart) > 60000 )
{
m_sLastError.assign( (char*)LoadString(GEN_T5_TIMEOUT).c_str() );
// SignalEvent( EVENT_ERROR );
SendHDLCFrame();
SetState( STATE_PHASE_E, STATE_SEND_DCN );
}
else
{
// receiver not ready
m_nPhaseState = STATE_SEND_RR;
SendHDLCFrame();
}
}
else if( m_bFinalHDLCFrame && m_bGotRTP )
{
EnableSoftFlowControl( true );
if( m_FaxFile.MorePages() == false && m_FaxFile.GetPartialPage() == false )
{
m_FaxFile.IncrementPageCount();
m_bSuccessful = true;
SendHDLCFrame();
SetState( STATE_PHASE_E, STATE_SEND_DCN );
KillTimer( TIMER_MAXPAGERETRIES );
}
else
{
if ( m_FaxFile.GetPartialPage() )
{
//OutputDebugString( "Sending next block\n" );
m_nPPRCtr = 0;
if( m_FaxFile.ReadPage( m_bECM, m_nClass1Speed, m_wMinLineChars ) == false )
{
m_sLastError.assign( (char*)LoadString(GEN_ERROR_READING_TIFF_FILE).c_str() );
// SignalEvent( EVENT_ERROR );
SendHDLCFrame();
SetState( STATE_PHASE_E, STATE_SEND_DCN );
}
}
else
{
//OutputDebugString( "Sending next page\n" );
m_nPPRCtr = 0;
if( m_FaxFile.ReadNextHeader() == false )
{
m_sLastError.assign( (char*)LoadString(GEN_ERROR_READING_TIFF_FILE).c_str() );
// SignalEvent( EVENT_ERROR );
SendHDLCFrame();
SetState( STATE_PHASE_E, STATE_SEND_DCN );
}
else
{
if( m_FaxFile.ReadPage( m_bECM, m_nClass1Speed, m_wMinLineChars ) == false )
{
m_sLastError.assign( (char*)LoadString(GEN_ERROR_READING_TIFF_FILE).c_str() );
// SignalEvent( EVENT_ERROR );
SendHDLCFrame();
SetState( STATE_PHASE_E, STATE_SEND_DCN );
}
}
}
SendFormattedCommand( "FTS", 8 );
SetState( STATE_PHASE_B, STATE_SEND_SILENCE_BEFORE_TRAINING );
// decrement speed and retrain
//DecrementSpeed();
//SendHDLCFrame();
//SetState( STATE_PHASE_B, STATE_SEND_DCS );
//m_bGotConnect = false;
}
}
else if( m_bFinalHDLCFrame && m_bGotRTN )
{
SendFormattedCommand( "FTS", 8 );
SetState( STATE_PHASE_B, STATE_SEND_SILENCE_BEFORE_TRAINING );
//DecrementSpeed();
//SendHDLCFrame();
//SetState( STATE_PHASE_B, STATE_SEND_DCS );
//m_bGotConnect = false;
}
else if( m_bRecvHDLCError )
{
if( ++m_nLoopCtr >= 3 )
{
m_sLastError.assign( (char*)LoadString(GEN_SENT_PPS_3_TIMES_WITHOUT_RESPONSE).c_str() );
// SignalEvent( EVENT_ERROR );
SendHDLCFrame();
SetState( STATE_PHASE_E, STATE_SEND_DCN );
}
else
{
SendHDLCFrame();
m_nPhaseState = STATE_SEND_PAGE_FINISHED;
}
}
else
{
RecvHDLCFrame();
}
}
else if( stricmp( m_szLineBuff, "CONNECT" ) == 0 )
{
m_bGotConnect = true;
// get ready for another HDLC frame
InitHDLC();
KillTimer( TIMER_HDLC_RECV );
}
else if ( m_szLineBuff[0] == DLE && m_szLineBuff[1] == ETX )
{
m_bRecvHDLCError = true;
}
else
{
if( ++m_nLoopCtr >= 3 )
{
m_sLastError.assign( (char*)LoadString(GEN_SENT_PPS_3_TIMES_WITHOUT_RESPONSE).c_str() );
// SignalEvent( EVENT_ERROR );
SendHDLCFrame();
SetState( STATE_PHASE_E, STATE_SEND_DCN );
}
else
{
SendHDLCFrame();
m_nPhaseState = STATE_SEND_PAGE_FINISHED;
}
}
break;
case STATE_SEND_RR:
if( stricmp( m_szLineBuff, "CONNECT" ) == 0 )
{
SendSimpleHDLCFrame( RR );
m_nPhaseState = STATE_PAGE_FINISHED_SENT;
m_bGotPPR = false;
m_bFinalHDLCFrame = false;
m_bGotMCF = false;
m_bGotRNR = false;
m_bGotCRP = false;
}
else
{
SendHDLCFrame();
m_nPhaseState = STATE_SEND_PAGE_FINISHED;
}
break;
case STATE_SEND_CTC:
if( stricmp( m_szLineBuff, "CONNECT" ) == 0 )
{
// This is not a simple frame
SendCTC();
m_nPhaseState = STATE_CTC_SENT;
m_bGotCRP = false;
m_bFinalHDLCFrame = false;
}
else
{
SendHDLCFrame();
m_nPhaseState = STATE_SEND_PAGE_FINISHED;
}
break;
case STATE_CTC_SENT:
m_nPhaseState = STATE_WAIT_FOR_CTR;
RecvHDLCFrame();
break;
case STATE_WAIT_FOR_CTR:
if( stricmp( m_szLineBuff, "OK" ) == 0 )
{
if( m_bGotDCN )
{
m_sLastError.assign( (char*)LoadString(GEN_UNEXPECTED_DCN_RECEIVED).c_str() );
Terminate();
DoHangup();
}
else if( m_bGotCRP )
{
m_nPhaseState = STATE_SEND_CTC;
SendHDLCFrame();
}
else if( m_bFinalHDLCFrame )
{
//OutputDebugString( "Sending bad frames\n" );
m_FaxFile.ReadBadFrames( m_nClass1Speed );
// Send 75ms of silence
SendFormattedCommand( "FTS", 8 );
m_nPhaseState = STATE_SEND_SILENCE_BEFORE_PHASE_C;
}
else if( m_bRecvHDLCError )
{
SendHDLCFrame();
m_nPhaseState = STATE_SEND_PAGE_FINISHED;
}
else
{
// ask for
//OutputDebugString( "Waiting for CTR\n" );
EnableSoftFlowControl( false );
RecvHDLCFrame();
}
}
else if( stricmp( m_szLineBuff, "CONNECT" ) == 0 )
{
m_bGotConnect = true;
// get ready for another HDLC frame
InitHDLC();
KillTimer( TIMER_HDLC_RECV );
}
else if ( m_szLineBuff[0] == DLE && m_szLineBuff[1] == ETX )
{
m_bRecvHDLCError = true;
}
else
{
SendHDLCFrame();
m_nPhaseState = STATE_SEND_PAGE_FINISHED;
}
break;
case STATE_SEND_SILENCE_BEFORE_PHASE_C:
//if( stricmp( m_szLineBuff, "OK" ) != 0 )
//{
// OutputDebugString( "Error sending silence\n" );
//}
SendShortTraining();
// change state
SetState( STATE_PHASE_C );
//OutputDebugString( "Going to Phase C\n" );
break;
// begin receiving states
case STATE_WAIT_FOR_EOP:
if( stricmp( m_szLineBuff, "OK" ) == 0 )
{
if( m_bGotDCN )
{
m_sLastError.assign( (char*)LoadString(GEN_UNEXPECTED_DCN_RECEIVED).c_str() );
Terminate();
DoHangup();
}
else if( m_bFinalHDLCFrame )
{
m_nLoopCtr = 0;
SendHDLCFrame();
m_nPhaseState = STATE_SEND_MCF;
m_bSendPPR = false;
if( m_bECM )
{
if( m_FaxFile.IsECMBlockGood( m_ECMFrameCount ) )
{
m_nPPRCtr = 0;
m_FaxFile.NextECMBlock();
if( m_bGotEOP || m_bGotEOM || m_bGotMPS )
{
m_FaxFile.WriteIFD();
}
// Can't send RTN in ECM mode
m_bLastPageGood = true;
}
else
{
m_FaxFile.RedoECMBlock();
m_bSendPPR = true;
m_nPPRCtr++;
}
}
}
else
{
if( GetTickCount() - m_dwEOPWaitStart > 30000 )
{
m_sLastError.assign( (char*)LoadString(GEN_PPS_NOT_RECEIVED).c_str() );
// SignalEvent( EVENT_ERROR );
SendHDLCFrame();
SetState( STATE_PHASE_E, STATE_SEND_DCN );
}
else
{
// ask for
//OutputDebugString( "Waiting for EOP\n" );
//EnableSoftFlowControl( false );
RecvHDLCFrame();
}
}
}
else if( stricmp( m_szLineBuff, "CONNECT" ) == 0 )
{
m_bGotConnect = true;
// get ready for another HDLC frame
InitHDLC();
KillTimer( TIMER_HDLC_RECV );
}
else if ( m_szLineBuff[0] == DLE && m_szLineBuff[1] == ETX )
{
m_bRecvHDLCError = true;
}
else
{
if( GetTickCount() - m_dwEOPWaitStart > 30000 )
{
m_sLastError.assign( (char*)LoadString(GEN_PPS_NOT_RECEIVED).c_str() );
// SignalEvent( EVENT_ERROR );
SendHDLCFrame();
SetState( STATE_PHASE_E, STATE_SEND_DCN );
}
else
{
//OutputDebugString( "Waiting for post-page signal\n" );
RecvHDLCFrame();
}
}
break;
case STATE_SEND_MCF:
if( stricmp( m_szLineBuff, "CONNECT" ) == 0 )
{
SendMCF();
}
else
{
if( ++m_nLoopCtr >= 3 )
{
m_sLastError.assign( (char*)LoadString(GEN_ERROR_SENDING_MCF).c_str() );
// SignalEvent( EVENT_ERROR );
SendHDLCFrame();
SetState( STATE_PHASE_E, STATE_SEND_DCN );
}
else
{
//OutputDebugString( "Error sending MCF\n" );
SendHDLCFrame();
}
}
break;
case STATE_MCF_SENT:
if( stricmp( m_szLineBuff, "OK" ) == 0 )
{
if( m_bGotEOP && !m_bSendPPR )
{
m_bSuccessful = true;
//OutputDebugString( "Going to phase E\n" );
m_bFinalHDLCFrame = false;
RecvHDLCFrame();
SetState( STATE_PHASE_E, STATE_RECEIVE_DCN );
//SignalEvent( EVENT_END_PAGE );
}
else if( m_bGotEOM && !m_bSendPPR )
{
SendHDLCFrame();
SetState( STATE_PHASE_B, STATE_SEND_CSI );
m_nLoopCtr = 0;
//SignalEvent( EVENT_END_PAGE );
}
else if( m_bSendPPR && m_nPPRCtr > 3 )
{
//OutputDebugString( "Waiting for CTC\n" );
m_bFinalHDLCFrame = false;
RecvHDLCFrame();
m_nPhaseState = STATE_WAIT_FOR_CTC;
m_bGotConnect = false;
m_bGotCTC = false;
m_bGotEOR = false;
m_bGotCRP = false;
}
else /* default is to go back to phase C */
{
//OutputDebugString( "Going back to phase C\n" );
RecvShortTraining();
SetState( STATE_PHASE_C );
}
}
else
{
if( ++m_nLoopCtr >= 3 )
{
m_sLastError.assign( (char*)LoadString(GEN_ERROR_SENDING_MCF).c_str() );
// SignalEvent( EVENT_ERROR );
SendHDLCFrame();
SetState( STATE_PHASE_E, STATE_SEND_DCN );
}
else
{
//OutputDebugString( "Error sending MCF\n" );
SendHDLCFrame();
m_nPhaseState = STATE_SEND_MCF;
}
}
break;
case STATE_WAIT_FOR_CTC:
if( stricmp( m_szLineBuff, "OK" ) == 0 )
{
if( m_bGotDCN )
{
m_sLastError.assign( (char*)LoadString(GEN_UNEXPECTED_DCN_RECEIVED).c_str() );
Terminate();
DoHangup();
}
else if( m_bGotCRP )
{
SendHDLCFrame();
m_nPhaseState = STATE_SEND_MCF;
}
else if( m_bFinalHDLCFrame && (m_bGotCTC || m_bGotEOR) )
{
m_nPPRCtr = 0;
SendHDLCFrame();
m_nPhaseState = STATE_SEND_CTR;
m_nLoopCtr = 0;
m_bGotConnect = false;
}
else
{
// ask for
//OutputDebugString( "Waiting for CTC\n" );
//EnableSoftFlowControl( false );
RecvHDLCFrame();
}
}
else if( stricmp( m_szLineBuff, "CONNECT" ) == 0 )
{
m_bGotConnect = true;
// get ready for another HDLC frame
InitHDLC();
KillTimer( TIMER_HDLC_RECV );
}
else if ( m_szLineBuff[0] == DLE && m_szLineBuff[1] == ETX )
{
m_bRecvHDLCError = true;
}
else
{
//OutputDebugString( "Bad HDLC frame\n" );
RecvHDLCFrame();
}
break;
case STATE_SEND_CTR:
if( stricmp( m_szLineBuff, "OK" ) == 0 )
{
if( m_bGotCTC )
{
//OutputDebugString( "Going back to phase C\n" );
RecvShortTraining();
SetState( STATE_PHASE_C );
}
else // The only alternative is EOR was received
{
m_nPPRCtr = 0;
m_FaxFile.NextECMBlock();
if( m_bGotEOP || m_bGotEOM || m_bGotMPS )
{
m_FaxFile.WriteIFD();
}
// Can't send RTN in ECM mode
m_bLastPageGood = true;
if( m_bGotEOP )
{
m_bSuccessful = true;
//OutputDebugString( "Going to phase E\n" );
m_bFinalHDLCFrame = false;
RecvHDLCFrame();
SetState( STATE_PHASE_E, STATE_RECEIVE_DCN );
}
else if( m_bGotEOM )
{
SendHDLCFrame();
SetState( STATE_PHASE_B, STATE_SEND_CSI );
m_nLoopCtr = 0;
}
else /* default is to go back to phase C */
{
//OutputDebugString( "Going back to phase C\n" );
RecvShortTraining();
SetState( STATE_PHASE_C );
}
}
}
else if( stricmp( m_szLineBuff, "CONNECT" ) == 0 )
{
m_bGotConnect = true;
SendCTR();
}
else
{
if( ++m_nLoopCtr >= 3 )
{
m_sLastError.assign( (char*)LoadString(GEN_ERROR_SENDING_CTR).c_str() );
// SignalEvent( EVENT_ERROR );
SendHDLCFrame();
SetState( STATE_PHASE_E, STATE_SEND_DCN );
}
else
{
//OutputDebugString( "Error sending CTR\n" );
SendHDLCFrame();
}
}
break;
}
}
//////////////////////////////////////////////////////////////////////
// Phase E - Disconnect
//////////////////////////////////////////////////////////////////////
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -