WinCE中串口驱动及接口函数介绍

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

WinCE中串口驱动及接口函数介绍

串口驱动本身分为MDD层和PDD层。MDD层对上层的Device Manager提供了标准的流设备驱动接口(COM_***),PDD层实现了HWOBJ结构及结构中若干针对于串口硬件操作的函数指针,这些函数指针将指向PDD层中的串口操作函数。DDSI是指MDD层与PDD层的接口,在串口驱动中实际上就是指HWOBJ,PDD层会传给MDD层一个HWOBJ结构的指针,这样MDD层就可以调用PDD层的函数来操作串口。

微软针对于串口驱动提供了参考源代码,可以在下面的目录下找到:”\WINCE600\PUBLIC\COMMON\OAK\DRIVERS\SERIAL”。

串口驱动的结构也就是这样了,下面介绍相关的驱动中的接口。

1. HWOBJ结构

在串口驱动中,HWOBJ结构中的函数实现了对串口硬件的操作,并在MDD层被调用。可以说,该结构描述了串口设备的所有特性,先来介绍一下该结构,具体定义如下:

typedef struct __HWOBJ

{

ULONG BindFlags;

DWORD dwIntID;

PHW_VTBL pFuncTbl;

} HWOBJ, *PHWOBJ;

BindFlags:用于控制MDD层如何来处理IST,具体值如下:

THREAD_IN_PDD:MDD层不处理,中断在PDD层处理。

THREAD_AT_INIT:在驱动初始化的时候,MDD层启动IST。

THREAD_AT_OPEN:在驱动被Open的时候,MDD层启动IST。

dwInitID:系统的中断号 pFuncTbl:指向一个PHW_VTBL结构,该结构中包含一个函数指针列表,这些函数指针指向串口硬件操作函数,用于操作串口。

view plaincopy to clipboardprint?

typedef struct __HW_VTBL

{

PVOID (*HWInit)(ULONG Identifier, PVOID pMDDContext);

ULONG (*HWDeinit)(PVOID pHead);

BOOL (*HWOpen)(PVOID pHead);

ULONG (*HWClose)(PVOID pHead);

ULONG (*HWGetBytes)(PVOID pHead, PUCHAR pTarget, PULONG pBytes);

PVOID (*HWGetRxStart)(PVOID pHead);

INTERRUPT_TYPE (*HWGetIntrType)(PVOID pHead);

VOID (*HWOtherIntrHandler)(PVOID pHead);

VOID (*HWLineIntrHandler)(PVOID pHead);

ULONG (*HWGetRxBufferSize)(PVOID pHead);

VOID (*HWTxIntrHandler)(PVOID pHead);

ULONG (*HWPutBytes)(PVOID pHead, PUCHAR pSrc, ULONG NumBytes, PULONG pBytesSent);

BOOL (*HWPowerOff)(PVOID pHead);

BOOL (*HWPowerOn)(PVOID pHead);

VOID (*HWClearDTR)(PVOID pHead);

VOID (*HWSetDTR)(PVOID pHead);

VOID (*HWClearRTS)(PVOID pHead);

VOID (*HWSetRTS)(PVOID pHead);

BOOL (*HWEnableIR)(PVOID pHead, ULONG BaudRate);

BOOL (*HWDisableIR)(PVOID pHead);

VOID (*HWClearBreak)(PVOID pHead);

VOID (*HWSetBreak)(PVOID pHead);

BOOL (*HWXmitComChar)(PVOID pHead, UCHAR ComChar);

ULONG (*HWGetStatus)(PVOID pHead, LPCOMSTAT lpStat);

VOID (*HWReset)(PVOID pHead);

VOID (*HWGetModemStatus)(PVOID pHead, PULONG pModemStatus);

VOID (*HWGetCommProperties)(PVOID pHead, LPCOMMPROP pCommProp);

VOID (*HWPurgeComm)(PVOID pHead, DWORD fdwAction);

BOOL (*HWSetDCB)(PVOID pHead, LPDCB pDCB);

BOOL (*HWSetCommTimeouts)(PVOID pHead, LPCOMMTIMEOUTS lpCommTO);

BOOL (*HWIoctl)(PVOID pHead, DWORD dwCode,PBYTE pBufIn, DWORD dwLenIn, PBYTE pBufOut,DWORD dwLenOut,PDWORD pdwActualOut);

} HW_VTBL, *PHW_VTBL;

typedef struct __HW_VTBL

{

PVOID (*HWInit)(ULONG Identifier, PVOID pMDDContext);

ULONG (*HWDeinit)(PVOID pHead);

BOOL (*HWOpen)(PVOID pHead);

ULONG (*HWClose)(PVOID pHead);

ULONG (*HWGetBytes)(PVOID pHead, PUCHAR pTarget, PULONG pBytes);

PVOID (*HWGetRxStart)(PVOID pHead);

INTERRUPT_TYPE (*HWGetIntrType)(PVOID pHead);

VOID (*HWOtherIntrHandler)(PVOID pHead);

VOID (*HWLineIntrHandler)(PVOID pHead);

ULONG (*HWGetRxBufferSize)(PVOID pHead);

VOID (*HWTxIntrHandler)(PVOID pHead);

ULONG (*HWPutBytes)(PVOID pHead, PUCHAR pSrc, ULONG NumBytes, PULONG pBytesSent);

BOOL (*HWPowerOff)(PVOID pHead);

BOOL (*HWPowerOn)(PVOID pHead);

VOID (*HWClearDTR)(PVOID pHead);

相关文档
最新文档