手機的充電接口將統(tǒng)一使用USB Type-C的,它的尺寸小,又纖薄,傳輸速度,不用分方向正反都可以插,借電能力也強,擴展性也不錯,東坡這里附上USB Type-C驅(qū)動程序下載,下面還附上了制作教程,有興趣的可以試一試。
USB Type-C和USB3.1的區(qū)別
USB 3.1是一個行業(yè)標(biāo)準(zhǔn),該標(biāo)準(zhǔn)由英特爾等大公司發(fā)起。USB 3.1最大的特點就是數(shù)據(jù)傳輸極為迅速,理論上速度可以達到10Gbps。而USB Type-C則是一種連接器的規(guī)范,由Type-C插頭和Type-C插座組成。
在最新的USB 3.1標(biāo)準(zhǔn)中,有三種接口樣式,一個是Type-A(即Standard-A,傳統(tǒng)計算機上最常見的USB接口樣式),一個是Type-B(既Micro-B,目前主流Android智能手機使用的接口樣式),另外一個就是Type-C(即上面提到的全新設(shè)計的接口樣式)。
那么我們應(yīng)該就能很容易理解了。雖然USB Type-C是基于USB 3.1進行設(shè)計的,但這并不意味著使用這種連接方式的設(shè)備就一定都是支持USB 3.1標(biāo)準(zhǔn)的;而與我們所想的正相反的是,對于較為老舊的USB 3.0 Type-A接口的設(shè)備來說,卻是能夠兼容USB 3.1標(biāo)準(zhǔn)的。
編寫 USB Type-C 連接器驅(qū)動程序
UCM 通過使用 WDF 類擴展客戶端驅(qū)動程序模型進行設(shè)計。類擴展 (UcmCx) 是一個 Microsoft 提供的 WDF 驅(qū)動程序,它提供了客戶端驅(qū)動程序可以調(diào)用的接口以報告有關(guān)連接器的信息。UCM 客戶端驅(qū)動程序使用連接器的硬件接口,并保持類擴展注意發(fā)生在控制器上的事件。相反,類擴展調(diào)用客戶端驅(qū)動程序?qū)崿F(xiàn)的回調(diào)函數(shù)來響應(yīng)操作系統(tǒng)事件。
若要啟用系統(tǒng)上的 USB Type-C 連接器,則必須編寫客戶端驅(qū)動程序。
開始之前...
安裝 適用于你的開發(fā)計算機的最新 Windows 驅(qū)動程序工具包 (WDK)。該工具包帶有編寫 UCM 客戶端驅(qū)動程序所需的頭文件和庫,具體來說,你將需要:
你可以編寫可在用戶模式或內(nèi)核模式下運行的 UCM 客戶端驅(qū)動程序。對于用戶模式,它綁定了 UMDF 2.x 庫;對于內(nèi)核模式,它為 KMDF 1.15。對于任意一種模式,編程接口都相同。
存根庫,(UcmCxstub.lib)。該庫將轉(zhuǎn)換由客戶端驅(qū)動程進行的調(diào)用,并將它們傳遞給 UcmCx。
頭文件,UcmCx.h。
確定你的客戶端驅(qū)動程序是否支持 USB Type-C 連接器和 USB 功率輸出的高級功能。
如果支持,你可以使用 USB Type-C 連接器、USB Type-C 擴展塢和附件以及 USB Type-C 充電器生成 Windows 設(shè)備?蛻舳蓑(qū)動程序?qū)蟾嬖试S操作系統(tǒng)實現(xiàn)關(guān)于系統(tǒng)中 USB 和電源消耗的策略的連接器事件。
在你的目標(biāo)計算機上安裝 Windows 10 桌面版(家庭版、專業(yè)版、企業(yè)版和教育版),或使用 USB Type-C 連接器安裝 Windows 10 移動版。
熟悉 UCM 以及它與其他 Windows 驅(qū)動程序交互的方式。請參閱體系結(jié)構(gòu):適用于 Windows 系統(tǒng)的 USB Type-C 設(shè)計。
熟悉 Windows 驅(qū)動程序基礎(chǔ) (WDF)。推薦閱讀:使用 Windows 驅(qū)動程序基礎(chǔ)開發(fā)驅(qū)動程序,由 Penny Orwick 和 Guy Smith 編寫。
UCM 類擴展提供的服務(wù)摘要
UCM 類擴展保持操作系統(tǒng)隨時了解數(shù)據(jù)和電源角色、充電級別和已協(xié)商的 PD 合約發(fā)生的更改。在客戶端驅(qū)動程序與硬件交互時,它必須通知類擴展這些更改發(fā)生的時間。類擴展提供了一組客戶端驅(qū)動程序可用來發(fā)送通知(本主題中已討論)的方法。下面是提供的服務(wù):
數(shù)據(jù)角色配置
在 USB Type-C 系統(tǒng)上,數(shù)據(jù)角色(主機或函數(shù))取決于連接器的 CC 引腳的狀態(tài)。你的客戶端驅(qū)動程序?qū)哪愕亩丝诳刂破髯x取 CC 行(請參閱基礎(chǔ)結(jié)構(gòu):Windows 系統(tǒng)的 USB Type-C 設(shè)計)狀態(tài),以確定該端口已解析為上行端口 (UFP) 還是下行端口 (DFP)。 它會將該信息報告給類擴展,以便它可以將當(dāng)前角色報告給 USB 角色切換驅(qū)動程序。
注意 USB 角色切換驅(qū)動程序在 Windows 10 移動版系統(tǒng)上使用。 在 Windows 10 桌面版系統(tǒng)上,類擴展和角色切換驅(qū)動程序之間的通信是可選的。此類系統(tǒng)可能不使用雙角色控制器,在此情況下,不使用角色切換驅(qū)動程序。
電源角色和充電
你的客戶端驅(qū)動程序?qū)⒆x取 USB Type-C 電流播發(fā),或與合作伙伴連接器協(xié)商 PD 電源合約。
在 Windows 10 移動版系統(tǒng)上,選擇相應(yīng)充電器的決策由軟件輔助?蛻舳蓑(qū)動程序會將合約信息報告給類擴展,以便它可以將充電級別發(fā)送至充電仲裁驅(qū)動程序 (CAD.sys)。CAD 選擇要使用的電流強度,并將充電級別信息轉(zhuǎn)發(fā)到電池子系統(tǒng)。
在 Windows 10 桌面版系統(tǒng)上,由硬件選擇相應(yīng)的充電器?蛻舳蓑(qū)動程序可以選擇獲取該信息,并將其轉(zhuǎn)發(fā)到類擴展;蛘,該邏輯可以由不同的驅(qū)動程序?qū)崿F(xiàn)。
數(shù)據(jù)和電源角色更改
在協(xié)商 PD 合約后,數(shù)據(jù)角色和電源角色可能會發(fā)生更改。這一更改可能由你的客戶端驅(qū)動程序或合作伙伴連接器引發(fā)。 客戶端驅(qū)動程序會將該信息報告給類擴展,以便它可以相應(yīng)地重新配置一些內(nèi)容。
數(shù)據(jù)和/或電源角色更新
操作系統(tǒng)可能會確定當(dāng)前數(shù)據(jù)角色不正確。 在此種情況下,類擴展將調(diào)用你的驅(qū)動程序的回調(diào)函數(shù),以執(zhí)行必要的角色交換操作。
客戶端驅(qū)動程序的預(yù)期行為
你的客戶端驅(qū)動程序負責(zé)執(zhí)行以下任務(wù):
檢測 CC 行上的變化,并確定合作伙伴的類型(如 UFP、DFP 等)。 為此,驅(qū)動程序必須實現(xiàn)完整的 Type-C 狀態(tài)機,如 USB Type-C 規(guī)范中所定義。
根據(jù)在 CC 行上檢測到的方向,配置你的 Mux。 這包括打開你的 PD 發(fā)射器/接收器,并處理和響應(yīng) PD 消息。 為此,驅(qū)動程序必須實現(xiàn)完整的 PD 接收器和發(fā)射器狀態(tài)機(如 USB 功率輸出 2.0 規(guī)范中定義)。
做出 PD 策略決策,如協(xié)商合約(作為源或接收器)、角色交換等。 客戶端驅(qū)動程序負責(zé)確定最合適的合約。
播發(fā)和協(xié)商備用模式,并在檢測到備用模式時配置 Mux?蛻舳蓑(qū)動程序負責(zé)確定要協(xié)商的備用模式。
對連接器的 VBus/VConn 控制。
1. 初始化 UCM 連接器對象 (UCMCONNECTOR)
UCM 連接器對象 (UCMCONNECTOR) 表示 USB Type-C 連接器,并且是 UCM 類擴展和客戶端驅(qū)動程序之間的主要句柄。該對象跟蹤連接器的操作模式和電源功能。
下面是客戶端驅(qū)動程序檢索連接器的 UCMCONNECTOR 句柄的序列摘要。調(diào)用 WdfDeviceCreate 后,在你的驅(qū)動程序的 EvtDriverDeviceAdd 回調(diào)函數(shù)中執(zhí)行這些任務(wù)來創(chuàng)建框架設(shè)備對象。
通過向 UCM_MANAGER_CONFIG 結(jié)構(gòu)傳遞引用來調(diào)用 UcmInitializeDevice。
在 UCM_MANAGER_CONFIG 結(jié)構(gòu)中,指定 UCM_CONNECTOR_TYPEC_CONFIG 結(jié)構(gòu)中 USB Type-C 連接器的初始化參數(shù)。這包括連接器的操作模式,無論它是下行端口、上行端口,還是支持雙重角色的端口。當(dāng)連接器是電源時,它還將指定 USB Type-C 電流強度?梢詫 USB Type-C 連接器進行設(shè)計,以便它可以充當(dāng) 3.5 毫米音頻插孔。如果硬件支持該功能,則必須相應(yīng)地初始化連接器對象。
在結(jié)構(gòu)中,還必須注冊客戶端驅(qū)動程序的回調(diào)函數(shù),以便處理數(shù)據(jù)角色。
此回調(diào)函數(shù)與由 UCM 類擴展調(diào)用的連接器對象相關(guān)聯(lián)。 此函數(shù)必須由客戶端驅(qū)動程序?qū)崿F(xiàn)。
EVT_UCM_CONNECTOR_SET_DATA_ROLE
當(dāng)連接到合作伙伴連接器時,將連接器的數(shù)據(jù)角色交換為指定的角色。
如果你的客戶端驅(qū)動程序想要支持 PD(即能夠處理連接器的功率輸出 2.0 硬件實現(xiàn)),還必須初始化 UCM_CONNECTOR_PD_CONFIG 結(jié)構(gòu),該結(jié)構(gòu)可指定 PD 初始化參數(shù)。這包括電源流,不管連接器是電源接收器還是電源。
在結(jié)構(gòu)中,還必須注冊客戶端驅(qū)動程序的回調(diào)函數(shù),以便處理電源角色。
此回調(diào)函數(shù)與由 UCM 類擴展調(diào)用的連接器對象相關(guān)聯(lián)。 此函數(shù)必須由客戶端驅(qū)動程序?qū)崿F(xiàn)。
EVT_UCM_CONNECTOR_SET_POWER_ROLE
當(dāng)連接到合作伙伴連接器時,將連接器的電源角色設(shè)置為指定的角色。
調(diào)用 UcmConnectorCreate 并檢索連接器的 UCMCONNECTOR 句柄。請確保在返回你的客戶端驅(qū)動程序的 EvtDevicePrepareHardware 之前調(diào)用此方法。
2. 報告合作伙伴連接器附加事件
當(dāng)檢測到與合作伙伴連接器連接時,客戶端驅(qū)動程序必須調(diào)用 UcmConnectorTypeCAttach 。此調(diào)用將通知 UCM 類擴展,從而進一步通知操作系統(tǒng)。此時,系統(tǒng)可以開始以 USB Type-C 級別充電。
UCM 類擴展也會通知 USB 角色切換驅(qū)動程序 (URS)。根據(jù)合作伙伴的類型,URS 配置主機角色或函數(shù)角色中的控制器。調(diào)用此方法之前,請確保你的系統(tǒng)上的 Mux 已正確配置。否則,如果系統(tǒng)處于函數(shù)角色中,它將以不正確的速度(高速而不是 SuperSpeed)連接。
3. 報告 USB Type-C 播發(fā)更改
在初始附加事件中,合作伙伴連接器會發(fā)送電流播發(fā)。如果合作伙伴是 USB Type-C 下行端口,播發(fā)將指定合作伙伴連接器的電流強度。否則,由 UCMCONNECTOR 句柄(本地連接器)表示的播發(fā)將指定本地連接器的電流強度。此初始播發(fā)可能會在連接的生存期內(nèi)發(fā)生更改。這些更改必須由客戶端驅(qū)動程序監(jiān)視。
如果本地連接器是電源接收器,并且電流播發(fā)發(fā)生更改,則客戶端驅(qū)動程序必須 檢測電流播發(fā)中的更改并將其報告給類擴展。在 Windows 10 移動版系統(tǒng)上,該信息由 CAD.sys 和電池子系統(tǒng)用于調(diào)整它從源抽取的電流量。若要將電流強度中的更改報告給類擴展,客戶端驅(qū)動程序必須調(diào)用UcmConnectorTypeCCurrentAdChanged。
4. 報告新協(xié)商的 PD 合約
如果你的連接器支持 PD,那么在初始附加事件后,將有 PD 消息在連接器及其合作伙伴連接器之間進行傳輸。在這兩個合作伙伴之間,PD 合約的協(xié)商將確定連接器可以吸收的或允許合作伙伴吸收的電流強度。每次 PD 合約發(fā)生更改時,客戶端驅(qū)動程序都必須調(diào)用這些方法,以便將更改報告給類擴展。
每當(dāng)客戶端驅(qū)動程序獲取來自合作伙伴的源功能播發(fā)(主動提供或其他方式)時,它都必須調(diào)用這些方法。本地連接器(接收器)僅在合作伙伴是源時從合伙伙伴處獲取主動提供的播發(fā)。此外,本地連接器可以從能夠成為源的合作伙伴(即使該合作伙伴當(dāng)前是接收器)顯式請求源功能。 通過向該合作伙伴發(fā)送Get_Source_Caps 消息來完成此交換。
調(diào)用 UcmConnectorPdPartnerSourceCaps 以報告由合作伙伴連接器播發(fā)的源功能。
調(diào)用 UcmConnectorPdConnectionStateChanged 以報告合約的詳細信息。在“請求數(shù)據(jù)對象”中對該合約進行了描述,如功率輸出 2.0 規(guī)范中所定義。
相反,每次本地連接器(源)向合作伙伴播發(fā)源功能時,客戶端驅(qū)動程序都必須調(diào)用這些方法。此外,當(dāng)本地連接器收到來自合作伙伴的 Get_Source_Caps 消息時,他必須使用本地連接器的源功能響應(yīng)。
調(diào)用 UcmConnectorPdSourceCaps 以報告由系統(tǒng)播發(fā)到合作伙伴連接器的源功能。
調(diào)用 UcmConnectorPdConnectionStateChanged 以報告當(dāng)前已協(xié)商的 PD 合約的連接功能。
5. 報告電池充當(dāng)狀態(tài)
如果充電級別不恰當(dāng),客戶端驅(qū)動程序可能會通知 UCM 類擴展。 類擴展會將此信息報告給操作系統(tǒng)。系統(tǒng)會使用此信息顯示一條用戶通知,即充電器未以最佳狀態(tài)給系統(tǒng)充電。 可通過以下方法來報告充電狀態(tài):
這些方法可指定充電狀態(tài)。如果報告的級別為 UcmChargingStateSlowCharging 或 UcmChargingStateTrickleCharging(請參閱UCM_CHARGING_STATE),操作系統(tǒng)將顯示用戶通知。
6. 報告 PR_Swap/DR_Swap 事件
如果連接器從合作伙伴接收電源角色 (PR_Swap) 或數(shù)據(jù)角色 (DR_Swap) 交換消息,則客戶端驅(qū)動程序必須通知 UCM 類擴展。
UcmConnectorDataDirectionChanged
在處理 PD DR_Swap 消息后,調(diào)用此方法。完成此調(diào)用后,操作系統(tǒng)會將新角色報告給 URS,這將刪除現(xiàn)有角色驅(qū)動程序,并為新角色加載驅(qū)動程序。
UcmConnectorPowerDirectionChanged
在處理 PD PR_Swap 消息后,調(diào)用此方法。在 PR_Swap 之后,需要重新協(xié)商 PD 合約?蛻舳蓑(qū)動程序必須通過調(diào)用步驟 4 中所述的方法報告該 PD 合約協(xié)商。
7. 實現(xiàn)回調(diào)函數(shù)來處理電源和數(shù)據(jù)角色交換請求
UCM 類擴展可能會收到更改連接器的數(shù)據(jù)或電源方向的請求。在此情況下,它將調(diào)用客戶端驅(qū)動程序的 EVT_UCM_CONNECTOR_SET_DATA_ROLE 和EVT_UCM_CONNECTOR_SET_POWER_ROLE 回調(diào)函數(shù)的實現(xiàn)(如果連接器實現(xiàn) PD)。客戶端驅(qū)動程序之前在調(diào)用 UcmConnectorCreate 時已注冊過這些函數(shù)。
客戶端驅(qū)動程序通過使用硬件接口執(zhí)行角色交換操作。
EVT_UCM_CONNECTOR_SET_DATA_ROLE
在回調(diào)實現(xiàn)中,客戶端驅(qū)動程序可以:
將 PD DR_Swap 消息發(fā)送到端口合作伙伴。
調(diào)用 UcmConnectorDataDirectionChanged 來通知類擴展該消息序列已成功或未成功完成。
EVT_UCM_CONNECTOR_SET_POWER_ROLE
在回調(diào)實現(xiàn)中,客戶端驅(qū)動程序可以:
調(diào)用UcmConnectorPowerDirectionChanged 來通知類擴展該消息序列已成功或未成功完成。
注意
客戶端驅(qū)動程序可以異步(即不是從回調(diào)線程)調(diào)用 UcmConnectorDataDirectionChanged 和 UcmConnectorPowerDirectionChanged。在典型的實現(xiàn)中,類擴展調(diào)用回調(diào)函數(shù),該回調(diào)函數(shù)導(dǎo)致客戶端驅(qū)動程序啟動硬件事務(wù)來發(fā)送消息。當(dāng)該事務(wù)完成時,硬件將通知驅(qū)動程序。驅(qū)動程序?qū)⒄{(diào)用這些方法來通知類擴展。
8.報告合作伙伴連接器分離事件
客戶端驅(qū)動程序必須在結(jié)束連接合作伙伴連接器時調(diào)用 UcmConnectorTypeCDetach 。此調(diào)用將通知 UCM 類擴展,從而進一步通知操作系統(tǒng)。
使用案例示例:已連接到電腦的移動設(shè)備
當(dāng)運行 Windows 10 移動版的設(shè)備通過 USB Type-C 連接連接到運行 Windows 10 桌面版的電腦時,操作系統(tǒng)將確保該移動設(shè)備是上行端口 (UFP),因為只有在此方向下 MTP 才能正常運行。 在此情況下,以下是數(shù)據(jù)角色更正的序列:
運行于移動設(shè)備上的客戶端驅(qū)動程序通過調(diào)用 UcmConnectorTypeCAttach 來報告一個附加事件,并且將合作伙伴連接器報告為下行端口 (UFP)。
客戶端驅(qū)動程序通過調(diào)用 UcmConnectorPdPartnerSourceCaps 和 UcmConnectorPdConnectionStateChanged 來報告 PD 合約。
UCM 類擴展將通知 USB 設(shè)備端驅(qū)動程序,從而使這些驅(qū)動程序響應(yīng)來自主機的枚舉。操作系統(tǒng)信息通過 USB 進行交換。
UCM 類擴展 UcmCx 將調(diào)用客戶端驅(qū)動程序的回調(diào)函數(shù)來更改角色:EVT_UCM_CONNECTOR_SET_DATA_ROLE 和EVT_UCM_CONNECTOR_SET_POWER_ROLE。
注意 如果兩臺 Windows 10 移動版設(shè)備互相連接,將不執(zhí)行角色交換,并且系統(tǒng)將通知用戶該連接無效。
- PC官方版
- 安卓官方手機版
- IOS官方手機版