📄 serpriv.h
字号:
/*
Copyright(c) 1998,1999 SIC/Hitachi,Ltd.
Module Name:
serpriv.h
Revision History:
26th April 1999 Released
*/
#ifndef __SERPRIV_H__
#define __SERPRIV_H__
//
// The serial event structure contains fields used to pass serial
// event information from the PDD to the MDD. This information
// is passed via a callback, so the scope of this structure remains
// limited to the MDD.
//
typedef struct __COMM_EVENTS {
HANDLE hCommEvent; // @field Indicates serial events from PDD
// to MDD
ULONG fEventMask; // @field Event Mask requestd by application
CRITICAL_SECTION EventCritSec; // @field Protects EventData element
ULONG fEventData; // @field Event Mask Flag.
} COMM_EVENTS, *PCOMM_EVENTS;
/*
@doc
@struct RX_BUFFER_INFO | Driver Receive Buffer Information.
*/
typedef struct __RX_BUFFER_INFO {
ULONG Read; /* @field Current Read index. */
ULONG Write; /* @field Current Write index. */
ULONG Length; /* @field Length of buffer */
BOOL DataAvail; /* @field BOOL reflecting existence of data. */
PUCHAR RxCharBuffer; /* @field Start of buffer */
CRITICAL_SECTION CS; /* @field Critical section */
} RX_BUFFER_INFO, *PRX_BUFFER_INFO;
#define RxResetFifo(pSH) pSH->RxBufferInfo.Write = pSH->RxBufferInfo.Read = 0
#define RxEnterCS(pSH) EnterCriticalSection (&(pSH->RxBufferInfo.CS))
#define RxLeaveCS(pSH) LeaveCriticalSection (&(pSH->RxBufferInfo.CS))
#define RxWrite(pSH) (pSH->RxBufferInfo.Write)
#define RxRead(pSH) (pSH->RxBufferInfo.Read)
#define RxLength(pSH) (pSH->RxBufferInfo.Length)
#define RxBytesAvail(pSH) ((RxWrite(pSH) - RxRead(pSH)) & (RxLength(pSH) - 1))
#define RxBuffWrite(pSH) (pSH->RxBufferInfo.RxCharBuffer+pSH->RxBufferInfo.Write)
#define RxBuffRead(pSH) (pSH->RxBufferInfo.RxCharBuffer+pSH->RxBufferInfo.Read)
typedef VOID (*COMMFUNC)(PVOID pHead);
// Forward declare for use below
typedef struct __HWOBJ HWOBJ, *PHWOBJ;
/* @struct HW_INDEP_INFO | Hardware Independent Serial Driver Head Information.
*/
typedef struct __HW_INDEP_INFO {
CRITICAL_SECTION TransmitCritSec1; /* @field Protects tx action */
CRITICAL_SECTION ReceiveCritSec1; /* @field Protects rx action */
HANDLE hSerialEvent; /* @field Serial event, both rx and tx */
HANDLE hReadEvent; /* @field Serial event, both rx and tx */
HANDLE hKillDispatchThread; /* @field Synchonize thread end.*/
HANDLE hTransmitEvent; /* @field transmit event, both rx and tx */
HANDLE pDispatchThread; /* @field ReceiveThread */
ULONG DroppedBytesMDD; /* @field Record of bytes dropped by MDD.*/
ULONG DroppedBytesPDD; /* @field Record of bytes dropped by PDD.*/
ULONG RxBytes; /* @field Record of total bytes received.*/
ULONG TxBytes; /* @field Record of total bytes transmitted.*/
ULONG TxBytesPending; /* @field Record of total bytes awaiting transmit.*/
PHWOBJ pHWObj; /* @field Represents PDD object.*/
DCB DCB; /* @field DCB (see Win32 Documentation.*/
COMMTIMEOUTS CommTimeouts; /* @field Time control field. */
DWORD Used; /* @field Protects use of this port */
DWORD KillRxThread:1; /* @field Flag to terminate SerialDispatch thread. */
DWORD XFlow:1; /* @field True if Xon/Xoff flow ctrl. */
DWORD StopXmit:1; /* @field Stop transmission flag. */
DWORD SentXoff:1; // @field True if XOFF sent.
DWORD DtrFlow:1; // @field True if currently DTRFlowed
DWORD RtsFlow:1; // @field True if currently RTSFlowed
DWORD fAbortRead:1; // @field Used for PURGE
DWORD fAbortTransmit:1;// @field Used for PURGE
DWORD Reserved:24; // @field remaining bits.
DWORD StructUsers; // @field Count of threads currently using struct.
COMM_EVENTS CommEvents; // @field Contains all info for serial event handling
RX_BUFFER_INFO RxBufferInfo; /* @field rx buffer info. */
} HW_INDEP_INFO, *PHW_INDEP_INFO;
#define E_OF_CHAR 0xd
#define ERROR_CHAR 0xd
#define BREAK_CHAR 0xd
#define EVENT_CHAR 0xd
#define X_ON_CHAR 0x11
#define X_OFF_CHAR 0x13
#define X_FLOW_CTRL 0x1
#define MAX_SERIAL_INDEX 16
#define RX_BUFFER_SIZE 2048
#define COMM_FUNC_SIZE 16
static PHW_INDEP_INFO pGlobalSerialHead[MAX_SERIAL_INDEX];
static ULONG GlobalSerialHeadNumber = 0;
static
PHW_INDEP_INFO
GetSerialHead(
PVOID pHead
);
#define READ_TIMEOUT 250
#define READ_TIMEOUT_MULTIPLIER 10
#define READ_TIMEOUT_CONSTANT 100
#define WRITE_TIMEOUT_MULTIPLIER 10
#define WRITE_TIMEOUT_CONSTANT 100
/* Implemented by hw dependent code.
*/
#include <serhw.h>
#endif // __SERPRIV_H__
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -