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

📄 xrser16550.h

📁 wince 5.0下 实现PCI8串口卡驱动
💻 H
字号:
////////////////////////////////////////
//(c) 2005 EXAR Corporation 
//All Rights Reserved.
//

// Here is the callback for serial events
    typedef VOID (*PFN_SER_EVENT) (
        PVOID pHandle,              // PHW_INDEP_INFO, but pdd doesn't know it
        UINT32 events               // What events where encountered?
        );

     // And now, all the function prototypes
    VOID XRSL_Init(
        PVOID   pHead, //  points to device head
        PUCHAR  pRegBase, // Pointer to 16550 register base
        UINT8   RegStride, // Stride amongst the 16550 registers
        EVENT_FUNC EventCallback, // This callback exists in MDD
        PVOID   pMddHead,   // This is the first parm to callback
        PLOOKUP_TBL pBaudTable  // Pointer to baud rate table
        );
    BOOL XRSL_PostInit(
        PVOID   pHead 
        );
    VOID XRSL_Deinit(
        PVOID   pHead //  points to device head
        );
    VOID XRSL_Open(
        PVOID   pHead 
        );
    VOID XRSL_Close(
        PVOID   pHead
        );
    VOID XRSL_ClearDTR(
        PVOID   pHead 
        );
    VOID XRSL_SetDTR(
        PVOID   pHead 
        );
    VOID XRSL_ClearRTS(
        PVOID   pHead 
        );
    VOID XRSL_SetRTS(
        PVOID   pHead 
        );
    VOID XRSL_ClearBreak(
        PVOID   pHead 
        );
    VOID XRSL_SetBreak(
        PVOID   pHead 
        );
    VOID XRSL_ClearBreak(
        PVOID   pHead 
        );
    VOID XRSL_SetBreak(
        PVOID   pHead
        );
    ULONG XRSL_GetByteNumber(
        PVOID   pHead	     
        );
    VOID XRSL_DisableXmit(
        PVOID   pHead	
        );
    VOID XRSL_EnableXmit(
        PVOID   pHead	
        );
    BOOL XRSL_SetBaudRate(
        PVOID   pHead,
        ULONG   BaudRate	//      ULONG representing decimal baud rate.
        );
    BOOL XRSL_SetDCB(
        PVOID   pHead,	
        LPDCB   lpDCB       //     Pointer to DCB structure
        );
    ULONG XRSL_SetCommTimeouts(
        PVOID   pHead,	
        LPCOMMTIMEOUTS   lpCommTimeouts //  Pointer to CommTimeout structure
        );
    ULONG XRSL_GetRxBufferSize(
        PVOID pHead
        );
    PVOID XRSL_GetRxStart(
        PVOID   pHead
        );
    INTERRUPT_TYPE XRSL_GetInterruptType(
        PVOID pHead
        );
    ULONG XRSL_RxIntr(
        PVOID pHead,
        PUCHAR pRxBuffer,       // Pointer to receive buffer
        ULONG *pBufflen         //  In = max bytes to read, out = bytes read
        );
    ULONG XRSL_PutBytes(
        PVOID   pHead,
        PUCHAR  pSrc,	    // 	Pointer to bytes to be sent.
        ULONG   NumberOfBytes,  // 	Number of bytes to be sent.
        PULONG  pBytesSent	    // 	Pointer to actual number of bytes put.
        );
    VOID XRSL_TxIntr(
        PVOID pHead 
        );
    VOID XRSL_LineIntr(
        PVOID pHead
        );
    VOID XRSL_OtherIntr(
        PVOID pHead 
        );
    VOID XRSL_ModemIntr(
        PVOID pHead 
        );
    ULONG XRSL_GetStatus(
        PVOID	pHead,
        LPCOMSTAT	lpStat	// Pointer to LPCOMMSTAT to hold status.
        );
    VOID XRSL_Reset(
        PVOID   pHead
        );
    VOID XRSL_GetModemStatus(
        PVOID   pHead,
        PULONG  pModemStatus    //  PULONG passed in by user.
        );
    VOID XRSL_PurgeComm(
        PVOID   pHead,
        DWORD   fdwAction	    //  Action to take. 
        );
    BOOL XRSL_XmitComChar(
        PVOID   pHead,
        UCHAR   ComChar   //  Character to transmit. 
        );
    VOID XRSL_PowerOn(
        PVOID   pHead
        );
    VOID XRSL_PowerOff(
        PVOID   pHead
        );
    BOOL XRSL_Ioctl(
        PVOID pHead,
        DWORD dwCode,
        PBYTE pBufIn,
        DWORD dwLenIn,
        PBYTE pBufOut,
        DWORD dwLenOut,
        PDWORD pdwActualOut);

    VOID XRSL_TxIntrEx(
        PVOID pHead,
	    PUCHAR pTxBuffer,          // @parm Pointer to receive buffer
	    ULONG *pBufflen            // @parm In = max bytes to transmit, out = bytes transmitted
        );




