Windows NT 4.0 source code leak
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.
 
 
 
 
 
 

396 lines
15 KiB

/***************************************************************************
*
* File Name: vcommapi.h
*
* Copyright (C) 1993-1996 Hewlett-Packard Company.
* All rights reserved.
*
* 11311 Chinden Blvd.
* Boise, Idaho 83714
*
* This is a part of the HP JetAdmin Printer Utility
*
* This source code is only intended as a supplement for support and
* localization of HP JetAdmin by 3rd party Operating System vendors.
* Modification of source code cannot be made without the express written
* consent of Hewlett-Packard.
*
*
* Description:
*
* Author: Name
*
*
* Modification history:
*
* date initials change description
*
* mm-dd-yy MJB
*
*
*
*
*
*
***************************************************************************/
#ifndef _VCOMMAPI_H
#define _VCOMMAPI_H
//---------------------------------------------------------------------------
// $Header: /Solo/vcomm/src/vcommapi.h 7 8/09/95 2:15p Chuck $
//
// Copyright (C) Hewlett-Packard Company 1993. All Rights Reserved.
// Copying or other reproduction of this material is prohibited without
// the prior written consent of Hewlett-Packard Company.
//
// What: vcommapi.h
// VCOMM P1284 driver API header file
//
// Base: HP BPR SHAQ comm driver, scommx.h, rev 1.2
//
// Notes: The definitions here MUST be duplicated and kept in synchronization
// with those in the assembly language version, vcommapi.inc
//
// $Revision: 7 $
//
// $Date: 8/09/95 2:15p $
//
// $Author: Chuck $
//
// $Archive: /Solo/vcomm/src/vcommapi.h $
//
// $Log: /Solo/vcomm/src/vcommapi.h $
//
//7 8/09/95 2:15p Chuck
//
// Rev 2.0 28 Jun 1995 18:21:52 CBLACK
// Version number bumped to 2.0. Done with Artoo code. Move on to enhancements.
//
// Rev 1.4 09 Sep 1994 14:12:10 CMAYNE
// Added conditional compile of PORTTYPE (requested by BPR because of
// header file conflict).
//
// Rev 1.3 21 Apr 1994 15:50:14 CMAYNE
//
// Added VCOMM_GetPortType(), which allows the caller to determine the
// port type without having to open the port.
//
// Rev 1.2 14 Apr 1994 10:57:14 CMAYNE
//
// Moved in error code, input mode, output mode, and device capability
// definitions from scomm.h.
// 2. Added new escape functions to allow setting the input and output
// modes, returning what the default and current input/output modes
// are, and to return device capabilities.
// 3. Added escape function to return port type.
//
// Rev 1.1 11 Jan 1994 10:00:22 CMAYNE
//
// Removed SCOMM exports, a few SCOMM error codes.
//
// Rev 1.0 12 Nov 1993 13:35:22 CMAYNE
// Initial revision.
//
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
// Constant definitions
//---------------------------------------------------------------------------
// Common error codes
#define IE_SUCCESS 0 // This should have been in windows.h!
//---------------------------------------------------------------------------
// Error codes used internally by VCOMM modules
//---------------------------------------------------------------------------
// These are defined with values outside the range of established Win31
// IE_***** errors, but some day may become standard Win31 codes. Normally,
// they are mapped to the standard Windows CE_IOE error before the HPV1284 returns
// to the caller. However, if "MapErrorCodes=0" is defined in the [HPV1284,COMMON]
// section of WIN.INI, the caller can get these internal error codes returned.
#define IE_DEVICE_NO_RESPONSE (-13) // Device did not respond to handshakes
#define IE_PROTOCOL_NO_SUPPORT (-14) // Device does not support P1284 mode
#define IE_CLOSE_NOT_IDLE (-15) // Port not idle when VCOMM_CloseComm called.
#define VE_BUSY (-50) // 1284 driver is busy.
#define VE_PORT_NOT_SUPPORTED (-51) // Port specified is not found.
#define VE_UNKNOWN_CLIENT (-52) // Client is not recognized.
#define VE_CLIENT_NOT_FOUND (-53) // Client peer is not found.
#define VE_PRINTER_OFF (-54) // Printer is off.
#define VE_PORT_NOT_INITIALIZE (-55) // Port has not been initialized yet.
#define VE_LINK_FAILURE (-56) // Link has gone down (unknown cause).
#define VE_TIME_OUT (-57) // Time-out.
#define VE_PROCESS_KILLED (-58) // I/O process killed.
#define VE_INIT_FAILED (-59) // Initialization failed (unknown cause).
#define VE_INVALID_PARAM_BLK (-60) // Invalid parameter block.
#define VE_CABLE_UNPLUGGED (-61) // Cable is unplugged.
#define VE_BAD_CABLE (-62) // Bad cable.
#define VE_LINK_NOT_FOUND (-63) // Link peer is not found.
#define VE_PORT_STOMPED (-64) // Port stomped by bad app.
#define VE_SHADOW_BUFFER_FULL (-65) // Shadow buffer overflow
#define VE_NO_SHADOW (-66) // Attempt to use non-exist shadow
#define VE_INVALID_PHASE (-67) // Invalid phase for mode
#define VE_INCORRECT_PHASE (-68) // Phase incorrect for operation
#define VE_CORRUPT (-69) // Invalid data in SDCB
#define VE_MODE_NOT_SUPPORTED (-70) // P1284 mode not supported by VCOMM
#define VE_INCORRECT_MODE (-71) // Attempted operation when in wrong mode
#define VE_HW_NO_SUPPORT (-72) // Hardware does not support requested mode
// VCOMSTAT is the Chicago equivalent to the Win 3.1 COMSTAT structure
typedef struct _VCOMSTAT
{
DWORD BitMask; // Various bit flags
DWORD cbInQue; // Count of characters in receive queue
DWORD cbOutQue; // Count of characters in transmit queue
} VCOMSTAT, *PVCOMSTAT, far *LPVCOMSTAT;
// VCOMSTAT BitMask member may be a combination of the following:
#define fCtsHold 1 // Transmit is on CTS hold
#define fDsrHold 2 // Transmit is on DSR hold
#define fRlsdHold 4 // Transmit is on RLSD hold
#define fXoffHold 8 // Received handshake
#define fXoffSent 16 // Issued handshake
#define fEof 32 // End of file character found
#define fTxim 64 // Immediate char waiting to be xmitted
// Extended functions supported by VCOMM_EscapeCommFunction():
// The first ten functions are defined by Win3.1's windows.h file.
typedef enum
{
// SETXOFF = 1 // Exactly as if XOFF character has been received
// SETXON = 2, // Exactly as if XON character has been received
// SETRTS = 3, // Set the RTS signal (COM devices)
// CLRRTS = 4, // Clear the RTS signal (COM devices)
// SETDTR = 5, // Set the DTR signal (COM devices)
// CLRDTR = 6, // Clear the DTR signal (COM devices)
// RESETDEV = 7, // Yank on reset line if available (LPT devices)
// GETMAXLPT = 8, // 8-10 are new for Win3.1
// GETMAXCOM = 9,
// GETBASEIRQ = 10,
#ifndef WIN32
SETBREAK = 11, // Set break condition, halt transmission
CLEARBREAK = 12, // Clear break condition, restart transmission
#endif
GETCLOSEPROP = 13, // Get behavior of VCOMM_CloseComm
SETCLOSEPROP = 14, // Set behavior of VCOMM_CloseComm
SET_P1284_INPUT_MODE = 15, // Select desired P1284 mode for input (LPT devices)
SET_P1284_OUTPUT_MODE = 16, // Select desired P1284 mode for output (LPT devices)
SET_ECP_CHANNEL_ADDR = 17, // Set ECP channel address (LPT devices)
GET_DEVICE_ID = 18, // Retrieve P1284 Device ID (LPT devices)
GET_DEVICE_CAPABILITIES = 19, // Retrieves the set of 1284 capabilities device supports
GET_DEFAULT_MODES = 20, // Retrieve the default input and output modes
GET_CURRENT_MODES = 21, // Retrieve the current input and output modes
GET_PORT_TYPE = 22, // Retrieves the PORTTYPE of the current port
PINGDEVICE = 23 // Handshakes device to check connection
} ESCAPECOMMFUNCTION;
#undef ERROR
typedef long ERROR;
typedef long VCOMM_ERROR;
typedef long HPORT;
#ifndef __PORTTYPE__
#define __PORTTYPE__
// The PORTTYPE enumeration defines the possible values returned by the
// GET_PORT_TYPE VCOMM_EscapeCommFunction() call.
typedef enum
{
PT_NONE,
PT_DIRECT_LPT,
PT_DIRECT_COM,
PT_DOSPORT,
PT_WRITESPOOL,
PT_NETIO,
} PORTTYPE;
typedef PORTTYPE FAR* LPPORTTYPE;
#endif
//------------------------------------------------------------------------
// The P1284_MODE enumeration specifies IEEE-1284 input and output modes
// definitions. Not all modes are supported by HPV1284. This enumeration
// is used by the VCOMM_EscapeCommFunction() calls SET_P1284_INPUT_MODE,
// SET_P1284_OUTPUT_MODE, GET_DEFAULT_MODES, and GET_CURRENT_MODES.
//------------------------------------------------------------------------
typedef enum {
MODE_UNKNOWN,
MODE_NONE, // Input mode if not a bi-di capable device
MODE_LPT, // Compatibility mode (fwd only)
MODE_LPT_EXTENDED, // Compatibility mode w/ HW assisted handshake
MODE_NIBBLE, // Nibble mode (implies Compatibility fwd)
MODE_BYTE, // Byte mode (implies Compatibility fwd)
MODE_ECP, // ECP mode (fwd and rev)
MODE_ECP_RLE, // ECP mode w/ compression (fwd and rev)
MODE_SLIPPY, // ECP mode emulation (uses Nibble rev)
MODE_EPP, // EPP mode (not supported by this driver)
MODE_SLIPPYB // ECP mode (hardware fwd and software rev)
} P1284_MODE;
//---------------------------------------------------------------------------
// The IOMODES structure is used by the VCOMM_EscapeCommFunction calls
// GET_DEFAULT_MODES and GET_CURRENT_MODES. The driver will return the
// modes it is using for input and output.
//---------------------------------------------------------------------------
typedef struct _IOMODES
{
P1284_MODE eInputMode;
P1284_MODE eOutputMode;
} IOMODES, *PIOMODES, FAR* LPIOMODES;
// Device capability bit definitions reported by the VCOMM_EscapeCommFunction
// GET_DEVICE_CAPABILITIES. Capabilities are reported in a 16-bit unsigned
// word.
//
// Note that each value is a power of two, so that multiple capabilities
// may be expressed as a set of bits. If/when new capabilities are
// declared, they should be assigned bit values using the same scheme.
#define DEVICE_CAP_UNKNOWN 0x0000 // Device capability unknown
#define DEVICE_CAP_NIBBLE 0x0001 // Device understands nibble mode
#define DEVICE_CAP_BYTE 0x0002 // Device understands byte mode
#define DEVICE_CAP_ECP 0x0004 // Device understands ECP mode
#define DEVICE_CAP_ECP_RLE 0x0008 // Device understands ECP mode w/RLE
#define DEVICE_CAP_NIBBLE_ID 0x0010 // Device can do Device ID in Nibble
#define DEVICE_CAP_BYTE_ID 0x0020 // Device can do Device ID in Byte
#define DEVICE_CAP_ECP_ID 0x0040 // Device can do Device ID in ECP
#define DEVICE_CAP_ECP_RLE_ID 0x0080 // Device can do Device ID in ECP RLE
#define DEVICE_CAP_LPT 0x0100 // Device understands Compatibility Mode
typedef WORD DEVICE_CAPATILITIES, FAR* LPDEVICE_CAPABILITIES;
//---------------------------------------------------------------------------
// Function prototypes
//---------------------------------------------------------------------------
#ifndef WIN32
#define VCOMM_EXPORT(i) i __export
#define APIENTRY CALLBACK
#define CALLING_CONVEN CALLBACK
#else
#define VCOMM_EXPORT(i) __declspec(dllexport) i
#define VCOMM_IMPORT(i) __declspec(dllimport) i
#define CALLING_CONVEN __cdecl
#endif // WIN32
#ifdef __cplusplus
extern "C"
{
#endif
// Open a VCOMM port
VCOMM_EXPORT(HPORT) CALLING_CONVEN
VCOMM_OpenComm(
LPCSTR lpszPortName, // Points to string containing port name
DWORD VMId // Virtual machine ID, use -1 for exclusive open
);
// Close an open VCOMM port
VCOMM_EXPORT(BOOL) CALLING_CONVEN
VCOMM_CloseComm(
HPORT hPort // Handle to port
);
// Read a buffer from the port.
VCOMM_EXPORT(BOOL) CALLING_CONVEN // Returns TRUE if operation successful, FALSE
// otherwise.
VCOMM_ReadComm(
HPORT hPort, // Handle to port
LPBYTE lpvBuf, // Pointer to buffer to read into
DWORD numberOfBytesToRead, // How many bytes to read
LPDWORD lpNumberOfBytesRead // Pointer to where number of bytes read is stored
);
// Write a buffer to the port
VCOMM_EXPORT(BOOL) CALLING_CONVEN
VCOMM_WriteComm(
HPORT hPort, // Handle to port
LPBYTE lpvBuf, // Pointer to buffer to write from
DWORD numberOfBytesToWrite, // How many bytes to write
LPDWORD lpNumberOfBytesWritten // Pointer to where number of bytes written is stored
);
// Get the error for the last called VCOMM service for the given port
VCOMM_EXPORT(ERROR) CALLING_CONVEN
VCOMM_GetLastError(
HPORT hPort // Handle to port
);
// Carry out an extended function for the given port
VCOMM_EXPORT(BOOL) CALLING_CONVEN
VCOMM_EscapeCommFunction(
HPORT hPort, // Handle to port
DWORD lFunc, // Function to perform
LPVOID lpIndata, // Pointer to function specific input data
LPVOID lpOutdata // Pointer to function specific output data
);
// Get the status of receive and transmit queues and flow control
VCOMM_EXPORT(BOOL) CALLING_CONVEN
VCOMM_GetCommQueueStatus(
HPORT hPort, // Handle to port
LPVCOMSTAT lpComstat // Pointer to VCOMSTAT structure to receive info
);
// Re-enable a port after a communications error
VCOMM_EXPORT(BOOL) CALLING_CONVEN
VCOMM_ClearCommError(
HPORT hPort, // Handle to port
LPVCOMSTAT lpComstat, // Pointer to VCOMSTAT structure
LPDWORD lpErrors // location to put accumulated errors into
);
// Determine the port type of a specified port, without opening the port.
VCOMM_EXPORT(PORTTYPE) CALLING_CONVEN
VCOMM_GetPortType(
LPCSTR lpszPortName
);
// Get the device id of a specified port, without opening the port.
VCOMM_EXPORT(BOOL) CALLING_CONVEN
VCOMM_GetDeviceId(
LPCSTR lpszPortName,
LPSTR lpBuf,
DWORD szBuf,
LPDWORD lpBytesRead
);
#ifdef __cplusplus
}
#endif
#endif // _VCOMMAPI_H