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

传真(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 CCommPort is to encapsulate all the Win32 communication API
  19. //
  20. ////////////////////////////////////////////////////////////////////////////////
  21. #ifndef COMMPORT_H
  22. #define COMMPORT_H
  23. #define READBUF_SIZE 4096 // must be big enough for largest training seq
  24. #define WRITEBUF_SIZE 4096
  25. #define MAX_WRITE WRITEBUF_SIZE
  26. #define NUL 0x00
  27. #define DLE 0x10
  28. #define ETX 0x03
  29. #define XON 0x11
  30. #define     DC2 0x12
  31. #define XOFF 0x13
  32. #define     CAN 0x18
  33. #define SPACE 0x20
  34. #define     SUB 0x1a
  35. #define DIS_V27_FALLBACK 0x00
  36. #define DIS_V27 0x04
  37. #define DIS_V29 0x08
  38. #define DIS_V27_V29 0x0c
  39. #define DIS_V27_V29_V33 0x0e
  40. #define DIS_V27_V29_V33_V17 0x0d
  41. #define MAX_CLS1SPEEDS 10
  42. typedef struct tagCls1Speed {
  43. char cDCSBits;
  44. int ModStr1;
  45. int ModStr2;
  46. LONG dwSpeed;
  47. int ndx;
  48. } CLS1SPEEDS;
  49. class CWriteBuffer
  50. {
  51. public:
  52. char Buffer[MAX_WRITE];
  53. unsigned long Bytes;
  54. };
  55. class CCommPort  
  56. {
  57. public:
  58. CCommPort();
  59. virtual ~CCommPort();
  60. virtual bool ConnectPort( string& sErr );
  61. virtual void DisconnectPort( void );
  62. virtual bool DoRead( void );
  63. virtual void DoReadLoop( void );
  64. virtual bool DoWrite( char* szChars, unsigned long nBytes, bool bCrLf = true );
  65. virtual void FillWriteQueue( char* szChars, unsigned long nBytes, bool bCrLf = true );
  66.     virtual bool WritePacket( char* szChars, unsigned long nBytes );
  67. virtual void DoWriteLoop( void );
  68. virtual bool DoWaitCommEvent( void );
  69. virtual void DoWaitCommEventLoop( void );
  70. // Methods called by CModem from message loop
  71. virtual void ReadEventSignalled(void);
  72. virtual void WriteEventSignalled(void);
  73. virtual void WaitCommEventSignalled(void);
  74. // methods to be overridden
  75. virtual void OnCommEvent(void);
  76. virtual void OnConnect(void);
  77. virtual bool OnDisconnect(void);
  78. virtual void OnRead(void);
  79. virtual void OnWrite(void);
  80. virtual void OnReadLine(void);
  81. // public methods
  82. void SetCommParam( DWORD BaudRate, BYTE ByteSize, BYTE Parity, BYTE StopBits );
  83. void SetFlowControl( bool bDSRFlowControl, bool bCTSFlowControl, bool bSoftFlowControl );
  84. void ParseIntoLines(void);
  85. void InitLineParser(void) { m_nLineBuffPtr = 0; m_bEolFlag = false; };
  86. void EnableDebugLog( bool bDebugLog, LPCSTR szLogDir ) { m_bDebugLog = bDebugLog; m_sLogDir = szLogDir; };
  87. void EnableSoftFlowControl( bool bEnable );
  88. void OpenDebugLog(void);
  89. void CloseDebugLog(void);
  90. void WriteDebugLog( bool bRead );
  91. static char s_HexDigits[16];
  92. protected:
  93. char m_szReadBuff[READBUF_SIZE+1];
  94. char m_szWriteBuff[WRITEBUF_SIZE+1];
  95. deque<CWriteBuffer*> m_WriteQueue;
  96. OVERLAPPED m_CommEventOverlapped;
  97. DWORD m_CommEvent;
  98. OVERLAPPED m_ReadOverlapped;
  99. DWORD m_BytesRead;
  100. OVERLAPPED m_WriteOverlapped;
  101. DWORD m_BytesWritten;
  102. bool m_bWriteInProgress;
  103. string m_sPort;
  104. HANDLE m_hPort;
  105. DCB m_dcb;
  106. bool m_bDSRFlowControl;
  107. bool m_bCTSFlowControl;
  108. bool m_bSoftFlowControl;
  109. DWORD m_BaudRate;
  110. BYTE m_ByteSize;
  111. BYTE m_Parity;
  112. BYTE m_StopBits;
  113. // Used by ParseIntoLines
  114. char m_szLineBuff[READBUF_SIZE+1];
  115. int m_nLineBuffPtr;
  116. bool m_bEolFlag;
  117. bool m_bDebugLog;
  118. string m_sLogDir;
  119. FILE* m_pLogFile;
  120. };
  121. extern CLS1SPEEDS cls1Speeds[MAX_CLS1SPEEDS];
  122. extern WORD Cls1ScanTimes_normal[8];
  123. extern WORD Cls1ScanTimes_fine[8];
  124. extern WORD Cls2ScanTimes_normal[8];
  125. extern WORD Cls2ScanTimes_fine[8];
  126. extern WORD  Cls2FaxParamBitRates[6];
  127. #endif // COMMPORT_H