123 lines
4.9 KiB
C
123 lines
4.9 KiB
C
/*++
|
||
|
||
*****************************************************************************
|
||
* *
|
||
* This software contains proprietary and confidential information of *
|
||
* *
|
||
* Digi International Inc. *
|
||
* *
|
||
* By accepting transfer of this copy, Recipient agrees to retain this *
|
||
* software in confidence, to prevent disclosure to others, and to make *
|
||
* no use of this software other than that for which it was delivered. *
|
||
* This is an unpublished copyrighted work of Digi International Inc. *
|
||
* Except as permitted by federal law, 17 USC 117, copying is strictly *
|
||
* prohibited. *
|
||
* *
|
||
*****************************************************************************
|
||
|
||
Module Name:
|
||
|
||
digiser.h
|
||
|
||
Abstract:
|
||
|
||
This file contains the recommended extensions to the Microsoft Windows NT
|
||
Serial Interface (NTDDSER.H) needed to support hardware framing.
|
||
|
||
Revision History:
|
||
|
||
$Log: digiser.h $
|
||
|
||
Revision 1.3 1995/09/15 14:55:24 dirkh
|
||
Remove SERIAL_ERROR_CRC (use STATUS_CRC_ERROR instead).
|
||
Comments are more explicit.
|
||
|
||
Revision 1.2 1995/06/12 15:23:44 dirkh
|
||
Merge two structures (SERIAL_GET_FRAMING and SERIAL_SET_FRAMING)
|
||
into one (SERIAL_FRAMING_STATE). Document relationship with IOCTLs.
|
||
|
||
Revision 1.1 1995/05/31 15:05:19 mikez
|
||
Initial revision
|
||
|
||
--*/
|
||
|
||
|
||
//
|
||
// NtDeviceIoControlFile IoControlCode values for this device
|
||
//
|
||
#ifndef Microsoft_Adopts_These_Changes
|
||
#define IOCTL_SERIAL_QUERY_FRAMING CTL_CODE(FILE_DEVICE_SERIAL_PORT,0x801,METHOD_BUFFERED,FILE_ANY_ACCESS)
|
||
#define IOCTL_SERIAL_SET_FRAMING CTL_CODE(FILE_DEVICE_SERIAL_PORT,0x802,METHOD_BUFFERED,FILE_ANY_ACCESS)
|
||
#define IOCTL_SERIAL_GET_FRAMING CTL_CODE(FILE_DEVICE_SERIAL_PORT,0x803,METHOD_BUFFERED,FILE_ANY_ACCESS)
|
||
#else
|
||
#define IOCTL_SERIAL_QUERY_FRAMING CTL_CODE(FILE_DEVICE_SERIAL_PORT,35,METHOD_BUFFERED,FILE_ANY_ACCESS)
|
||
#define IOCTL_SERIAL_SET_FRAMING CTL_CODE(FILE_DEVICE_SERIAL_PORT,36,METHOD_BUFFERED,FILE_ANY_ACCESS)
|
||
#define IOCTL_SERIAL_GET_FRAMING CTL_CODE(FILE_DEVICE_SERIAL_PORT,37,METHOD_BUFFERED,FILE_ANY_ACCESS)
|
||
#endif
|
||
|
||
|
||
//
|
||
// Provider capabilities flags (IOCTL_SERIAL_GET_PROPERTIES)
|
||
//
|
||
#define SERIAL_PCF_FRAMING ((ULONG)0x0400)
|
||
|
||
|
||
//
|
||
// Defines the bitmask that the driver can use to notify
|
||
// state changes via IOCTL_SERIAL_SET_WAIT_MASK and IOCTL_SERIAL_WAIT_ON_MASK.
|
||
//
|
||
// Note that these events will *not* be delivered if there is an outstanding read IRP.
|
||
// The status of the read IRP serves as notification of the receipt of a (good or bad) frame.
|
||
// Repeat: These events will be detected and delivered only if the read queue is empty.
|
||
//
|
||
#define SERIAL_EV_RXFRAME 0x2000 // A valid frame was received
|
||
#define SERIAL_EV_BADFRAME 0x4000 // An errored frame was received.
|
||
|
||
|
||
//
|
||
// Read IRPs are always completed when a frame is received.
|
||
// Following are the values that can be returned by the
|
||
// driver in IoStatus.Status of the read IRP.
|
||
//
|
||
// STATUS_SUCCESS (good frame, data length is IoStatus.Information)
|
||
// STATUS_CRC_ERROR
|
||
// STATUS_DATA_ERROR (abort frame)
|
||
// STATUS_DATA_OVERRUN (buffer overrun -- note that buffer must have space for CRC bytes, although CRC bytes will not be indicated on STATUS_SUCCESS)
|
||
//
|
||
|
||
|
||
//
|
||
// This structure is used to query the framing options
|
||
// supported by hardware (IOCTL_SERIAL_QUERY_FRAMING).
|
||
//
|
||
typedef struct _SERIAL_FRAMING_INFO {
|
||
OUT ULONG FramingBits; // Standard NDIS_WAN_INFO field
|
||
OUT ULONG HdrCompressionBits; // Standard NDIS_WAN_INFO field
|
||
OUT ULONG DataCompressionBits; // To be decided
|
||
OUT ULONG DataEncryptionBits; // To be decided
|
||
} SERIAL_FRAMING_INFO, *PSERIAL_FRAMING_INFO;
|
||
|
||
|
||
//
|
||
// This structure is used to set and retrieve
|
||
// the current hardware framing settings
|
||
// (IOCTL_SERIAL_SET_FRAMING, IOCTL_SERIAL_GET_FRAMING).
|
||
//
|
||
// Valid values for [Send,Recv]FramingBits include (for example)
|
||
// PPP_FRAMING, PPP_ACCM_SUPPORTED, and ISO3309_FRAMING.
|
||
//
|
||
typedef struct _SERIAL_FRAMING_STATE {
|
||
IN OUT ULONG BitMask; // 0: 16 bit CRC
|
||
// 1: 32 bit CRC
|
||
IN OUT ULONG SendFramingBits; // Standard NDIS_WAN_SET_LINK_INFO field
|
||
IN OUT ULONG RecvFramingBits; // Standard NDIS_WAN_SET_LINK_INFO field
|
||
IN OUT ULONG SendCompressionBits; // Standard NDIS_WAN_SET_LINK_INFO field
|
||
IN OUT ULONG RecvCompressionBits; // Standard NDIS_WAN_SET_LINK_INFO field
|
||
IN OUT ULONG SendEncryptionBits; // To be decided
|
||
IN OUT ULONG RecvEncryptionBits; // To be decided
|
||
IN OUT ULONG SendACCM; // Standard NDIS_WAN_SET_LINK_INFO field
|
||
IN OUT ULONG RecvACCM; // Standard NDIS_WAN_SET_LINK_INFO field
|
||
} SERIAL_FRAMING_STATE, *PSERIAL_FRAMING_STATE;
|
||
|
||
|