Source code of Windows XP (NT5)
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.
|
|
//+-------------------------------------------------------------------------
//
// Microsoft Windows
//
// Copyright (C) SCM Microsystems, 1998 - 1999
//
// File: serialnt.h
//
//--------------------------------------------------------------------------
#if !defined( __SERIAL_NT_H__ )
#define __SERIAL_NT_H__
#include "DriverNT.h"
#include <ntddser.h>
#include "SerialIF.h"
#define STC_BUFFER_SIZE 32
#define TPDU_STACK_SIZE 2048
typedef struct _SERIAL_PORT_CONFIG { SERIAL_HANDFLOW HandFlow; // flow control
SERIAL_CHARS SerialChars; // special characters
SERIAL_TIMEOUTS Timeouts; // read/write timeouts
SERIAL_BAUD_RATE BaudRate; // Baudrate for reader
SERIAL_LINE_CONTROL LineControl; // Stop bits, parity configuration
ULONG WaitMask, // notification events
Purge; } SERIAL_PORT_CONFIG, *PSERIAL_PORT_CONFIG;
typedef struct _READER_EXTENSION { //
// serial port driver data
//
ULONG SerialPortNumber; PDEVICE_OBJECT SerialDeviceObject; PFILE_OBJECT SerialFileObject; PIO_WORKITEM CloseSerial; // worker thread that closes the serial driver
// back pointer to smart card extension
PSMARTCARD_EXTENSION SmartcardExtension;
// read thread data
UCHAR IOData[ 2 * STC_BUFFER_SIZE ]; UCHAR TPDUStack[ TPDU_STACK_SIZE ]; ULONG Available; ULONG Expected;
ULONG EventMask; ULONG ReadTimeout; // read timeout in ms
IO_STATUS_BLOCK IoStatus; KEVENT IoEvent; KEVENT DataAvailable;
PIO_WORKITEM ReadWorkItem; KSPIN_LOCK ReadSpinLock;
// miscellaneous
ULONG ReaderPowerState; BOOLEAN PowerRequest; UCHAR FirmwareMajor, FirmwareMinor;
BOOLEAN CardPresent;
KEVENT SerialCloseDone; // signaled if the connection to the serial driver has been closed
} READER_EXTENSION, *PREADER_EXTENSION;
typedef enum _READER_POWER_STATE { PowerReaderUnspecified = 0, PowerReaderWorking, PowerReaderOff } READER_POWER_STATE, *PREADER_POWER_STATE;
//
// CONSTANTS
//
#define SR_VENDOR_NAME "STCS"
#define SR_PRODUCT_NAME "Serial Reader"
//
// serial communication defines
//
#define SR_BAUD_RATE 115200
#define SR_STOP_BITS STOP_BIT_1
#define SR_PARITY NO_PARITY
#define SR_DATA_LENGTH SERIAL_DATABITS_8
//
// COM timeout values in ms
//
#define SR_READ_TOTAL_TIMEOUT_CONSTANT 2000
#define SR_READ_INTERVAL_TIMEOUT 2000
#define SR_WRITE_TOTAL_TIMEOUT_CONSTANT 2000
#define SR_WRITE_TOTAL_TIMEOUT_MULTIPLIER 0
#define SR_FLOW_REPLACE 0
#define SR_HAND_SHAKE 0
#define SR_XON_LIMIT 0
#define SR_XOFF_LIMIT 0
#define SR_ON_CHAR 0x11
#define SR_OFF_CHAR 0x13
#define SR_NOTIFICATION_EVENT ( SERIAL_EV_RXCHAR | SERIAL_EV_DSR )
#define SR_PURGE ( SERIAL_PURGE_RXCLEAR | SERIAL_PURGE_TXCLEAR )
//
// not clear, how these ctl codes are interpreted; the actual command is passed by the IrpStack.MajorFunction
//
#define SERIAL_READ SCARD_CTL_CODE( 0x1000 )
#define SERIAL_WRITE SCARD_CTL_CODE( 0x2000 )
//
// READ THREAD
//
#define RT_FINISH 0x00
#define RT_READ_HEAD 0x01
#define RT_READ_TAIL 0x02
#define RT_READ_MORE 0x03
#define RT_GET_MODEM_STATUS 0x04
#define RT_WAIT_EMPTY 0x05
#define RT_WAIT_DATA 0x06
NTSTATUS IFReadThreadCallback( PDEVICE_OBJECT DeviceObject, PIRP Irp, PREADER_EXTENSION ReaderExtension );
//
// LOCAL PROTOTYPES
//
NTSTATUS IFSerialIoctl( PREADER_EXTENSION ReaderExtension, ULONG IoctlCode, PVOID OutData, ULONG OutDataLen, PVOID InData, ULONG InDataLen );
NTSTATUS IFSerialRead( PREADER_EXTENSION ReaderExtension, PUCHAR InData, ULONG InDataLen );
NTSTATUS IFSerialWaitOnMask( PREADER_EXTENSION ReaderExtension );
VOID IFReadWorkRoutine( IN PDEVICE_OBJECT DeviceObject, IN PREADER_EXTENSION ReaderExtension );
#endif // !__SERIAL_NT_H__
//---------------------------------------- END OF FILE ----------------------------------------
|