ClassOne.h
上传用户:glass0516
上传日期:2010-01-11
资源大小:104k
文件大小:5k
源码类别:

传真(Fax)编程

开发平台:

Visual C++

  1. /*****************************************************************************
  2. * RelayFax Open Source Project
  3. * Copyright 1996-2004 Alt-N Technologies, Ltd.
  4. * All rights reserved.
  5. *
  6. * Redistribution and use in source and binary forms, with or without
  7. * modification, are permitted only as authorized by the RelayFax Open 
  8. * Source License.  A copy of this license is available in file LICENSE 
  9. * in the top-level directory of the distribution.
  10. *
  11. * RelayFax is a registered trademark of Alt-N Technologies, Ltd.
  12. *
  13. * Individual files and/or contributed packages may be copyright by
  14. * other parties and subject to additional restrictions.
  15. *****************************************************************************/
  16. ////////////////////////////////////////////////////////////////////////////////
  17. //
  18. // The purpose of CClassOne is contain the protocol specifics of EIA
  19. // fax modem class 1
  20. //
  21. ////////////////////////////////////////////////////////////////////////////////
  22. #ifndef CLASSONE_H
  23. #define CLASSONE_H
  24. #include "Modem.h"
  25. class CClassOne : public CModem  
  26. {
  27. public:
  28. enum PhaseBStates { STATE_WAIT_FOR_DIS, // sending states
  29.     STATE_SEND_TIS,
  30. STATE_SEND_DCS, 
  31. STATE_SEND_SILENCE_BEFORE_TRAINING,
  32. STATE_SEND_TRAINING_DATA,
  33.     STATE_SEND_TRAINING,
  34.     STATE_WAIT_FOR_CFR,
  35. STATE_SEND_SILENCE_BEFORE_DATA,
  36. STATE_SEND_CSI, // receiving states
  37. STATE_SEND_DIS,
  38. STATE_DIS_SENT,
  39.                     STATE_WAIT_FOR_DCS,
  40. STATE_RECEIVE_TRAINING_DATA,
  41.     STATE_RECEIVE_TRAINING,
  42.                     STATE_SEND_CFR,
  43.                     STATE_SEND_RECV_DATA,
  44.     STATE_SENT_FTT,
  45. STATE_SENT_FTT_WAIT_FOR_DCS };
  46. enum PhaseDStates { STATE_SEND_SILENCE_BEFORE_PAGE_FINISHED,
  47.                 STATE_SEND_PAGE_FINISHED,
  48. STATE_PAGE_FINISHED_SENT,
  49.     STATE_WAIT_FOR_MCF,
  50. STATE_SEND_SILENCE_BEFORE_PHASE_C,
  51.                     STATE_WAIT_FOR_EOP,
  52.                     STATE_SEND_MCF,
  53. STATE_MCF_SENT,
  54. STATE_SEND_RR,
  55. STATE_SEND_CTC,
  56. STATE_CTC_SENT,
  57. STATE_WAIT_FOR_CTR,
  58.                     STATE_WAIT_FOR_CTC,
  59.                     STATE_SEND_CTR };
  60. enum PhaseEStates { STATE_WAIT_FOR_OK,
  61.                     STATE_SEND_DCN,
  62. STATE_DCN_SENT,
  63. STATE_RECEIVE_DCN };
  64. CClassOne();
  65. virtual ~CClassOne();
  66. virtual bool OnWaitTimeout( void );
  67. // methods overridden from CCommPort
  68. virtual void OnConnect(void);
  69. virtual bool OnDisconnect(void);
  70. virtual void OnWrite(void);
  71. virtual void OnReadLine(void);
  72. // methods overridden from CModem
  73. virtual void OnSendFaxMsg(MSG* pMsg);
  74. virtual void OnRecvFaxMsg(MSG* pMsg);
  75. virtual void OnAbortFaxMsg(void);
  76. virtual void OnHDLCFrame(void);
  77. virtual void OnPartialHDLCFrame(void);
  78. virtual void OnTimer( UINT nID );
  79. virtual void Abort( bool bUserCancelled );
  80. virtual void CheckTimeouts( DWORD dwInActive );
  81. protected:
  82. void SetState( int nNewState, int nNewPhaseState = 0 );
  83. void PhaseInit(void);
  84. void PhaseIdle(void);
  85. void PhaseRinging(void);
  86. void PhaseA(void);
  87. void PhaseB(void);
  88. void PhaseC(void);
  89. void PhaseD(void);
  90. void PhaseE(void);
  91. void OnDIS(void);
  92. void OnCSI(void);
  93. void OnCFR(void);
  94. void OnMCF(void);
  95. void OnRTP(void);
  96. void OnRTN(void);
  97. void OnFTT(void);
  98. void OnDCS(void);
  99. void OnEOP(void);
  100. void OnEOM(void);
  101. void OnMPS(void);
  102. void OnDCN(void);
  103. void OnPPS(void);
  104. void OnPPR(void);
  105. void OnRNR(void);
  106. void OnRR(void);
  107. void OnCRP(void);
  108. void OnNSF(void);
  109. void OnCTC(void);
  110. void OnCTR(void);
  111. void OnEOR(void);
  112. void OnERR(void);
  113. void SendID(unsigned char octet);
  114. void SendDCS(void);
  115. void SendEOP(void);
  116. void SendDCN(void);
  117. void SendDIS(void);
  118. void SendCFR(void);
  119. void SendFTT(void);
  120. void SendMCF(void);
  121. void SendPPR(void);
  122. void SendCTR(void);
  123. void SendCTC(void);
  124. void SendSimpleHDLCFrame( unsigned char nFCF );
  125. void SendPPSHDLCFrame( unsigned char nFCF );
  126. void HDLCFrameStart(void); 
  127. void HDLCFrameAddByte( unsigned char nOctet ); 
  128. void HDLCFrameWrite(void);
  129. void SendTraining(void);
  130. void SendHDLCFrame(void) { SendFormattedCommand( "FTH", 3 ); };
  131. void RecvHDLCFrame(void);
  132. void SendLongTraining(void) { SendFormattedCommand( "FTM", cls1Speeds[m_nClass1Speed].ModStr1 ); };
  133. void SendShortTraining(void) { SendFormattedCommand( "FTM", cls1Speeds[m_nClass1Speed].ModStr2 ); };
  134. void RecvLongTraining(void) { SendFormattedCommand( "FRM", cls1Speeds[m_nClass1Speed].ModStr1 ); };
  135. void RecvShortTraining(void) { SendFormattedCommand( "FRM", cls1Speeds[m_nClass1Speed].ModStr2 ); };
  136. unsigned char GetFCF( unsigned char nFCF ) { return (m_bReceiving) ? RCV_FCF(nFCF) : XMT_FCF(nFCF); };
  137. void SendFormattedCommand( char* szCMD, int nParam );
  138. void DecrementSpeed( void );
  139. bool m_bGotCFR;
  140. bool m_bGotDIS;
  141. bool m_bGotDCS;
  142. bool m_bGotEOP;
  143. bool m_bGotMPS;
  144. bool m_bGotEOM;
  145. bool m_bGotPPR;
  146. unsigned char m_ECMFrameCount;
  147. bool m_bSendPPR;
  148. bool m_bGotMCF;
  149. bool m_bGotRNR;
  150. bool m_bGotCRP;
  151. bool m_bGotEOR;
  152. bool m_bGotCTC;
  153. bool m_bGotDCN;
  154. bool m_bGotRTP;
  155. bool m_bGotRTN;
  156. int m_nPhaseState;
  157. // Info from DIS
  158. int m_nClass1Speed;
  159. WORD m_wScanTimeMs; 
  160. bool m_b2D;
  161. bool m_bT6Encoding;
  162. bool m_bECM;
  163. WORD m_wMinLineChars;
  164. int m_nCorrect;
  165. int m_nLoopCtr;
  166. int m_nPPRCtr;
  167. bool m_bRecvHDLCError;
  168. DWORD m_dwTrainingStart;
  169. DWORD m_dwEOPWaitStart;
  170. DWORD m_dwRNRStart;
  171. };
  172. #endif // CLASSONE_H