Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
USB Type-C donanımınız USB Type-C veya Power Delivery (PD) fiziksel katmanını uyguluyor ancak Power Delivery için gereken durum makinelerini uygulamıyorsa, usb Type-C bağlantı noktası denetleyicisi sürücüsü yazmanız gerekir.
Windows 10, sürüm 1703'te USB Type-C mimarisi, USB Type-C veya Power Delivery (PD) fiziksel katmanını uygulayan ancak karşılık gelen pd ilkesi altyapısına veya protokol katmanı uygulamasına sahip olmayan donanım tasarımlarını destekleyecek şekilde geliştirilmiştir. Bu tasarımlar için Windows 10 sürüm 1703, "USB Bağlayıcı Yöneticisi Type-C Bağlantı Noktası Denetleyicisi Arabirim Sınıfı Uzantısı" (UcmTcpciCx) adlı yeni bir sınıf uzantısı aracılığıyla yazılım tabanlı bir PD ilke altyapısı ve cihaz ilkesi yöneticisi sağlar. IHV veya OEM/ODM tarafından yazılan bir istemci sürücüsü, UcmTcpciCx'teki PD ilke altyapısı ve cihaz ilkesi yöneticisinin çalışması için gereken donanım olayları hakkında bilgi sağlamak üzere UcmTcpciCx ile iletişim kurar. Bu iletişim, bu makalede ve başvuru bölümünde açıklanan bir dizi programlama arabirimi aracılığıyla etkinleştirilir.
UcmTcpciCx sınıf uzantısı kendisi UcmCx'in istemci sürücüsüdür. Güç sözleşmeleri ve veri rolleri hakkındaki ilke kararları UcmCx'te alınıp UcmTcpciCx'e iletilir. UcmTcpciCx bu ilkeleri uygular ve UcmTcpciCx istemci sürücünüz tarafından sağlanan bağlantı noktası denetleyicisi arabirimini kullanarak Type-C ve PD durum makinelerini yönetir.
Özet
- UcmTcpci sınıf uzantısı tarafından sağlanan hizmetler
- İstemci sürücüsünün beklenen davranışı
Resmi belirtimler
- USB Type-C Port Denetleyici Arayüz Spesifikasyonu
- USB 3.1 ve USB Type-C belirtimleri
- USB Güç Dağıtımı
Önemli API'ler
USB Type-C Port Denetleyici Arayüz sürücü sınıfı uzantıları referansı
UcmTcpciCx istemci sürücüsü şablonu
UcmTcpciCx istemci sürücüsü şablonu
Başlamadan önce
Donanımınızın veya üretici yazılımınızın PD durum makinesini uygulayıp uygulamadığına bağlı olarak yazmanız gereken sürücü türünü belirleyin. Daha fazla bilgi için bkz. USB Type-C bağlayıcıları için Windows sürücüleri geliştirme.
Masaüstü sürümleri için Windows 10'u (Home, Pro, Enterprise ve Education) bir USB Type-C bağlayıcısı ile hedef bilgisayarınıza veya Windows 10 Mobile'a yükleyin.
Geliştirme bilgisayarınıza en son Windows Sürücü Seti'ni (WDK) yükleyin. Set, istemci sürücüsünü yazmak için gerekli üst bilgi dosyalarına ve kitaplıklarına sahiptir, özellikle de şunları yapmanız gerekir:
- Saplama kitaplığı( UcmTcpciCxStub.lib). Kitaplık, istemci sürücüsü tarafından yapılan çağrıları çevirir ve bunları sınıf uzantısına geçirir.
- Başlık dosyası, UcmTcpciCx.h.
İstemci sürücüsü çekirdek modunda çalışır ve KMDF 1.15 kitaplığına bağlanır.
İstemci sürücüsünün uyarıları destekleyip desteklemediğine karar verin.
Bağlantı noktası denetleyicinizin TCPCI uyumlu olması gerekmez. Arabirim, herhangi bir Type-C bağlantı noktası denetleyicisinin özelliklerini yakalar. TCPCI uyumlu olmayan donanımlar için UcmTcpciCx istemci sürücüsü yazmak, TCPCI belirtimindeki yazmaçların ve komutların anlamlarını donanımınkilerle eşlemeyi içerir.
TCPCI denetleyicilerinin çoğu I2C bağlantılıdır. İstemci sürücünüz, donanımla iletişim kurmak için bir seri çevre yolu (SPB) bağlantı kaynağı ve kesme çizgisi kullanır. Sürücü SPB Framework Uzantısı (SpbCx) programlama arabirimini kullanır. Şu makaleleri okuyarak SpbCx hakkında bilgi sahibi olun:
- [Basit Çevre Yolu (SPB) Sürücü Tasarım Kılavuzu]
- [SPB sürücü programlama referansı]
Windows Driver Foundation (WDF) hakkında bilgi sahibi olun. Önerilen okuma: Penny Orwick ve Guy Smith'in yazdığı Windows Driver Foundation ile Sürücü Geliştirme.
UcmTcpci sınıf uzantısının davranışı
Durum makinesi yürütmesinin bir parçası olarak UcmTcpciCx, bağlantı noktası denetleyicisine IOCTL istekleri gönderir. Örneğin, PD mesajlaşmasında, iletme arabelleğinin ayarlanması için bir IOCTL_UCMTCPCI_PORT_CONTROLLER_SET_TRANSMIT_BUFFER isteği gönderir. Bu istek (TRANSMIT_BUFFER) istemci sürücüsüne devredilir. Sürücü daha sonra iletim arabelleği sınıf uzantısı tarafından sağlanan ayrıntılarla ayarlar.
UcmTcpciCx, güç sözleşmeleri, veri rolleri vb. hakkında ilkeler uygular.
İstemci sürücüsünün beklenen davranışı
UcmTcpciCx istemci sürücüsünün şu şekilde olması beklenir:
Güç politikasının sahibi olun. UcmTcpciCx, bağlantı noktası denetleyicisinin güç yönetimine katılmaz.
UcmTcpciCx'ten alınan istekleri donanım okuma veya yazma komutlarına çevirin. DPM, donanım aktarımının tamamlanmasını beklemeyi engelleyemediğinden komutların zaman uyumsuz olması gerekir.
Çerçeve isteği nesnelerini içeren bir çerçeve kuyruğu nesnesi sağlayın. UcmTcpci sınıf uzantısının istemci sürücüsüne göndermek istediği her istek için, uzantı sürücünün kuyruk nesnesine bir istek nesnesi ekler. Sürücü isteği işlemeyi bitirdiğinde WdfRequestComplete'i çağırır. İstekleri zamanında tamamlamak istemci sürücüsünün sorumluluğundadır.
Bağlantı noktası denetleyicisinin özelliklerini bulun ve rapor edin. Bu özellikler, bağlantı noktası denetleyicisinin çalışabileceği roller (yalnızca Kaynak, Yalnızca havuz, DRP gibi) gibi bilgileri içerir. Bununla birlikte, bağlayıcının (Yetenek Deposu hakkında nota bakın) ve sistemin bir bütün olarak USB Type-C ve PD ilkesini düzgün bir şekilde uygulamak için DPM'nin bilmesi gereken başka özellikleri de vardır. Örneğin DPM'nin bağlantı noktası iş ortağına tanıtması için sistemin/bağlayıcının kaynak özelliklerini bilmesi gerekir.
Yetenek Deposu
İstemci sürücüsüyle ilgili özelliklere ek olarak, ek bilgiler Yetenek Deposu olarak adlandırılan sistem genel konumundan gelir. Bu sistem genel Yetenek Deposu ACPI'de depolanır. Bu, sistemin ve DPM'nin uygulanacak ilkeleri belirlemek için kullandığı USB Type-C bağlayıcılarının özelliklerinin statik bir açıklamasıdır.
Sistem özelliklerinin açıklamasını bağlantı noktası denetleyicileri için istemci sürücüsünden ayırarak, tasarım bir sürücünün farklı özelliklere sahip sistemlerde kullanılmasını sağlar. Yetenek Deposu ile UcmTcpciCx değil UcmCx arabirimleri. UcmTcpciCx (veya istemci sürücüsü) Yetenek Deposu ile etkileşim kurmaz.
Uygun olduğunda, Yetenek Deposu'ndan alınan bilgiler doğrudan bağlantı noktası denetleyicisi istemci sürücüsünden gelen bilgileri geçersiz kılar. Örneğin, bir bağlantı noktası denetleyicisi yalnızca havuz işlemi yapabilir ve istemci sürücüsü bu bilgileri bildirir. Ancak, sistemin geri kalanı Yalnızca havuz işlemi için doğru yapılandırılmamış olabilir. Bu durumda, sistem üreticisi bağlayıcıların Yetenek Deposu'nda Yalnızca kaynak işlemi yapabileceğini bildirebilir. Yetenek Deposu'ndaki ayar, sürücü tarafından bildirilen bilgiden önceliklidir.
Uyarılarla ilgili tüm ilgili verileri UcmTcpciCx'e bildirin.
Opsiyonel. Alternatif bir moda girildikten/çıkıldıktan sonra bazı ek işlemler gerçekleştirin. Sürücü, IOCTL istekleri aracılığıyla sınıf uzantısı tarafından bu durumlar hakkında bilgilendirilir.
İstemci sürücüsünü UcmTcpciCx ile kaydetme
Örnek başvuru: içinde Device.cppbkzEvtPrepareHardware. .
EVT_WDF_DRIVER_DEVICE_ADD uygulamanızda UcmTcpciDeviceInitInitialize öğesini çağırarak WDFDEVICE_INIT opak yapısını başlatın. çağrısı, istemci sürücüsünü çerçeveyle ilişkilendirir.
Çerçeve cihaz nesnesini (WDFDEVICE) oluşturduktan sonra, istemci dalıcısını UcmTcpciCx ile kaydetmek için UcmTcpciDeviceInitialize çağrısı yapın.
Bağlantı noktası denetleyicisi donanımına I2C iletişim kanalını başlatma
Örnek başvuru: Device.cpp içinde EvtCreateDevice bkz.
EVT_WDF_DEVICE_PREPARE_HARDWARE uygulamanızda, bir iletişim kanalı açmak için donanım kaynaklarını okuyun. Bu, PD özelliklerini almak ve uyarılar hakkında bildirim almak için gereklidir.
TCPCI denetleyicilerinin çoğu I2C bağlantılıdır. Başvuru örneğinde, istemci sürücüsü SPB Framework Uzantısı (SpbCx) programlama arabirimini kullanarak bir I2 kanalı açar.
İstemci sürücüsü WdfCmResourceListGetDescriptor'ı çağırarak donanım kaynaklarını numaralandırır.
Uyarılar kesinti olarak alınır. Bu nedenle, sürücü bir çerçeve kesme nesnesi oluşturur ve uyarıları işleyen ISR'yi kaydeder. ISR, donanım erişimi tamamlanana kadar engelleyen donanım okuma ve yazma işlemleri gerçekleştirir. DIRQL'de bekleme kabul edilemez olduğundan, sürücü ISR'yi düşük öncelikli seviyede gerçekleştirir.
Bağlantı noktası denetleyicisinin Type-C ve PD özelliklerini başlatma
Örnek başvuru: Device.cpp içinde EvtDeviceD0Entry bkz.
EVT_WDF_DEVICE_D0_EXIT uygulamanızda,
Bağlantı noktası denetleyicisi donanımıyla iletişim kurun ve çeşitli yazmaçları okuyarak cihaz tanımlama ve özelliklerini alın.
UCMTCPCI_PORT_CONTROLLER_IDENTIFICATION ve UCMTCPCI_PORT_CONTROLLER_CAPABILITIES'i alınan bilgilerle başlatın.
Önceki bilgilerle UCMTCPCI_PORT_CONTROLLER_CONFIG yapısını başlatmak için, başlatılan yapı bloklarını UCMTCPCI_PORT_CONTROLLER_CONFIG_INIT'e geçirin.
Bağlantı noktası denetleyicisi nesnesini oluşturmak ve UCMTCPCIPORTCONTROLLER tutamacını almak için UcmTcpciPortControllerCreate çağrısı yapın.
UcmTcpciCx'ten istek almak için bir çerçeve kuyruğu nesnesi ayarlama
Örnek başvuru: EvtDeviceD0Entry içinde Device.cpp ve HardwareRequestQueueInitialize içinde Queue.cpp bölümüne bakın.
EVT_WDF_DEVICE_D0_EXIT uygulamanızda WdfIoQueueCreate çağırarak bir çerçeve kuyruğu nesnesi oluşturun. Bu çağrıda UcmTpciCx tarafından gönderilen IOCTL isteklerini işlemek için geri çağırma uygulamanızı kaydetmeniz gerekir. İstemci sürücüsü güçle yönetilen bir kuyruk kullanabilir.
Type-C ve PD durum makinelerinin yürütülmesi sırasında UcmTpciCx, yürütülmek üzere istemci sürücüsüne komutlar gönderir. UcmTcpciCx, aynı anda en fazla bir bekleyen port denetleyici isteği garanti eder.
Yeni çerçeve kuyruğu nesnesini UcmTpciCx ile kaydetmek için UcmTcpciPortControllerSetHardwareRequestQueue çağrısı yapın. Bu çağrı başarılı olduktan sonra UcmTcpciCx, sürücüden eylem gerektirdiğinde çerçeve kuyruğu nesnelerini (WDFREQUEST) bu kuyruğa yerleştirir.
Bu IOCTL'leri işlemek için EvtIoDeviceControl geri çağırma işlevini uygulayın.
| Denetim Kodu | Açıklama |
|---|---|
| IOCTL_UCMTCPCI_PORT_CONTROLLER_GET_STATUS | Evrensel Seri Veri Yolu Type-C Bağlantı Noktası Denetleyicisi Arabirim Belirtimi'ne göre tüm durum kayıt değerlerini alır. İstemci sürücüsünün CC_STATUS, POWER_STATUS ve FAULT_STATUS yazmaçlarının değerlerini alması gerekir. |
| IOCTL_UCMTCPCI_PORT_CONTROLLER_GET_CONTROL | Evrensel Seri Veri Yolu Type-C Bağlantı Noktası Denetleyicisi Arabirim Belirtimi'ne göre tanımlanan tüm denetim yazmaçlarının değerlerini alır. |
| IOCTL_UCMTCPCI_PORT_CONTROLLER_SET_CONTROL | Evrensel Seri Veri Yolu Type-C Bağlantı Noktası Denetleyicisi Arayüz Belirtimi'ne göre tanımlanan kontrol yazmacının değerini ayarlar. |
| IOCTL_UCMTCPCI_PORT_CONTROLLER_SET_TRANSMIT | TRANSMIT Yazmaçı, Evrensel Seri Veri Yolu Type-C Bağlantı Noktası Denetleyicisi Arabirim Belirtimi'ne göre tanımlandığı şekilde ayarlanır. |
| IOCTL_UCMTCPCI_PORT_CONTROLLER_SET_TRANSMIT_BUFFER | Evrensel Seri Veri Yolu (USB) Type-C Port Denetleyici Arayüzü Spesifikasyonu'na göre tanımlanan TRANSMIT_BUFFER Yazmaç değerini ayarlar. |
| IOCTL_UCMTCPCI_PORT_CONTROLLER_SET_RECEIVE_DETECT | Evrensel Seri Veri Yolu Type-C Bağlantı Noktası Denetleyicisi Arabirim Belirtimi'ne göre tanımlanan RECEIVE_DETECT Yazmaç değerini ayarlar. |
| IOCTL_UCMTCPCI_PORT_CONTROLLER_SET_CONFIG_STANDARD_OUTPUT | Evrensel Seri Veri Yolu Type-C Bağlantı Noktası Denetleyicisi Arabirim Belirtimi'ne göre tanımlanan CONFIG_STANDARD_OUTPUT Yazmaç değerini ayarlar. |
| IOCTL_UCMTCPCI_PORT_CONTROLLER_SET_COMMAND | Evrensel Seri Veri Yolu Type-C Bağlantı Noktası Denetleyicisi Arabirim Belirtimi'nde tanımlandığı gibi bir komut kaydının değerini ayarlar. |
| IOCTL_UCMTCPCI_PORT_CONTROLLER_SET_MESSAGE_HEADER_INFO | Evrensel Seri Veri Yolu (USB) Type-C Port Denetleyici Arabirim Belirtimi'ne göre tanımlanan MESSAGE_HEADER_INFO Yazmaç değerini ayarlar. |
| IOCTL_UCMTCPCI_PORT_CONTROLLER_ALTERNATE_MODE_ENTERED | Sürücünün diğer görevleri gerçekleştirebilmesi için istemci sürücüsüne alternatif bir mod girildiğini bildirir. |
| IOCTL_UCMTCPCI_PORT_CONTROLLER_ALTERNATE_MODE_EXITED | Sürücünün diğer görevleri gerçekleştirebilmesi için istemci sürücüsüne alternatif moddan çıkıldığını bildirir. |
| IOCTL_UCMTCPCI_PORT_CONTROLLER_DISPLAYPORT_CONFIGURED | İstemci sürücüsüne, sürücünün diğer görevleri gerçekleştirebilmesi için iş ortağı cihazında DisplayPort alternatif modunun pin atamasıyla yapılandırıldığını bildirir. |
| IOCTL_UCMTCPCI_PORT_CONTROLLER_DISPLAYPORT_HPD_STATUS_CHANGED | İstemci sürücüyü DisplayPort bağlantısının sıcak takma algılama durumunun değiştiği konusunda bilgilendirir, böylece sürücü diğer görevleri yerine getirebilir. |
- UcmTcpciCx'e bağlantı noktası denetleyicisini başlatmasını bildirmek için UcmTcpciPortControllerStart'ı çağırın. UcmTcpciCx, USB Type-C ve Güç Teslimi denetimini üstlenir. Bağlantı noktası denetleyicisi başlatıldıktan sonra UcmTcpciCx, istekleri donanım isteği kuyruğuna yerleştirmeye başlayabilir.
Bağlantı noktası denetleyicisi donanımından gelen uyarıları işleme
Örnek başvuru: ProcessAndSendAlerts içindeki Alert.cpp'e bakın.
İstemci sürücüsünün bağlantı noktası denetleyicisi donanımından alınan uyarıları (veya olayları) işlemesi ve olayla ilgili verilerle UcmTcpciCx'e göndermesi gerekir.
Bir donanım uyarısı oluştuğunda, bağlantı noktası denetleyicisi donanımı ALERT pin'ini yüksek düzeye yönlendirir. Bu durum, istemci sürücüsünün 2. adımda kayıtlı ISR'sinin çağrılmasına neden olur. Rutini, PASSIVE_LEVEL'de donanım kesintisini yönetir. Yordam, bir kesmenin bağlantı noktası denetleyicisi donanımından gelen bir uyarı olup olmadığını belirler; bu durumda uyarının işlenmesini tamamlar ve UcmTcpciPortControllerAlert çağrısı yaparak UcmTcpciCx'e bildirir.
UcmTcpciPortControllerAlert çağrılmadan önce, istemci uyarıyla ilgili tüm ilgili verileri UCMTCPCI_PORT_CONTROLLER_ALERT_DATA bir yapıya eklemekle sorumludur. İstemci, donanımın aynı anda birden çok uyarı onaylama olasılığı olduğundan etkin olan tüm uyarıların bir dizisini sağlar.
Cc Durumu'nda değişiklik bildirecek örnek görev akışı aşağıda verilmiştir.
İstemci bir donanım uyarısı alır.
İstemci ALERT yazmaçını okur ve etkin olan uyarı türünü belirler.
İstemci CC STATUS yazmaçını okur ve UCMTCPCI_PORT_CONTROLLER_ALERT_DATA'da CC STATUS yazmaç içeriğini açıklar. Sürücü, AlertType üyesini UcmTcpciPortControllerAlertCCStatus olarak ve register'ın CCStatus üyesini ayarlar.
İstemci, dizi donanım uyarılarını UcmTcpciCx'e göndermek için UcmPortControllerAlert'ı çağırır.
İstemci uyarıyı temizler (bu, istemci uyarı bilgilerini aldıktan sonra herhangi bir zamanda gerçekleşebilir)
UcmTcpciCx'ten alınan işlem istekleri
Örnek başvuru: Bkz. PortControllerInterface.cpp
Durum makinesinin yürütülmesinin bir parçası olarak, UcmTcpciCx'in istekleri bağlantı noktası denetleyicisine göndermesi gerekir. Örneğin, TRANSMIT_BUFFER ayarlanması gerekir. Bu istek istemci sürücüsüne devredilir. Sürücü, UcmTcpciCx tarafından sağlanan ayrıntılarla iletim arabelleğini ayarlar. Bu isteklerin çoğu istemci sürücüsü tarafından bir donanım okuma veya yazma işlemine çevrilir. DPM bir donanım aktarımının tamamlanmasını beklemeyi engelleyemediğinden komutların zaman uyumsuz olması gerekir.
UcmTcpciCx, komutları istemci sürücüsünden gereken get/set işlemini açıklayan G/Ç Denetim Kodu olarak gönderir. İstemci sürücüsünün kuyruk kurulumunda, sürücü kuyruğunu UcmTcpciCx ile kaydetti. UcmTcpciCx, sürücüden işlem gerektirdiği kuyruğa çerçeve isteği nesneleri yerleştirmeye başlar. G/Ç Denetimi kodları, 4. adımdaki tabloda listelenir.
İstekleri zamanında tamamlamak istemci sürücüsünün sorumluluğundadır.
İstemci sürücüsü, istenen işlemi tamamladığında tamamlanma durumuyla çerçeve isteği nesnesinde WdfRequestComplete'i çağırır.
İstemci sürücüsünün donanım işlemini gerçekleştirmek için başka bir sürücüye G/Ç isteği göndermesi gerekebilir. Örneğin, örnekte, sürücü I2C bağlantılı bağlantı noktası denetleyicisine bir SPB isteği gönderir. Bu durumda, istek nesnesi WDM IRP'de doğru yığın konumu sayısına sahip olmadığından sürücü UcmTcpciCx'ten aldığı çerçeve isteği nesnesini iletemez. İstemci sürücüsünün başka bir çerçeve isteği nesnesi oluşturması ve başka bir sürücüye iletmesi gerekir. İstemci sürücüsü, UcmTcpciCx'ten her istek aldığında bir tane oluşturmak yerine başlatma sırasında ihtiyaç duyduğu istek nesnelerini önceden yerleştirebilir. UcmTcpciCx herhangi bir zamanda yalnızca bir isteğin geri alınacağını garanti ettiğinden bu mümkündür.