www.pudn.com > vcom.zip > ComfilntDevice.h
// ComfilntDevice.h // // Generated by DriverWizard version DriverStudio 2.5.0 (Build 240) // Requires Compuware's DriverWorks classes // #include#ifndef __ComfilntDevice_h__ #define __ComfilntDevice_h__ // // These defines are used to set the line control register. // #define SERIAL_5_DATA ((UCHAR)0x00) #define SERIAL_6_DATA ((UCHAR)0x01) #define SERIAL_7_DATA ((UCHAR)0x02) #define SERIAL_8_DATA ((UCHAR)0x03) #define SERIAL_DATA_MASK ((UCHAR)0x03) #define SERIAL_1_STOP ((UCHAR)0x00) #define SERIAL_1_5_STOP ((UCHAR)0x04) // Only valid for 5 data bits #define SERIAL_2_STOP ((UCHAR)0x04) // Not valid for 5 data bits #define SERIAL_STOP_MASK ((UCHAR)0x04) #define SERIAL_NONE_PARITY ((UCHAR)0x00) #define SERIAL_ODD_PARITY ((UCHAR)0x08) #define SERIAL_EVEN_PARITY ((UCHAR)0x18) #define SERIAL_MARK_PARITY ((UCHAR)0x28) #define SERIAL_SPACE_PARITY ((UCHAR)0x38) #define SERIAL_PARITY_MASK ((UCHAR)0x38) #define EV_RXCHAR 0x0001 // Any Character received #define EV_RXFLAG 0x0002 // Received certain character #define EV_TXEMPTY 0x0004 // Transmitt Queue Empty #define EV_CTS 0x0008 // CTS changed state #define EV_DSR 0x0010 // DSR changed state #define EV_RLSD 0x0020 // RLSD changed state #define EV_BREAK 0x0040 // BREAK received #define EV_ERR 0x0080 // Line status error occurred #define EV_RING 0x0100 // Ring signal detected #define EV_PERR 0x0200 // Printer error occured #define EV_RX80FULL 0x0400 // Receive buffer is 80 percent full #define EV_EVENT1 0x0800 // Provider specific event 1 #define EV_EVENT2 0x1000 // Provider specific event 2 /* typedef struct _READWRITE_FIFO{ KFifo PipeA; KFifo PipeB; KFifo BytePipe; } RW_FIFO; RW_FIFO rw_fifo[5]; */ class ComfilntDevice : public KDevice { // Constructors public: SAFE_DESTRUCTORS; ComfilntDevice(ULONG Unit,PRW pRW); ~ComfilntDevice(); // KFifo BytePipe(0x100, NonPagedPool); // KFifo BytePipe; // // RW_FIFO rw_fifo[5]; // This structure is used to get the current error and // general status of the driver. // /* typedef struct _SERIAL_STATUS { ULONG Errors; ULONG HoldReasons; ULONG AmountInInQueue; ULONG AmountInOutQueue; BOOLEAN EofReceived; BOOLEAN WaitForImmediate; } SERIAL_STATUS,*PSERIAL_STATUS; */ SERIAL_STATUS CommStatus; // Member Functions public: ULONG m_IsOpened; // KFifo * m_PipeB; // KFifo * m_PipeA; PRW m_pRW; DEVMEMBER_DISPATCHERS #ifdef __COMMENT_ONLY // The following member functions are actually defined by the // a DEVMEMBER_XXX macro (such as DEVMEMBER_DISPATCHERS). // The macro __COMMENT_ONLY never gets defined. These comment-only // definitions simply allow easy navigation to the functions within // the Developer Studio using the class browser. virtual NTSTATUS CleanUp(KIrp I); // COMMENT_ONLY virtual NTSTATUS Close(KIrp I); // COMMENT_ONLY virtual NTSTATUS Create(KIrp I); // COMMENT_ONLY virtual NTSTATUS DeviceControl(KIrp I); // COMMENT_ONLY virtual NTSTATUS FlushBuffers(KIrp I); // COMMENT_ONLY virtual NTSTATUS Read(KIrp I); // COMMENT_ONLY virtual NTSTATUS Write(KIrp I); // COMMENT_ONLY #endif virtual VOID IoctlGetCommStatus(SERIAL_STATUS& Status); virtual VOID IoctlGetBaudRate(SERIAL_BAUD_RATE& BaudRate); virtual NTSTATUS IoctlSetHandFlow(SERIAL_HANDFLOW& HandFlow); virtual VOID IoctlGetTimeOuts(SERIAL_TIMEOUTS& TimeOuts); virtual VOID IoctlSetTimeOuts(SERIAL_TIMEOUTS& TimeOuts); virtual VOID IoctlGetSpecialCharacters(SERIAL_CHARS& Chars); virtual VOID IoctlSetSpecialCharacters(SERIAL_CHARS& Chars); virtual VOID IoctlGetStatistics(SERIALPERF_STATS& Stats); virtual VOID IoctlClearStatistics(void); virtual ULONG IoctlGetWaitMask(void); virtual NTSTATUS IoctlSetWaitMask(ULONG mask); virtual VOID IoctlGetProperties(SERIAL_COMMPROP& Properties); virtual ULONG IoctlGetModemStatus(void); // virtual VOID IoctlGetCommStatus(SERIAL_STATUS& CommStatus); virtual VOID IoctlPurge(ULONG PurgeMask); virtual NTSTATUS IoctlSetQueueSize(SERIAL_QUEUE_SIZE& QueueSizes); virtual VOID IoctlGetHandFlow(SERIAL_HANDFLOW& HandFlow); virtual VOID IoctlSetBaudRate(SERIAL_BAUD_RATE& BaudRate); virtual VOID IoctlGetLineControl(SERIAL_LINE_CONTROL& LineControl); virtual NTSTATUS IoctlSetLineControl(SERIAL_LINE_CONTROL& LineControl); // Member Data protected: // Unit number for this device instance ULONG m_Unit; // Used in constructor/destructor to hold registry path KUnitizedName * m_RegPath; ULONG m_SupportedEvents; #if NTVERSION > 351 SERIALPERF_STATS m_Statistics; #endif SERIAL_BAUD_RATE m_BaudRate; SERIAL_HANDFLOW m_Handflow; SERIAL_CHARS m_Chars; UCHAR m_LineControl; ULONG m_WaitMask; ULONG m_WriteCount; ULONG m_EventState; SERIAL_TIMEOUTS m_Timeouts; ULONG m_ErrorState; ULONG m_EvenMask; // // All allowed purge flags // #define VALID_PURGE_MASK ( \ SERIAL_PURGE_TXABORT| \ SERIAL_PURGE_RXABORT| \ SERIAL_PURGE_TXCLEAR| \ SERIAL_PURGE_RXCLEAR) }; #endif // __ComfilntDevice_h__