久久精品在这里_成人99免费视频_国产激情视频一区二区在线观看_国产伦精品一区二区三区免费 _亚洲午夜免费福利视频_色狠狠色狠狠综合_av在线综合网_91毛片在线观看_欧美视频一区二区在线观看_极品美女销魂一区二区三区免费_国产亚洲欧美激情_在线免费观看不卡av_日韩不卡一区二区三区_91精品国产麻豆国产自产在线_亚洲国产精品一区二区久久恐怖片_a4yy欧美一区二区三区


曙海教育集團論壇Win CE 專區WinCE系統定制與驅動開發 → WinCE中串口驅動及接口函數介紹


  共有8789人關注過本帖樹形打印

主題:WinCE中串口驅動及接口函數介紹

美女呀,離線,留言給我吧!
wangxinxin
  1樓 個性首頁 | 博客 | 信息 | 搜索 | 郵箱 | 主頁 | UC


加好友 發短信
等級:青蜂俠 帖子:1393 積分:14038 威望:0 精華:0 注冊:2010-11-12 11:08:23
WinCE中串口驅動及接口函數介紹  發帖心情 Post By:2010-11-26 14:01:54

在WinCE中,串口驅動實際上就是一個流設備驅動,具體架構如圖:
  

       串口驅動本身分為MDD層和PDD層。MDD層對上層的Device Manager提供了標準的流設備驅動接口(COM_xxx),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);

   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; 這些函數將在PDD層實現,用于實際的串口硬件操作。


2. MDD層API

MDD層向上提供了流設備接口,這部分代碼微軟已經實現,用于管理串口。雖然我們不需要實現這部分,但是還是對相應的接口做個簡單介紹。

2.1HANDLE COM_Init(ULONG Identifier):

       初始化串口設備,該函數通過讀取注冊表獲得串口設備號,并獲得相應的HWOBJ的結構指針,通過該指針調用PDD層的硬件初始化函數初始化串口。

Identifier:如果驅動被設備管理器加載,那么這個參數將包含一個注冊表鍵值在” HKEY_LOCAL_MACHINE\Drivers\Active”路徑下。如果驅動是通過調用RegisterDevice函數來加載的,那么這個值等于dwInfo的值。在COM_Init中,會先打開該鍵值,用返回的句柄來查詢DeviceArrayIndex值,并根據該值獲得PDD層的HWOBJ結構指針。

2.2 BOOL COM_Deinit(void):

       卸載串口設備,該函數中主要做了一些釋放資源的操作。也可以被DeregisterDevice函數調用。

2.3 HANDLE COM_Open(HANDLE pContext, DWORD AccessCode, DWORD ShareMode):

       打開串口設備。應用程序調用CreateFile函數打開串口時,該函數會被調用。

       pContext:COM_Init函數返回的Handle。

       AccessCode:設置訪問模式,比如共享讀或者是讀寫模式。

       ShareMode:在參數從應用程序中的CreateFile函數中傳來,表示是否支持獨自占有。

2.4 BOOL COM_Close(DWORD pContext):

       關閉串口設備。應用程序調用CloseHandle函數關閉串口時,該函數會被調用。

       pContext:該參數為COM_Open函數返回的Handle。

2.5 ULONG COM_Read(HANDLE pContext, PUCHAR pTargetBuffer, ULONG BufferLength, PULONG pBytesRead):

       讀串口數據。應用程序調用ReadFile函數讀串口的時候,該函數被調用。

       pContext:COM_Open函數返回的Handle。

       pTargetBuffer:指向一個用于存放讀到數據的Buffer。

       BufferLength:pTargetBuffer指向的Buffer的大小。

       pBytesRead:實際讀到的數據的大小。

2.6 ULONG COM_Write(HANDLE pContext, PUCHAR pSourceBytes, ULONG NumberOfBytes):

       寫串口數據。應用程序調用WriteFile函數寫串口的時候,該函數被調用。

       pContext:COM_Open函數返回的Handle。

       pSourceBytes:指向一個Buffer,該Buffer包含要寫入串口的數據。

       NumberOfBytes:要寫入串口的數據的大小。

