home *** CD-ROM | disk | FTP | other *** search
/ Beginning C++ Through Gam…rogramming (2nd Edition) / BCGP2E.ISO / bloodshed / devcpp-4.9.9.2_setup.exe / parallel.h < prev    next >
C/C++ Source or Header  |  2005-01-29  |  9KB  |  278 lines

  1. /*
  2.  * parallel.h
  3.  *
  4.  * ParPort driver interface
  5.  *
  6.  * This file is part of the w32api package.
  7.  *
  8.  * Contributors:
  9.  *   Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
  10.  *
  11.  * THIS SOFTWARE IS NOT COPYRIGHTED
  12.  *
  13.  * This source code is offered for use in the public domain. You may
  14.  * use, modify or distribute it freely.
  15.  *
  16.  * This code is distributed in the hope that it will be useful but
  17.  * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
  18.  * DISCLAIMED. This includes but is not limited to warranties of
  19.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  20.  *
  21.  */
  22.  
  23. #ifndef __PARALLEL_H
  24. #define __PARALLEL_H
  25.  
  26. #if __GNUC__ >=3
  27. #pragma GCC system_header
  28. #endif
  29.  
  30. #ifdef __cplusplus
  31. extern "C" {
  32. #endif
  33.  
  34. #include "ntddk.h"
  35. #include "ntddpar.h"
  36.  
  37. #define DD_PARALLEL_PORT_BASE_NAME        "ParallelPort"
  38. #define DD_PARALLEL_PORT_BASE_NAME_U      L"ParallelPort"
  39.  
  40. #define IOCTL_INTERNAL_DESELECT_DEVICE \
  41.   CTL_CODE (FILE_DEVICE_PARALLEL_PORT, 24, METHOD_BUFFERED, FILE_ANY_ACCESS) 
  42. #define IOCTL_INTERNAL_GET_MORE_PARALLEL_PORT_INFO \
  43.   CTL_CODE (FILE_DEVICE_PARALLEL_PORT, 17, METHOD_BUFFERED, FILE_ANY_ACCESS)
  44. #define IOCTL_INTERNAL_GET_PARALLEL_PNP_INFO \
  45.   CTL_CODE (FILE_DEVICE_PARALLEL_PORT, 21, METHOD_BUFFERED, FILE_ANY_ACCESS)
  46. #define IOCTL_INTERNAL_GET_PARALLEL_PORT_INFO \
  47.   CTL_CODE (FILE_DEVICE_PARALLEL_PORT, 12, METHOD_BUFFERED, FILE_ANY_ACCESS)
  48. #define IOCTL_INTERNAL_INIT_1284_3_BUS \
  49.   CTL_CODE (FILE_DEVICE_PARALLEL_PORT, 22, METHOD_BUFFERED, FILE_ANY_ACCESS)
  50. #define IOCTL_INTERNAL_PARALLEL_CLEAR_CHIP_MODE \
  51.   CTL_CODE (FILE_DEVICE_PARALLEL_PORT, 20, METHOD_BUFFERED, FILE_ANY_ACCESS)
  52. #define IOCTL_INTERNAL_PARALLEL_CONNECT_INTERRUPT \
  53.   CTL_CODE (FILE_DEVICE_PARALLEL_PORT, 13, METHOD_BUFFERED, FILE_ANY_ACCESS)
  54. #define IOCTL_INTERNAL_PARALLEL_DISCONNECT_INTERRUPT \
  55.   CTL_CODE (FILE_DEVICE_PARALLEL_PORT, 14, METHOD_BUFFERED, FILE_ANY_ACCESS)
  56. #define IOCTL_INTERNAL_PARALLEL_PORT_ALLOCATE \
  57.   CTL_CODE (FILE_DEVICE_PARALLEL_PORT, 11, METHOD_BUFFERED, FILE_ANY_ACCESS)
  58. #define IOCTL_INTERNAL_PARALLEL_PORT_FREE \
  59.   CTL_CODE (FILE_DEVICE_PARALLEL_PORT, 40, METHOD_BUFFERED, FILE_ANY_ACCESS)
  60. #define IOCTL_INTERNAL_PARALLEL_SET_CHIP_MODE \
  61.   CTL_CODE (FILE_DEVICE_PARALLEL_PORT, 19, METHOD_BUFFERED, FILE_ANY_ACCESS)
  62. #define IOCTL_INTERNAL_RELEASE_PARALLEL_PORT_INFO \
  63.   CTL_CODE (FILE_DEVICE_PARALLEL_PORT, 15, METHOD_BUFFERED, FILE_ANY_ACCESS)
  64. #define IOCTL_INTERNAL_SELECT_DEVICE \
  65.   CTL_CODE (FILE_DEVICE_PARALLEL_PORT, 23, METHOD_BUFFERED, FILE_ANY_ACCESS)
  66.  
  67.  
  68. typedef struct _PARALLEL_1284_COMMAND {
  69.   UCHAR  ID;
  70.   UCHAR  Port;
  71.   ULONG  CommandFlags;
  72. } PARALLEL_1284_COMMAND, *PPARALLEL_1284_COMMAND;
  73.  
  74. /* PARALLEL_1284_COMMAND.CommandFlags */
  75. #define PAR_END_OF_CHAIN_DEVICE           0x00000001
  76. #define PAR_HAVE_PORT_KEEP_PORT           0x00000002
  77.  
  78. typedef struct _MORE_PARALLEL_PORT_INFORMATION {
  79.     INTERFACE_TYPE  InterfaceType;
  80.     ULONG  BusNumber;
  81.     ULONG  InterruptLevel;
  82.     ULONG  InterruptVector;
  83.     KAFFINITY  InterruptAffinity;
  84.     KINTERRUPT_MODE  InterruptMode;
  85. } MORE_PARALLEL_PORT_INFORMATION, *PMORE_PARALLEL_PORT_INFORMATION;
  86.  
  87. typedef NTSTATUS DDKAPI
  88. (*PPARALLEL_SET_CHIP_MODE)(
  89.     IN  PVOID  SetChipContext,
  90.     IN  UCHAR  ChipMode);
  91.  
  92. typedef NTSTATUS DDKAPI
  93. (*PPARALLEL_CLEAR_CHIP_MODE)(
  94.     IN  PVOID  ClearChipContext,
  95.     IN  UCHAR  ChipMode);
  96.  
  97. typedef NTSTATUS DDKAPI
  98. (*PPARCHIP_CLEAR_CHIP_MODE)(
  99.     IN  PVOID  ClearChipContext,
  100.     IN  UCHAR  ChipMode);
  101.  
  102. typedef NTSTATUS DDKAPI
  103. (*PPARALLEL_TRY_SELECT_ROUTINE)(
  104.     IN  PVOID  TrySelectContext,
  105.     IN  PVOID  TrySelectCommand);
  106.  
  107. typedef NTSTATUS DDKAPI
  108. (*PPARALLEL_DESELECT_ROUTINE)(
  109.     IN PVOID  DeselectContext,
  110.     IN PVOID  DeselectCommand);
  111.  
  112. /* PARALLEL_PNP_INFORMATION.HardwareCapabilities */
  113. #define PPT_NO_HARDWARE_PRESENT           0x00000000
  114. #define PPT_ECP_PRESENT                   0x00000001
  115. #define PPT_EPP_PRESENT                   0x00000002
  116. #define PPT_EPP_32_PRESENT                0x00000004
  117. #define PPT_BYTE_PRESENT                  0x00000008
  118. #define PPT_BIDI_PRESENT                  0x00000008
  119. #define PPT_1284_3_PRESENT                0x00000010
  120.  
  121. typedef struct _PARALLEL_PNP_INFORMATION {
  122.   PHYSICAL_ADDRESS  OriginalEcpController;
  123.   PUCHAR  EcpController;
  124.   ULONG  SpanOfEcpController;
  125.   ULONG  PortNumber;
  126.   ULONG  HardwareCapabilities;
  127.   PPARALLEL_SET_CHIP_MODE  TrySetChipMode;
  128.   PPARALLEL_CLEAR_CHIP_MODE  ClearChipMode;
  129.   ULONG  FifoDepth;
  130.   ULONG  FifoWidth;
  131.   PHYSICAL_ADDRESS  EppControllerPhysicalAddress;
  132.   ULONG  SpanOfEppController;
  133.   ULONG  Ieee1284_3DeviceCount;
  134.   PPARALLEL_TRY_SELECT_ROUTINE  TrySelectDevice;
  135.   PPARALLEL_DESELECT_ROUTINE  DeselectDevice;
  136.   PVOID  Context;
  137.   ULONG  CurrentMode;
  138.   PWSTR  PortName;
  139. } PARALLEL_PNP_INFORMATION, *PPARALLEL_PNP_INFORMATION;
  140.  
  141. typedef BOOLEAN DDKAPI
  142. (*PPARALLEL_TRY_ALLOCATE_ROUTINE)(
  143.   IN  PVOID  TryAllocateContext);
  144.  
  145. typedef VOID DDKAPI
  146. (*PPARALLEL_FREE_ROUTINE)(
  147.   IN  PVOID  FreeContext);
  148.  
  149. typedef ULONG DDKAPI
  150. (*PPARALLEL_QUERY_WAITERS_ROUTINE)(
  151.     IN  PVOID  QueryAllocsContext);
  152.  
  153. typedef struct _PARALLEL_PORT_INFORMATION {
  154.   PHYSICAL_ADDRESS  OriginalController;
  155.   PUCHAR  Controller;
  156.   ULONG  SpanOfController;
  157.   PPARALLEL_TRY_ALLOCATE_ROUTINE  TryAllocatePort;
  158.   PPARALLEL_FREE_ROUTINE  FreePort;
  159.   PPARALLEL_QUERY_WAITERS_ROUTINE  QueryNumWaiters;
  160.   PVOID  Context;
  161. } PARALLEL_PORT_INFORMATION, *PPARALLEL_PORT_INFORMATION;
  162.  
  163. /* PARALLEL_CHIP_MODE.ModeFlags */
  164. #define INITIAL_MODE                      0x00
  165. #define PARCHIP_ECR_ARBITRATOR            0x01
  166.  
  167. typedef struct _PARALLEL_CHIP_MODE {
  168.   UCHAR  ModeFlags;
  169.   BOOLEAN  success;
  170. } PARALLEL_CHIP_MODE, *PPARALLEL_CHIP_MODE;
  171.  
  172. typedef VOID DDKAPI
  173. (*PPARALLEL_DEFERRED_ROUTINE)(
  174.     IN  PVOID  DeferredContext);
  175.  
  176. typedef struct _PARALLEL_INTERRUPT_SERVICE_ROUTINE {
  177.   PKSERVICE_ROUTINE  InterruptServiceRoutine;
  178.   PVOID  InterruptServiceContext;
  179.   PPARALLEL_DEFERRED_ROUTINE  DeferredPortCheckRoutine;
  180.   PVOID  DeferredPortCheckContext;
  181. } PARALLEL_INTERRUPT_SERVICE_ROUTINE, *PPARALLEL_INTERRUPT_SERVICE_ROUTINE;
  182.  
  183.  
  184. #define IOCTL_INTERNAL_DISCONNECT_IDLE \
  185.   CTL_CODE (FILE_DEVICE_PARALLEL_PORT, 32, METHOD_BUFFERED, FILE_ANY_ACCESS)
  186. #define IOCTL_INTERNAL_LOCK_PORT \
  187.   CTL_CODE (FILE_DEVICE_PARALLEL_PORT, 37, METHOD_BUFFERED, FILE_ANY_ACCESS)
  188. #define IOCTL_INTERNAL_LOCK_PORT_NO_SELECT \
  189.   CTL_CODE (FILE_DEVICE_PARALLEL_PORT, 52, METHOD_BUFFERED, FILE_ANY_ACCESS)
  190. #define IOCTL_INTERNAL_PARCLASS_CONNECT \
  191.   CTL_CODE (FILE_DEVICE_PARALLEL_PORT, 30, METHOD_BUFFERED, FILE_ANY_ACCESS)
  192. #define IOCTL_INTERNAL_PARCLASS_DISCONNECT \
  193.   CTL_CODE (FILE_DEVICE_PARALLEL_PORT, 31, METHOD_BUFFERED, FILE_ANY_ACCESS)
  194. #define IOCTL_INTERNAL_UNLOCK_PORT \
  195.   CTL_CODE (FILE_DEVICE_PARALLEL_PORT, 38, METHOD_BUFFERED, FILE_ANY_ACCESS)
  196. #define IOCTL_INTERNAL_UNLOCK_PORT_NO_DESELECT \
  197.   CTL_CODE (FILE_DEVICE_PARALLEL_PORT, 53, METHOD_BUFFERED, FILE_ANY_ACCESS)
  198.  
  199. typedef USHORT DDKAPI
  200. (*PDETERMINE_IEEE_MODES)(
  201.   IN PVOID  Context);
  202.  
  203. typedef enum _PARALLEL_SAFETY {
  204.     SAFE_MODE,
  205.     UNSAFE_MODE
  206. } PARALLEL_SAFETY;
  207.  
  208. typedef NTSTATUS DDKAPI
  209. (*PNEGOTIATE_IEEE_MODE)(
  210.   IN PVOID  Context,
  211.   IN USHORT  ModeMaskFwd,
  212.   IN USHORT  ModeMaskRev,
  213.   IN PARALLEL_SAFETY  ModeSafety,
  214.   IN BOOLEAN  IsForward);
  215.  
  216. typedef NTSTATUS DDKAPI
  217. (*PTERMINATE_IEEE_MODE)(
  218.     IN  PVOID  Context);
  219.     
  220. typedef NTSTATUS DDKAPI
  221. (*PPARALLEL_IEEE_FWD_TO_REV)(
  222.   IN  PVOID  Context);
  223.  
  224. typedef NTSTATUS DDKAPI
  225. (*PPARALLEL_IEEE_REV_TO_FWD)(
  226.   IN  PVOID  Context);
  227.  
  228. typedef NTSTATUS DDKAPI
  229. (*PPARALLEL_READ)(
  230.     IN  PVOID  Context,
  231.     OUT PVOID  Buffer,
  232.     IN  ULONG  NumBytesToRead,
  233.     OUT PULONG  NumBytesRead,
  234.     IN  UCHAR  Channel);
  235.     
  236. typedef NTSTATUS DDKAPI
  237. (*PPARALLEL_WRITE)(
  238.     IN  PVOID  Context,
  239.     OUT PVOID  Buffer,
  240.     IN  ULONG  NumBytesToWrite,
  241.     OUT PULONG  NumBytesWritten,
  242.     IN  UCHAR   Channel);
  243.  
  244. typedef NTSTATUS DDKAPI
  245. (*PPARALLEL_TRYSELECT_DEVICE)(
  246.   IN  PVOID  Context,
  247.   IN  PARALLEL_1284_COMMAND  Command);
  248.  
  249. typedef NTSTATUS DDKAPI
  250. (*PPARALLEL_DESELECT_DEVICE)(
  251.   IN  PVOID  Context,
  252.   IN  PARALLEL_1284_COMMAND  Command);
  253.  
  254. typedef struct _PARCLASS_INFORMATION {
  255.   PUCHAR  Controller;
  256.   PUCHAR  EcrController;
  257.   ULONG  SpanOfController;
  258.   PDETERMINE_IEEE_MODES  DetermineIeeeModes;
  259.   PNEGOTIATE_IEEE_MODE  NegotiateIeeeMode;
  260.   PTERMINATE_IEEE_MODE  TerminateIeeeMode;
  261.   PPARALLEL_IEEE_FWD_TO_REV  IeeeFwdToRevMode;
  262.   PPARALLEL_IEEE_REV_TO_FWD  IeeeRevToFwdMode;
  263.   PPARALLEL_READ  ParallelRead;
  264.   PPARALLEL_WRITE  ParallelWrite;
  265.   PVOID  ParclassContext;
  266.   ULONG  HardwareCapabilities;
  267.   ULONG  FifoDepth;
  268.   ULONG  FifoWidth;
  269.   PPARALLEL_TRYSELECT_DEVICE  ParallelTryselect;
  270.   PPARALLEL_DESELECT_DEVICE  ParallelDeSelect;
  271. } PARCLASS_INFORMATION, *PPARCLASS_INFORMATION;
  272.  
  273. #ifdef __cplusplus
  274. }
  275. #endif
  276.  
  277. #endif /* __PARALLEL_H */
  278.