Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

215 lines
6.2 KiB

  1. //@doc
  2. /******************************************************
  3. **
  4. ** @module DTRANS.H | Definition file for DataTransmitter
  5. **
  6. ** Description:
  7. ** The Data Transmitters allow virtualization of the
  8. ** actual media used for transmission of data to the FF Device
  9. ** DataTransmitter - Base class that defines the functionality
  10. ** SerialDataTransmitter - Transmitter for Serial (via CreateFile)
  11. ** BackdoorDataTransmitter - Base class for Ring0 Driver based direct port communication
  12. ** SerialBackdoorDataTransmitter - Direct backdoor Serial Port Communication
  13. ** MidiBackdoorDataTransmitter - Direct backdoor Midi Port Communication
  14. **
  15. ** Classes:
  16. ** DataTransmitter
  17. ** SerialDataTransmitter : DataTransmitter
  18. ** BackdoorDataTransmitter : DataTransmitter
  19. ** SerialBackdoorDataTransmitter : BackdoorDataTransmitter
  20. ** MidiBackdoorDataTransmitter : BackdoorDataTransmitter
  21. **
  22. ** History:
  23. ** Created 11/13/97 Matthew L. Coill (mlc)
  24. ** 22-Mar-99 waltw Added DWORD dwDeviceID param to Initialize
  25. ** members of DataTransmitter and derived classes
  26. **
  27. ** (c) 1986-1997 Microsoft Corporation. All Rights Reserved.
  28. ******************************************************/
  29. #ifndef __DTRANS_H__
  30. #define __DTRANS_H__
  31. #include <dinput.h>
  32. #include "midi.hpp"
  33. #include "VxdIOCTL.hpp"
  34. #ifndef override
  35. #define override
  36. #endif
  37. //
  38. // @class DataTransmitter class
  39. //
  40. class DataTransmitter
  41. {
  42. //@access Constructor
  43. protected:
  44. //@cmember constructor
  45. DataTransmitter() : m_NackToggle(2) {};
  46. //@access Destructor
  47. public:
  48. //@cmember destructor
  49. virtual ~DataTransmitter() {};
  50. //@access Member functions
  51. public:
  52. HRESULT Transmit(ACKNACK& ackNack);
  53. virtual BOOL Initialize(DWORD dwDeviceID) { return FALSE; }
  54. void SetNextNack(SHORT nextNack) { m_NackToggle = nextNack; }
  55. BOOL NackToggle() const { return (m_NackToggle == 1); }
  56. virtual BOOL WaitTillSendFinished(DWORD timeOut) { return TRUE; }
  57. virtual HANDLE GetCOMMHandleHack() const { return NULL; }
  58. virtual void StopAutoClose() {}; // Temporary hack to avoid closing own handle (for backdoor serial)
  59. virtual ULONG GetSerialPortHack() { return 0; }
  60. protected:
  61. virtual BOOL Send(BYTE* data, UINT numBytes) const { return FALSE; } // Outsiders call transmit!
  62. private:
  63. SHORT m_NackToggle;
  64. };
  65. //
  66. // @class SerialDataTransmitter class
  67. //
  68. class SerialDataTransmitter : public DataTransmitter
  69. {
  70. //@access Constructor/Destructor
  71. public:
  72. //@cmember constructor
  73. SerialDataTransmitter();
  74. //@cmember destructor
  75. override ~SerialDataTransmitter();
  76. override BOOL Initialize(DWORD dwDeviceID);
  77. override BOOL Send(BYTE* data, UINT numBytes) const;
  78. override HANDLE GetCOMMHandleHack() const { return m_SerialPort; }
  79. override void StopAutoClose() { m_SerialPort = INVALID_HANDLE_VALUE; }
  80. override ULONG GetSerialPortHack() { return m_SerialPortIDHack; }
  81. //@access private data members
  82. private:
  83. HANDLE m_SerialPort;
  84. ULONG m_SerialPortIDHack;
  85. };
  86. //
  87. // @class WinMMDataTransmitter class
  88. //
  89. class WinMMDataTransmitter : public DataTransmitter
  90. {
  91. //@access Constructor/Destructor
  92. public:
  93. //@cmember constructor
  94. WinMMDataTransmitter ();
  95. //@cmember destructor
  96. override ~WinMMDataTransmitter ();
  97. override BOOL Initialize(DWORD dwDeviceID);
  98. override BOOL Send(BYTE* data, UINT numBytes) const;
  99. override BOOL WaitTillSendFinished(DWORD timeOut);
  100. override HANDLE GetCOMMHandleHack() const { return HANDLE(m_MidiOutHandle); }
  101. override void StopAutoClose() { m_MidiOutHandle = HMIDIOUT(INVALID_HANDLE_VALUE); }
  102. override ULONG GetSerialPortHack() { return ULONG(m_MidiOutHandle); }
  103. //@access private data members
  104. private:
  105. DWORD MakeShortMessage(BYTE* data, UINT numBytes) const;
  106. BOOL MakeLongMessageHeader(MIDIHDR& longHeader, BYTE* data, UINT numBytes) const;
  107. BOOL DestroyLongMessageHeader(MIDIHDR& longHeader) const;
  108. HANDLE m_EventMidiOutputFinished;
  109. HMIDIOUT m_MidiOutHandle;
  110. };
  111. //
  112. // @class BackdoorDataTransmitter class
  113. //
  114. class BackdoorDataTransmitter : public DataTransmitter
  115. {
  116. //@access Constructor/Destructor
  117. public:
  118. //@cmember destructor
  119. virtual override ~BackdoorDataTransmitter();
  120. virtual override BOOL Initialize(DWORD dwDeviceID);
  121. override BOOL Send(BYTE* data, UINT numBytes) const;
  122. override HANDLE GetCOMMHandleHack() const { return m_DataPort; }
  123. override void StopAutoClose() { m_DataPort = INVALID_HANDLE_VALUE; }
  124. override ULONG GetSerialPortHack() { return ULONG(m_DataPort); }
  125. //@access private data members
  126. protected:
  127. //@cmember constructor - protected, cannot create instance of this class
  128. BackdoorDataTransmitter();
  129. HANDLE m_DataPort;
  130. BOOL m_OldBackdoor;
  131. };
  132. //
  133. // @class SerialBackdoorDataTransmitter class
  134. //
  135. class SerialBackdoorDataTransmitter : public BackdoorDataTransmitter
  136. {
  137. //@access Constructor/Destructor
  138. public:
  139. //@cmember constructor
  140. SerialBackdoorDataTransmitter();
  141. override BOOL Initialize(DWORD dwDeviceID);
  142. };
  143. //
  144. // @class MidiBackdoorDataTransmitter class
  145. //
  146. class MidiBackdoorDataTransmitter : public BackdoorDataTransmitter
  147. {
  148. //@access Constructor/Destructor
  149. public:
  150. //@cmember constructor
  151. MidiBackdoorDataTransmitter();
  152. //@cmember destructor
  153. override ~MidiBackdoorDataTransmitter();
  154. override BOOL Initialize(DWORD dwDeviceID);
  155. BOOL InitializeSpecific(DWORD dwDeviceID, HANDLE specificHandle);
  156. };
  157. #if 0 // Fix pin later
  158. typedef DWORD (WINAPI* KSCREATEPIN)(HANDLE, PKSPIN_CONNECT, ACCESS_MASK, HANDLE*);
  159. //
  160. // @class PinTransmitter class
  161. //
  162. class PinTransmitter : public DataTransmitter
  163. {
  164. //@access Constructor/Destructor
  165. public:
  166. //@cmember constructor
  167. PinTransmitter();
  168. //@cmember destructor
  169. override ~PinTransmitter();
  170. override BOOL Initialize();
  171. override BOOL Send(BYTE* data, UINT numBytes);
  172. //@access private data members
  173. private:
  174. BOOL CreatePinInstance(UINT pinNumber, KSCREATEPIN pfCreatePin);
  175. BOOL OverLappedPinIOCTL(OVERLAPPED overlapped, KSP_PIN ksPinProp, void* pData, DWORD dataSize);
  176. void SetPinState(KSSTATE state);
  177. HANDLE m_UartFilter;
  178. HANDLE m_MidiPin;
  179. HANDLE m_MidiOutEvent;
  180. };
  181. #endif
  182. extern DataTransmitter* g_pDataTransmitter;
  183. #endif __DTRANS_H__