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