/*
 * The special register set for XR17C15X UARTs.
 */

#define XR_17C15X_EXTENDED_FCTR		8
#define XR_17C15X_EXTENDED_EFR		9
#define XR_17C15X_TXFIFO_CNT		10
#define XR_17C15X_EXTENDED_TXTRG	10
#define XR_17C15X_RXFIFO_CNT		11
#define XR_17C15X_EXTENDED_RXTRG	11
#define XR_17C15X_EXTENDED_XOFF1	12		// write-only
#define XR_17C15X_EXTENDED_XOFF2	13		// write-only
#define XR_17C15X_EXTENDED_XON1		14		// write-only
#define XR_17C15X_EXTENDED_XON2		15		// write-only


#define XR_17C15X_FCTR_RTS_8DELAY	0x03
#define XR_17C15X_FCTR_TRGD		192

/* 17C15X TX/RX memory mapped buffer offsets */

#define UART_17158_RX_OFFSET		0x100
#define UART_17158_TX_OFFSET 		0x100

/*
 * These are the EXTENDED definitions for the 17C15X's Interrupt
 * Enable Register
 */
#define	XR_17C15X_IER_RTSDTR	0x40
#define XR_17C15X_IER_CTSDSR	0x80


/*
 * These are the definitions for the Extended Features Register
 * (StarTech 16C660 only, when DLAB=1)
 */
#define UART_EFR_CTS	0x80	/* CTS flow control */
#define UART_EFR_RTS	0x40	/* RTS flow control */
#define UART_EFR_SCD	0x20	/* Special character detect */
#define UART_EFR_ECB	0x10	/* Enhanced control bit */