2.7 BOOL COM_PowerUp(HANDLE pContext):

       該函數主要用于串口設備從suspend模式恢復到正常模式。

       pContext:串口設備的Handle。

2.8 BOOL COM_PowerDown(HANDLE pContext):

       該函數主要用于串口設備從正常模式進入suspend狀態。

       pContext:串口設備的Handle。

支持(0中立(0反對(0單帖管理 | 引用 | 回復 回到頂部

返回版面帖子列表

WinCE中串口驅動及接口函數介紹








簽名
久久精品在这里_成人99免费视频_国产激情视频一区二区在线观看_国产伦精品一区二区三区免费 _亚洲午夜免费福利视频_色狠狠色狠狠综合_av在线综合网_91毛片在线观看_欧美视频一区二区在线观看_极品美女销魂一区二区三区免费_国产亚洲欧美激情_在线免费观看不卡av_日韩不卡一区二区三区_91精品国产麻豆国产自产在线_亚洲国产精品一区二区久久恐怖片_a4yy欧美一区二区三区
国产成人午夜片在线观看高清观看| 日韩精品在线一区二区| 国产成人精品三级| 国产一区91精品张津瑜| 成人晚上爱看视频| 国产精品久久久久久久天堂第1集| 国产精品三区在线| 婷婷久久青草热一区二区| 在线观看日韩av先锋影音电影院| 7777精品伊人久久久大香线蕉最新版| 精品国产乱码久久久久久1区2区 | 国产精品theporn88| 国产精品自拍首页| 一区二区日韩电影| 久久亚洲精品国产精品紫薇| 欧美国产精品一区二区| 亚洲综合免费观看高清完整版在线 | 国产欧美一二三区| 亚洲精品视频自拍| 久久精品国产精品亚洲综合| aaa亚洲精品一二三区| 日本午夜精品电影| 欧美色图在线观看| 中文在线资源观看网站视频免费不卡| 亚洲二区在线视频| www..com久久爱| 手机看片福利永久国产日韩| 欧美一区二区大片| 一区二区三区av电影| 大陆成人av片| 亚洲欧美日本国产有色| 日韩你懂的电影在线观看| 综合欧美一区二区三区| 国产美女视频91| 欧美日韩精品免费在线观看视频| 欧美精品色一区二区三区| 亚洲欧美日韩国产另类专区| 国产一区不卡精品| 亚洲欧美日韩精品综合在线观看| 日韩欧美另类在线| 午夜视频久久久久久| 91一区二区在线观看| 在线亚洲精品福利网址导航| 中文字幕视频一区二区三区久| 国产精品综合二区| 一区二区冒白浆视频| 国产精品青草综合久久久久99| 韩国视频一区二区| 亚洲高清视频一区二区| 国产精品国产自产拍高清av| 成人免费精品视频| 欧美在线你懂得| 亚洲图片欧美色图| 国内成+人亚洲| 精品久久久久久久久久久久久久久 | 国产成人亚洲精品狼色在线| 亚洲春色综合另类校园电影| 国产欧美精品一区二区色综合朱莉| 久久电影网站中文字幕| 亚洲成人自拍视频| 综合在线观看色| 91片黄在线观看| 欧美一区三区二区| 精品伊人久久久久7777人| 亚洲精品视频一区二区三区| 综合av第一页| 国产欧美日韩一区二区三区| 久久久久久麻豆| 成人免费精品视频| 91精品国产美女浴室洗澡无遮挡| 免费人成在线不卡| 亚洲二区自拍| 亚洲一区二区av在线| 精品在线不卡| 亚洲图片欧美激情| 久久久99爱| 亚洲三级在线播放| 国产午夜精品在线| 国产精品无码永久免费888| 91在线视频免费观看| 日韩欧美国产一区在线观看| 国产麻豆午夜三级精品| 欧美久久久影院| 国产原创一区二区三区| 欧美疯狂做受xxxx富婆| 久久99久久99精品免视看婷婷 | 亚洲大片免费看| 亚洲国产婷婷香蕉久久久久久99| 一区二区三区在线影院| 蜜桃传媒视频第一区入口在线看| 亚洲国产精品ⅴa在线观看| 成人动漫在线观看视频| 欧美国产激情二区三区| 国产精品视频免费一区| 亚洲少妇屁股交4| 精品国产免费人成电影在线观... 精品国产免费久久久久久尖叫 | 狠狠色狠狠色综合日日91app| 亚洲欧美日产图| 视频一区在线视频| 欧美日韩在线精品一区二区三区激情 | 国产精品久久久久久久久免费桃花 | 亚洲欧洲日韩一区二区三区| 精品视频一区二区三区四区| 中文字幕一区二区在线观看| 日本不卡一区二区三区视频| 亚洲观看高清完整版在线观看| 色综合久久88色综合天天6| 久草中文综合在线| 精品日韩一区二区| 精品一区二区三区免费毛片| 午夜欧美在线一二页| 欧美日韩激情一区二区三区| 99视频精品免费视频| 亚洲免费在线视频| 91国产丝袜在线播放| 粉嫩av亚洲一区二区图片| 日本一区二区三区在线不卡| 免费看国产精品一二区视频| 日韩成人午夜精品| 91精品在线免费观看| 97免费资源站| 亚洲成人黄色影院| 欧美日本国产一区| 波多野结衣精品久久| 亚洲人成人一区二区在线观看| 亚洲伊人婷婷| 成人a区在线观看| 国产精品萝li| 最近看过的日韩成人| 国产成人丝袜美腿| 欧美国产激情二区三区| 一本到高清视频免费精品| 成人自拍视频在线观看| √…a在线天堂一区| 欧美中文一区二区三区| 91在线免费播放| 秋霞午夜鲁丝一区二区老狼| 久久精品人人做人人爽97| 制服国产精品| 国产精品国产三级国产专区53| 奇米综合一区二区三区精品视频| 久久久精品免费网站| 91福利区一区二区三区| 国产91视觉| 麻豆成人av在线| 国产精品久久久久久久久晋中| 欧美午夜影院一区| 久久av一区二区三区亚洲| 国内精品伊人久久久久av影院| 国产精品乱码一区二区三区软件| 91久久国产综合久久| 国产一区免费视频| 国产a久久麻豆| 日韩一区精品字幕| 国产欧美日韩精品在线| 欧美日韩国产综合视频在线观看 | 视频一区免费观看| 亚洲一区二区三区四区在线免费观看| 制服丝袜日韩国产| 午夜精品一区二区在线观看| 91精品婷婷国产综合久久蝌蚪| 久久av老司机精品网站导航| 亚洲激情图片小说视频| 久久久久久亚洲综合影院红桃| 欧美少妇性性性| 亚洲欧美日韩另类精品一区二区三区 | 亚洲视频香蕉人妖| 精品福利二区三区| 欧美日韩三级视频| 亚洲一区二区精品在线| 精品一区在线播放| 91网站最新网址| 国产福利电影一区二区三区| 日韩 欧美一区二区三区| 自拍偷拍国产亚洲| 国产日韩欧美电影| 精品久久久久久无| 欧美久久一二三四区| 在线免费观看日韩欧美| 亚洲国产精品www| 欧美一级日本a级v片| 国产三区精品| 粉嫩av一区二区三区免费观看| 国产91在线观看丝袜| 久久精品国产精品亚洲精品| 五月天激情综合| 亚洲一区二区欧美日韩| 亚洲另类在线制服丝袜| 综合分类小说区另类春色亚洲小说欧美| 久久婷婷成人综合色| 欧美一区二区精品久久911| 欧美人伦禁忌dvd放荡欲情| 欧美日韩综合在线免费观看| 中文字幕一区二区三区四区五区| 日本一区二区三区精品视频| 欧美日韩系列| 五月天丁香综合久久国产| 久久亚洲高清| 日韩欧美视频一区二区三区四区| 欧美日韩日本网|