ParallelPort.h
上传用户:angelica
上传日期:2010-03-17
资源大小:17k
文件大小:7k
源码类别:

并口编程

开发平台:

Visual C++

  1. /*
  2. Module : PARALLEL.H
  3. Purpose: Declaration for an MFC class to encapsulate parallel ports
  4. Created: PJN / 28-12-1999
  5. History: None
  6. Copyright (c) 1999 - 2003 by PJ Naughter.  (Web: www.naughter.com, Email: pjna@naughter.com)
  7. All rights reserved.
  8. Copyright / Usage Details:
  9. You are allowed to include the source code in any product (commercial, shareware, freeware or otherwise) 
  10. when your product is released in binary form. You are allowed to modify the source code in any way you want 
  11. except you cannot modify the copyright details at the top of each module. If you want to distribute source 
  12. code with your application, then you are only allowed to distribute versions released by the author. This is 
  13. to maintain a single distribution point for the source code. 
  14. Please note that I have been informed recently that CSMTPConnection is being used to develop and send unsolicted bulk mail. 
  15. This was not the intention of the code and the author explicitly forbids use of the code for any software of this kind without 
  16. my explicit written consent.
  17. */
  18. ///////////////////// Macros / Structs etc //////////////////////////
  19. #ifndef __PARALLEL_H__
  20. #define __PARALLEL_H__
  21. #ifndef __AFXTEMPL_H__
  22. #pragma message("To avoid this message, put afxtempl.h in your pre compiled header (normally stdafx.h)")
  23. #include <afxtempl.h> 
  24. #endif
  25. /////////////////////////// Classes ///////////////////////////////////////////
  26. ////// Parallel port exception class ////////////////////////////////////////////
  27. void AfxThrowParallelException(DWORD dwError = 0);
  28. class CParallelException : public CException
  29. {
  30. public:
  31. //Constructors / Destructors
  32. CParallelException(DWORD dwError);
  33. ~CParallelException();
  34. //Methods
  35. #ifdef _DEBUG
  36. virtual void Dump(CDumpContext& dc) const;
  37. #endif
  38. virtual BOOL GetErrorMessage(LPTSTR lpstrError, UINT nMaxError, PUINT pnHelpContext = NULL);
  39. CString GetErrorMessage();
  40. //Data members
  41. DWORD m_dwError;
  42. protected:
  43. DECLARE_DYNAMIC(CParallelException)
  44. };
  45. ////// The class used to hold a parallel ports settings /////////////////////////
  46. class CParallelPortSettings
  47. {
  48. public:
  49. //Typedefs / Defines
  50.   enum ParallelPortType
  51.   {
  52.     ParallelTypeUndefined,
  53.     ParallelTypeSPP,
  54.     ParallelTypePS2,
  55.     ParallelTypeEPP,
  56.     ParallelTypeECP,
  57.   };
  58.   enum ECPPortMode
  59.   {
  60.     ECPModeUndefined,
  61.     ECPModeSPP,
  62.     ECPModePS2,
  63.     ECPModeFastCentronics,
  64.     ECPModeECP,
  65.     ECPModeEPP,
  66.     ECPModeTest,
  67.     ECPModeConfiguration
  68.   };
  69. //Constructors / Destructors
  70.   CParallelPortSettings();
  71.   CParallelPortSettings(const CParallelPortSettings& state);
  72. //Standard methods
  73.   CParallelPortSettings& operator=(const CParallelPortSettings& state);
  74. //Member variables
  75.   unsigned short   m_nBaseAddress; //The base address of the parallel port e.g. 0x278
  76.   ParallelPortType m_Type;         //The port type
  77.   ECPPortMode      m_ECPMode;      //The ECP mode if the type is ECP 
  78. };
  79.                                   
  80. //// The actual parallel port class /////////////////////////////////////////////
  81. class CParallelPort : public CObject
  82. {
  83. public:  
  84. //Constructors / Destructors
  85.   CParallelPort();
  86.   ~CParallelPort();
  87. //Methods
  88.   void                               Open(int nPort=1);
  89.   inline BOOL                        IsOpen() const;
  90.   void                               Close();
  91.   void                               SetECPMode(CParallelPortSettings::ECPPortMode mode);
  92.   CParallelPortSettings::ECPPortMode GetECPMode();
  93.   void                               WriteControl(int nData);
  94.   int                                ReadControl();
  95.   void                               WriteData(int nData);
  96.   int                                ReadData();
  97.   int                                ReadStatus();
  98.   BOOL                               ReadByteUsingNibbleMode(BYTE& byData);
  99.   BOOL                               WriteByteUsingNibbleMode(BYTE byData);
  100.   inline BOOL                        ReadUsingNibbleMode(void* lpBuf, DWORD dwBytes);
  101.   inline BOOL                        WriteUsingNibbleMode(const void* lpBuf, DWORD dwBytes);
  102.   void                               SetTimeout(DWORD dwTimeout) { m_dwTimeout = dwTimeout; };
  103.   DWORD                              GetTimeout() const { return m_dwTimeout; };
  104.   CParallelPortSettings              GetSettings() const;
  105. //Static methods
  106.   static BOOL PortPresent(int nPort);
  107. //MFC Diagnostics
  108. #ifdef _DEBUG
  109.   void Dump(CDumpContext& dc) const;
  110. #endif
  111. protected:
  112. //typedefs
  113.   typedef UCHAR (_stdcall DLPORTREADPORTUCHAR)(ULONG Port);
  114.   typedef DLPORTREADPORTUCHAR* LPDLPORTREADPORTUCHAR;
  115.   typedef VOID (_stdcall DLPORTWRITEPORTUCHAR)(ULONG Port, UCHAR Value);
  116.   typedef DLPORTWRITEPORTUCHAR* LPDLPORTWRITEPORTUCHAR;
  117. //Methods
  118.   static BOOL        InitializeDriverLINX();
  119.   static void        DeInitializeDriverLINX();
  120.   static BOOL        RunningOnNT();
  121.   static BOOL        GetPort(unsigned short nBaseAddress, CParallelPortSettings& settings);
  122.   static BOOL        GetECPPort(unsigned short nBaseAddress);
  123.   static BOOL        GetEPPPort(unsigned short nBaseAddrsss);
  124.   static BOOL        GetPS2Port(unsigned short nBaseAddress);
  125.   static BOOL        GetSPPPort(unsigned short nBaseAddress);
  126.   static int         GetEPPTimeoutBit(unsigned short nBaseAddress);
  127.   static CParallelPortSettings::ECPPortMode ReadECPMode(unsigned short nBaseAddress);
  128.   inline static int  _inp(unsigned short port);
  129.   inline static int  _outp(unsigned short port, int databyte);
  130.   inline static void WriteControl(unsigned short nBaseAddress, int nData);
  131.   inline static int  ReadControl(unsigned short nBaseAddress);
  132.   inline static void WriteData(unsigned short nBaseAddress, int nData);
  133.   inline static int  ReadData(unsigned short nBaseAddress);
  134.   inline static int  ReadStatus(unsigned short nBaseAddress);
  135. //Member variables
  136.   HANDLE         m_hPort;         //SDK handle to lock Win32 access to the port
  137.   int            m_nPortIndex;    //index of the current port into m_Ports
  138.   DWORD          m_dwTimeout;     //Timeout in Milliseconds for reads and writes
  139.   unsigned short m_nBaseAddress;  //The base address of the port
  140. //Static memmber variables
  141.   static BOOL                                                  sm_bRunningOnNT;         //Are we running on NT / Windows 2000
  142.   static int                                                   sm_nRefCount;            //Reference count for the class
  143.   static HINSTANCE                                             sm_hDLINX;               //handle to the DriverLINX dll.
  144.   static LPDLPORTREADPORTUCHAR                                 sm_lpfnDlPortReadUchar;  //Function pointer for writing via DriverLINX
  145.   static LPDLPORTWRITEPORTUCHAR                                sm_lpfnDlPortWriteUchar; //Function pointer for rading via DriverLINX
  146.   static CArray<CParallelPortSettings, CParallelPortSettings&> sm_Ports;                //All the parallel ports available on this machine
  147.   DECLARE_DYNAMIC(CParallelPort)
  148. };
  149. //// A Simple class to transfer and receive files using nibble mode
  150. class CParallelPortFileTransfer
  151. {
  152. public:
  153. //Constructors / Destructors
  154.   CParallelPortFileTransfer(CParallelPort* pPort);
  155.   ~CParallelPortFileTransfer();
  156. //Methods
  157.   void SendFile(const CString& sLocalFile);
  158.   void ReceiveFile(const CString& sLocalFile);
  159. protected:
  160.   CParallelPort* m_pPort;
  161. };
  162. #endif //__PARALLEL_H__