// All the PCI XR17xy5z specific IOCTL codes and the related function ptototypes are 
// defined here 
// the IOCTL index starts from 50 (in pegdser.h the last ioctl index ends at 25)
#define IOCTL_XR17C15X_ENABLE_HWFLOWCONTROL 		CTL_CODE(FILE_DEVICE_SERIAL_PORT,50,METHOD_BUFFERED,FILE_ANY_ACCESS)
#define IOCTL_XR17C15X_DISABLE_HWFLOWCONTROL 		CTL_CODE(FILE_DEVICE_SERIAL_PORT,51,METHOD_BUFFERED,FILE_ANY_ACCESS)
#define IOCTL_XR17C15X_ENABLE_SWFLOWCONTROL 		CTL_CODE(FILE_DEVICE_SERIAL_PORT,52,METHOD_BUFFERED,FILE_ANY_ACCESS)
#define IOCTL_XR17C15X_DISABLE_SWFLOWCONTROL 		CTL_CODE(FILE_DEVICE_SERIAL_PORT,53,METHOD_BUFFERED,FILE_ANY_ACCESS)
#define IOCTL_XR17C15X_ENABLE_IR 					CTL_CODE(FILE_DEVICE_SERIAL_PORT,54,METHOD_BUFFERED,FILE_ANY_ACCESS)
#define IOCTL_XR17C15X_DISABLE_IR 					CTL_CODE(FILE_DEVICE_SERIAL_PORT,55,METHOD_BUFFERED,FILE_ANY_ACCESS)
#define IOCTL_XR17C15X_ENABLE_SLEEPMODE 			CTL_CODE(FILE_DEVICE_SERIAL_PORT,56,METHOD_BUFFERED,FILE_ANY_ACCESS)
#define IOCTL_XR17C15X_DISABLE_SLEEPMODE 			CTL_CODE(FILE_DEVICE_SERIAL_PORT,57,METHOD_BUFFERED,FILE_ANY_ACCESS)
#define IOCTL_XR17C15X_ENABLE_INTERNAL_LOOPBACK 	CTL_CODE(FILE_DEVICE_SERIAL_PORT,58,METHOD_BUFFERED,FILE_ANY_ACCESS)
#define IOCTL_XR17C15X_DISABLE_INTERNAL_LOOPBACK 	CTL_CODE(FILE_DEVICE_SERIAL_PORT,59,METHOD_BUFFERED,FILE_ANY_ACCESS)
#define IOCTL_XR17C15X_ENABLE_AUTORS485 			CTL_CODE(FILE_DEVICE_SERIAL_PORT,60,METHOD_BUFFERED,FILE_ANY_ACCESS)
#define IOCTL_XR17C15X_DISABLE_AUTORS485 			CTL_CODE(FILE_DEVICE_SERIAL_PORT,61,METHOD_BUFFERED,FILE_ANY_ACCESS)
#define IOCTL_XR17C15X_CONFIG_REG_READ 				CTL_CODE(FILE_DEVICE_SERIAL_PORT,62,METHOD_BUFFERED,FILE_ANY_ACCESS)
#define IOCTL_XR17C15X_CONFIG_REG_WRITE				CTL_CODE(FILE_DEVICE_SERIAL_PORT,63,METHOD_BUFFERED,FILE_ANY_ACCESS)


VOID XR17C15X_EnableHardwareFlowControl(
        PVOID   pHead,		
        BOOL	bEnable // TRUE for enable and FALSE for disable
        );

typedef struct          /* Software Flow Control Enable Options*/
{
	BOOL custom;	/* if YES, please specify Xon/Xoff chars */
	BYTE One_or_Two_Char;	/* if 1 - and custom-Yes, specify Xon1 and Xoff1 chars. If 2 and custom-Yes, specify both Xon1/Xoff1 and Xon2 and Xon2 */
	BYTE Xon1;
	BYTE Xoff1;
	BYTE Xon2;
	BYTE Xoff2;
} SW_FLOW_CONTROL_PARAMS;

typedef struct
{
    unsigned char	bReg;
	unsigned char	bData;

} CONFIG_WRITE, *PCONFIG_WRITE;

    
VOID XR17C15X_EnableSoftwareFlowControl(
        PVOID   pHead,
        BOOL	bEnable, // TRUE for enable and FALSE for disable
		SW_FLOW_CONTROL_PARAMS *pSWFCParams
        );

VOID XR17C15X_EnableIR(
        PVOID   pHead,		
        BOOL	bEnable, // TRUE for enable and FALSE for disable
		BOOL	bInvert // TRUE for Inevrt and FALSE for default
        );

VOID XR17C15X_EnableSleepMode(        
        PVOID   pHead,		
        BOOL	bEnable // TRUE for enable and FALSE for disable		
        );
	
VOID XR17C15X_EnableInternalLoopback(
        PVOID   pHead,		
        BOOL	bEnable // TRUE for enable and FALSE for disable
        );

VOID XR17C15X_EnableAutoRS485(
        PVOID   pHead,		
        BOOL	bEnable, // TRUE for enable and FALSE for disable
		UCHAR   ucTurnAroundTime
        );

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -