Buffer.hpp 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. /***************************************************************************
  2. * E-Com Technology Ltd.
  3. *
  4. * ECOMPACS DICOM Network Transport Libraries * Version 0.1 Beta
  5. ***************************************************************************/
  6. #pragma once
  7. #ifndef _SerialPortServer_DLL
  8. #define SERIALPORTSERVER_API _declspec(dllimport)
  9. #else
  10. #define SERIALPORTSERVER_API _declspec(dllexport)
  11. #endif
  12. //////////////////////////////////////////////////////////////////////
  13. // class InBuffer
  14. class SERIALPORTSERVER_API InBuffer
  15. {
  16. protected:
  17. class charQueue * m_Queue;
  18. public:
  19. InBuffer ();
  20. ~InBuffer ();
  21. InBuffer & operator >> (BYTE & x);
  22. InBuffer & operator >> (char & x) { return ((*this) >> (BYTE &) x); }
  23. UINT Read (BYTE * Data, UINT cbNumBytes);
  24. protected:
  25. UINT PrepareRead (UINT cbNumByte);
  26. private:
  27. BOOL ReadBlock (void);
  28. virtual INT ReadBinary(BYTE *, UINT) = 0;
  29. };
  30. //////////////////////////////////////////////////////////////////////
  31. // class FileBuffer
  32. class SERIALPORTSERVER_API FileBuffer
  33. {
  34. public:
  35. enum ShareMode
  36. {
  37. shareCompat = (int) 0x00000,
  38. shareExclusive = (int) 0x00010,
  39. shareDenyWrite = (int) 0x00020,
  40. shareDenyRead = (int) 0x00030,
  41. shareDenyNone = (int) 0x00040,
  42. };
  43. FileBuffer () { m_hFile = INVALID_HANDLE_VALUE; m_bEOF = TRUE; }
  44. ~FileBuffer () { CloseFile (); }
  45. virtual BOOL Open (const char * filename, ShareMode mode) = 0;
  46. BOOL CloseFile (void);
  47. void SeekToBegin (void);
  48. UINT32 SeekToEnd (void);
  49. virtual LONG Seek (LONG lOff, UINT nFrom);
  50. virtual DWORD GetLength (void) const;
  51. virtual DWORD GetPosition (void) const;
  52. enum SeekPosition { begin = 0x0, current = 0x1, end = 0x2 };
  53. virtual BOOL IsEOF (void) const;
  54. virtual BOOL IsOpened (void) const;
  55. protected:
  56. BOOL m_bEOF;
  57. HANDLE m_hFile;
  58. };
  59. //////////////////////////////////////////////////////////////////////
  60. // class SerialPortBuffer
  61. //////////////////////////////////////////////////////////////////////
  62. class SERIALPORTSERVER_API SerialPortBuffer : public InBuffer, public FileBuffer
  63. {
  64. public:
  65. virtual BOOL Open (const char * filename, ShareMode mode);
  66. INT ReadBinary (BYTE * Data, UINT Count);
  67. BOOL SendBinary (const BYTE * Data, UINT Count);
  68. virtual BOOL Close (void);
  69. public:
  70. int SendCommands (const char * pchcommand, int ncommandsize);
  71. int SendCommands (const unsigned char * pchcommand, int ncommandsize);
  72. protected:
  73. OVERLAPPED m_OverlappedRead;
  74. OVERLAPPED m_OverlappedWrite;
  75. public:
  76. SerialPortBuffer ();
  77. ~SerialPortBuffer ();
  78. BOOL Open ( UINT portnr = 1,
  79. UINT baud = 19200,
  80. char parity = NOPARITY,
  81. UINT databits = 8,
  82. UINT stopsbits = 1);
  83. public:
  84. bool SetDumpIn (bool bDump);
  85. bool SetDumpOut (bool bDump);
  86. protected:
  87. bool m_bDumpIn;
  88. bool m_bDumpOut;
  89. protected:
  90. int m_nPort;
  91. protected:
  92. DWORD ReadDataWaiting (void);
  93. protected:
  94. DCB m_DCB;
  95. };