mirror of https://github.com/lianthony/NT4.0
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
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
|