📄 isrcsd.h
字号:
#include <pkfuncs.h>
#define USER_IOCTL(X) (IOCTL_KLIB_USER + (X))
#define IOCTL_ISRCSD_INFO USER_IOCTL(20)
#define IOCTL_ISRCSD_UNLOAD USER_IOCTL(21)
typedef struct __CAN_RPACKET
{
UCHAR ff;
UCHAR id1;
UCHAR id2;
UCHAR id3;
UCHAR id4;
UCHAR data[8];
}CAN_RPACKET;
typedef struct __DataBuffer
{
DWORD dwBufferSize;
DWORD dwWaterMark;
DWORD dwFIFO_In;
DWORD dwFIFO_Out;
CAN_RPACKET bBuffer[1];
} DataBuffer;
typedef volatile DataBuffer * PDataBuffer;
__inline static DWORD GetDataSize(PDataBuffer pReceiveBuffer)
{
register DWORD dwFIFO_In=pReceiveBuffer->dwFIFO_In,dwFIFO_Out=pReceiveBuffer->dwFIFO_Out;
if (dwFIFO_In<dwFIFO_Out)
return (dwFIFO_In+pReceiveBuffer->dwBufferSize - dwFIFO_Out);
else
return (dwFIFO_In - dwFIFO_Out);
}
__inline static DWORD GetAvailableBuffer(PDataBuffer pReceiveBuffer)
{
register DWORD dwFIFO_In=pReceiveBuffer->dwFIFO_In,dwFIFO_Out=pReceiveBuffer->dwFIFO_Out;
if (dwFIFO_In<dwFIFO_Out)
return (dwFIFO_Out-dwFIFO_In);
else
return (dwFIFO_Out +pReceiveBuffer->dwBufferSize - dwFIFO_In);
}
__inline static DWORD IncIndex(PDataBuffer pReceiveBuffer,DWORD dwIndex)
{
return (dwIndex+13<pReceiveBuffer->dwBufferSize)?dwIndex+13:0;
}
//#define MAX_INTERRUPT_EVENT 0x10
typedef struct _ISRCSE_INFO{
PVOID pBlockPhysAddr;
DWORD dwBlockSize;
DWORD SysIntr;
PBYTE pIoAddress;
// DWORD dwReceiveHWWaterMaker;
// DWORD uMultiplier;
// DWORD bIntrBypass;
DWORD dwEventIndex;//处理到的EVENT序号
// DWORD dwEventCount; //EVENT数量
// BYTE iirEventArray[MAX_INTERRUPT_EVENT];
BYTE IntFlag;
DWORD InBufferOffset;
DWORD OutBufferOffset;
} ISRCSD_INFO;
typedef volatile ISRCSD_INFO * PISRCSD_INFO;
extern "C" {
DWORD CreateInstance( void );
BOOL IOControl(
DWORD InstanceIndex,
DWORD IoControlCode,
LPVOID pInBuf,
DWORD InBufSize,
LPVOID pOutBuf,
DWORD OutBufSize,
LPDWORD pBytesReturned
) ;
DWORD ISRHandler(
DWORD InstanceIndex
);
void DestroyInstance(
DWORD InstanceIndex
);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -