⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 serpriv.h

📁 WinCE 3.0 BSP, 包含Inter SA1110, Intel_815E, Advantech_PCM9574 等
💻 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 + -