Aracılığıyla paylaş


USB Type-C bağlayıcı sürücüsü yazma

Bu senaryolarda bir USB Type-C bağlayıcı sürücüsü yazmanız gerekir:

  • USB Type-C donanımınız güç teslimi (PD) durum makinesini işleme özelliğine sahipse. Aksi takdirde, usb Type-C bağlantı noktası denetleyicisi sürücüsü yazmayı göz önünde bulundurun. Daha fazla bilgi için bkz. USB Type-C bağlantı noktası denetleyicisi sürücüsü yazma.

  • Donanımınızda gömülü denetleyici yoksa. Aksi takdirde, Microsoft'un sağladığı yerleşik sürücüyü UcmUcsi.sysyükleyin. ACPI aktarımları için (bkz. UCSI sürücüsü) veya ACPI olmayan aktarımlar için bir UCSI istemci sürücüsü yazın.

Özet

  • Sınıf uzantısı ve istemci sürücüsü tarafından kullanılan UCM nesnesi
  • UCM sınıf uzantısı tarafından sağlanan hizmetler
  • İstemci sürücüsünün beklenen davranışı

Resmi belirtimler

Şunun için geçerlidir:

  • Windows 10

WDF sürümü

  • KMDF sürüm 1.15
  • UMDF sürüm 2.15

Önemli API'ler

USB Type-C bağlayıcısını yöneten USB bağlayıcı yöneticisini (UCM) ve bağlayıcı sürücüsünün beklenen davranışını açıklar.

UCM, WDF sınıf uzantısı-istemci sürücü modeli kullanılarak tasarlanmıştır. Sınıf uzantısı (UcmCx), istemci sürücüsünün bağlayıcı hakkındaki bilgileri bildirmek için çağırabileceği arabirimler sağlayan, Microsoft tarafından sağlanan bir WDF sürücüsüdür. UCM istemci sürücüsü, bağlayıcının donanım arabirimlerini kullanır ve sınıf uzantısını bağlayıcıda gerçekleşen olayların farkında tutar. Buna karşılık, sınıf uzantısı işletim sistemi olaylarına yanıt olarak istemci sürücüsü tarafından uygulanan geri çağırma işlevlerini çağırır.

Bir sistemde USB Type-C bağlayıcısını etkinleştirmek için istemci sürücüsünü yazmanız gerekir.

USB bağlayıcı yöneticisi .

Başlamadan önce

  • Geliştirme bilgisayarınıza en son Windows Sürücü Seti'ni (WDK) yükleyin. Set, UCM istemci sürücüsü yazmak için gerekli üst bilgi dosyalarına ve kitaplıklarına sahiptir, özellikle de şunları yapmanız gerekir:

    • Saptama kitaplığı( UcmCxstub.lib). Kitaplık, istemci sürücüsü tarafından yapılan çağrıları çevirir ve UcmCx'e geçirir.

    • Başlık dosyası, UcmCx.h.

      Kullanıcı modunda veya çekirdek modunda çalışan bir UCM istemci sürücüsü yazabilirsiniz. Kullanıcı modu için UMDF 2.x kitaplığıyla bağlanır; çekirdek modu için KMDF 1.15'tir. Programlama arabirimleri her iki mod için de aynıdır.

      ucm için Visual Studio yapılandırmasını .

  • İstemci sürücünüzün USB Type-C bağlayıcısının ve USB Güç Teslimigelişmiş özelliklerini destekleyip desteklemeyeceğine karar verin.

    Bu destek USB Type-C bağlayıcıları, USB Type-C takma birimleri ve aksesuarları ve USB Type-C şarj cihazları ile Windows cihazları oluşturmanıza olanak tanır. İstemci sürücüsü, işletim sisteminin sistemde USB ve güç tüketimiyle ilgili ilkeler uygulamasına olanak sağlayan bağlayıcı olaylarını bildirir.

  • 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.

  • UCM ve diğer Windows sürücüleriyle nasıl etkileşime geçtiğini öğrenin. Bkz. Mimarisi: Windows sistemiçin USB Type-C tasarımı.

  • 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.

UCM sınıf uzantısı tarafından sağlanan hizmetlerin özeti

UCM sınıf uzantısı, işletim sistemini veri ve güç rolündeki değişiklikler, ücretlendirme düzeyleri ve anlaşmaya varılan PD sözleşmesi hakkında bilgilendirilir. İstemci sürücüsü donanımla etkileşim kurarken, bu değişiklikler gerçekleştiğinde sınıf uzantısını bilgilendirmesi gerekir. Sınıf uzantısı, istemci sürücüsünün bildirimleri göndermek için kullanabileceği bir dizi yöntem sağlar (bu konuda ele alınmıştır). Sağlanan hizmetler şunlardır:

Veri rolü yapılandırması

USB Type-C sistemlerinde veri rolü (konak veya işlev), bağlayıcının CC pinlerinin durumuna bağlıdır. İstemci sürücünüz, bağlantı noktasının Yukarı Akışa Yönelik Bağlantı Noktası (UFP) veya Aşağı Akışa Yönelik Bağlantı Noktası (DFP) olarak çözülüp çözülmediğini belirlemek için bağlantı noktası denetleyicinizden CC hattı durumunu okur (bkz. Mimarisi: Windows sistemi için USB Type-C tasarımı). USB rol değiştirme sürücülerine geçerli rolü rapor edebilmesi için bu bilgileri sınıf uzantısına iletir.

Uyarı

USB rol değiştirme sürücüleri Windows 10 Mobile sistemlerinde kullanılır. Masaüstü sürümleri için Windows 10 sistemlerinde, sınıf uzantısı ile rol anahtarı sürücüleri arasındaki iletişim isteğe bağlıdır. Bu tür sistemler çift rol denetleyicisi kullanmayabilir ve bu durumda rol anahtarı sürücüleri kullanılmaz.

Güç yönetimi ve şarj

İstemci sürücünüz, USB Type-C mevcut reklamını okur veya iş ortağı bağlayıcısı ile bir PD güç anlaşması müzakere eder.

  • Windows 10 Mobile sisteminde, uygun şarj cihazını seçme kararı yazılım desteklidir. İstemci sürücü, ücretlendirme seviyelerini şarj anlaşmazlık çözümü sürücüsüne gönderebilmesi için sözleşme bilgilerini sınıf uzantısına bildirmektedir (CAD.sys). CAD, kullanılacak geçerli düzeyi seçer ve şarj düzeyi bilgilerini pil alt sistemine iletir.
  • Masaüstü sürümleri için Windows 10 sisteminde, donanım tarafından uygun şarj cihazı seçilir. İstemci sürücüsü bu bilgileri almayı ve sınıf uzantısına iletmeyi seçebilir. Alternatif olarak, bu mantık farklı bir sürücü tarafından uygulanabilir.

Veri ve güç rolü değişiklikleri

Bir PD sözleşmesi anlaşması yapıldıktan sonra veri rolleri ve güç rolleri değişebilir. Bu değişiklik istemci sürücünüz veya iş ortağı bağlayıcısı tarafından başlatılabilir. İstemci sürücüsü bu bilgileri sınıf uzantısına bildirir, böylece öğeleri uygun şekilde yeniden yapılandırabilir.

Veri ve/veya güç rolü güncelleştirmesi

İşletim sistemi, şu anki veri rolünün doğru olmadığı kararı verebilir. Bu durumda, sınıf uzantısı gerekli rol değiştirme işlemlerini gerçekleştirmek için sürücünüzün geri çağırma işlevini çağırır.

Microsoft tarafından sağlanan USB Type-C İlkesi Yöneticisi, USB Type-C bağlayıcılarının etkinliklerini izler. Windows, sürüm 1809, İlke Yöneticisi'ne bir istemci sürücüsü yazmak için kullanabileceğiniz bir dizi programlama arabirimi sunar. İstemci sürücüsü USB Type-C bağlayıcıları için ilke kararlarına katılabilir. Bu kümeyle, çekirdek modu dışarı aktarma sürücüsü veya kullanıcı modu sürücüsü yazmayı seçebilirsiniz. Daha fazla bilgi için bkz. USB İlke Yöneticisi Type-C istemci sürücüsü geliştirme.

İstemci sürücüsünün beklenen davranışı

İstemci sürücünüz aşağıdaki görevlerden sorumludur:

  • CC satırındaki değişiklikleri algılayın ve UFP, DFP ve diğerleri gibi iş ortağının türünü belirleyin. Bunu yapmak için sürücünün USB Type-C belirtiminde tanımlandığı gibi tam Type-C durum makinesini uygulaması gerekir.
  • Mux'unuzu CC satırında algılanan yönlendirmeye göre yapılandırın. Bu, PD vericinizi/alıcınızı açmayı ve PD iletilerini işlemeyi ve yanıtlamayı içerir. Bunu yapmak için sürücünün USB Güç Teslimi 2.0 belirtiminde tanımlandığı gibi tam PD alıcı ve verici durum makinelerini uygulaması gerekir.
  • PD politika kararları alın, örneğin bir sözleşmeyi müzakere edin (kaynak veya alıcı olarak), rol değişiklikleri yapın ve diğer kararlar. İstemci sürücüsü en uygun sözleşmeyi belirlemekle sorumludur.
  • Alternatif modları tanıtın ve pazarlık yapın, bir alternatif mod tespit edilirse Mux'ı yapılandırın. İstemci sürücüsü, pazarlık edilecek alternatif moda karar vermekten sorumludur.
  • Bağlayıcı üzerinde VBus/VConn denetimi.

1. UCM bağlayıcı nesnesini (UCMCONNECTOR) başlatın

UCM bağlayıcı nesnesi (UCMCONNECTOR), USB Type-C bağlayıcısını temsil eder ve UCM sınıf uzantısı ile istemci sürücüsü arasındaki ana tanıtıcıdır. nesnesi bağlayıcının çalışma modlarını ve güç kaynağını belirleme özelliklerini izler.

İstemci sürücüsünün bağlayıcı için bir UCMCONNECTOR tutamacını aldığı sıranın özeti şu şekildedir. Sürücünüzde bu görevleri gerçekleştirin

  1. UcmInitializeDevice, bir UCM_MANAGER_CONFIG yapı referansını geçirerek çağırın. sürücünün WdfDeviceCreateçağırmadan önce EVT_WDF_DRIVER_DEVICE_ADD geri çağırma işlevinde bu yöntemi çağırması gerekir.

  2. USB Type-C bağlayıcısı için başlatma parametrelerini UCM_CONNECTOR_TYPEC_CONFIG bir yapıda belirtin. Bu, aşağı akışa yönelik bir bağlantı noktası, yukarı akışa yönelik bağlantı noktası veya çift rol özellikli olup olmadığı gibi bağlayıcının çalışma modunu içerir. Bağlayıcı bir güç kaynağı olduğunda USB Type-C akım seviyelerini de belirtir. USB Type-C bağlayıcısı, 3,5 mm ses jakı gibi davranabilecek şekilde tasarlanabilir. Donanım özelliği destekliyorsa bağlayıcı nesnesi uygun şekilde başlatılmalıdır.

    Yapıda, veri rollerini işlemek için istemci sürücüsünün geri çağırma işlevini de kaydetmeniz gerekir.

    Bu geri çağırma işlevi, UCM sınıf uzantısı tarafından çağrılan bağlayıcı nesnesiyle ilişkilendirilir. Bu işlev istemci sürücüsü tarafından uygulanmalıdır.

    EVT_UCM_CONNECTOR_SET_DATA_ROLE bir iş ortağı bağlayıcısına eklendiğinde bağlayıcının veri rolünü belirtilen role değiştirir.

  3. İstemci sürücünüz PD özellikli olmak istiyorsa, yani bağlayıcının Power Delivery 2.0 donanım uygulamasını işlemek istiyorsanız, PD başlatma parametrelerini belirten bir UCM_CONNECTOR_PD_CONFIG yapısı da başlatmanız gerekir. Bu, bağlayıcının bir güç havuzu veya kaynak olup olmadığını içeren güç akışını içerir.

    Yapılandırmada, güç rollerini işlemek için istemci sürücüsünün geri çağırma işlevini de kaydetmeniz gerekir.

    Bu geri çağırma işlevi, UCM sınıf uzantısı tarafından çağrılan bağlayıcı nesnesiyle ilişkilendirilir. Bu işlev istemci sürücüsü tarafından uygulanmalıdır.

    EVT_UCM_CONNECTOR_SET_POWER_ROLE İş ortağı bağlayıcısına eklendiğinde bağlayıcının güç rolünü belirtilen role ayarlar.

  4. UcmConnectorCreate çağırın ve bağlaç için bir UCMCONNECTOR tanıtıcısı alın. İstemci sürücüsü WdfDeviceCreateçağırarak çerçeve cihaz nesnesini oluşturduktan sonra bu yöntemi çağırdığınızdan emin olun. Bu arama için uygun bir yer sürücünün EVT_WDF_DEVICE_PREPARE_HARDWARE veya EVT_WDF_DEVICE_D0_ENTRYolabilir.

EVT_UCM_CONNECTOR_SET_DATA_ROLE     EvtSetDataRole;

NTSTATUS
EvtDevicePrepareHardware(
    WDFDEVICE Device,
    WDFCMRESLIST ResourcesRaw,
    WDFCMRESLIST ResourcesTranslated
    )
{
    NTSTATUS status = STATUS_SUCCESS;
    PDEVICE_CONTEXT devCtx;
    UCM_MANAGER_CONFIG ucmCfg;
    UCM_CONNECTOR_CONFIG connCfg;
    UCM_CONNECTOR_TYPEC_CONFIG typeCConfig;
    UCM_CONNECTOR_PD_CONFIG pdConfig;
    WDF_OBJECT_ATTRIBUTES attr;
    PCONNECTOR_CONTEXT connCtx;

    UNREFERENCED_PARAMETER(ResourcesRaw);
    UNREFERENCED_PARAMETER(ResourcesTranslated);

    TRACE_FUNC_ENTRY();

    devCtx = GetDeviceContext(Device);

    if (devCtx->Connector)
    {
        goto Exit;
    }

    //
    // Initialize UCM Manager
    //
    UCM_MANAGER_CONFIG_INIT(&ucmCfg);

    status = UcmInitializeDevice(Device, &ucmCfg);
    if (!NT_SUCCESS(status))
    {
        TRACE_ERROR(
            "UcmInitializeDevice failed with %!STATUS!.",
            status);
        goto Exit;
    }

    TRACE_INFO("UcmInitializeDevice() succeeded.");

    //
    // Create a USB Type-C connector #0 with PD
    //
    UCM_CONNECTOR_CONFIG_INIT(&connCfg, 0);

    UCM_CONNECTOR_TYPEC_CONFIG_INIT(
        &typeCConfig,
        UcmTypeCOperatingModeDrp,
        UcmTypeCCurrentDefaultUsb | UcmTypeCCurrent1500mA | UcmTypeCCurrent3000mA);

    typeCConfig.EvtSetDataRole = EvtSetDataRole;

    UCM_CONNECTOR_PD_CONFIG_INIT(&pdConfig, UcmPowerRoleSink | UcmPowerRoleSource);

    connCfg.TypeCConfig = &typeCConfig;
    connCfg.PdConfig = &pdConfig;

    WDF_OBJECT_ATTRIBUTES_INIT_CONTEXT_TYPE(&attr, CONNECTOR_CONTEXT);

    status = UcmConnectorCreate(Device, &connCfg, &attr, &devCtx->Connector);
    if (!NT_SUCCESS(status))
    {
        TRACE_ERROR(
            "UcmConnectorCreate failed with %!STATUS!.",
            status);
        goto Exit;
    }

    connCtx = GetConnectorContext(devCtx->Connector);

    UcmEventInitialize(&connCtx->EventSetDataRole);

    TRACE_INFO("UcmConnectorCreate() succeeded.");

Exit:

    TRACE_FUNC_EXIT();
    return status;
}

2. İş ortağı bağlayıcı takma etkinliğini bildirin

bir iş ortağı bağlayıcısına bağlantı algılandığında istemci sürücüsünün UcmConnectorTypeCAttach çağırması gerekir. Bu çağrı, işletim sistemine daha fazla bilgi veren UCM sınıf uzantısını bildirir. Bu noktada sistem USB Type-C seviyelerinde şarj etmeye başlayabilir.

UCM sınıf uzantısı, USB rol anahtarı sürücülerine (URS) de bilgi verir. İş ortağının türüne bağlı olarak, URS denetleyiciyi konak rolünde veya işlev rolünde yapılandırmaktadır. Bu yöntemi çağırmadan önce sisteminizdeki Mux'un doğru yapılandırıldığından emin olun. Aksi takdirde, sistem işlev rolündeyse yanlış hızda bağlanır (SuperSpeed yerine yüksek hızlı).

        UCM_CONNECTOR_TYPEC_ATTACH_PARAMS attachParams;

        UCM_CONNECTOR_TYPEC_ATTACH_PARAMS_INIT(
            &attachParams,
            UcmTypeCPortStateDfp);
        attachParams.CurrentAdvertisement = UcmTypeCCurrent1500mA;

        status = UcmConnectorTypeCAttach(
                    Connector,
                    &attachParams);
        if (!NT_SUCCESS(status))
        {
            TRACE_ERROR(
                "UcmConnectorTypeCAttach() failed with %!STATUS!.",
                status);
            goto Exit;
        }

        TRACE_INFO("UcmConnectorTypeCAttach() succeeded.");

3. USB Type-C tanıtım değişikliklerini bildirin

İlk bağlantı olayında, iş ortağı bağlayıcısı güncel bir reklam gönderir. Reklam, iş ortağı USB Type-C aşağı akışa yönelik bir bağlantı noktası olduğunda, iş ortağı bağlayıcısının geçerli düzeyini belirtiyorsa. Aksi takdirde, tanıtım UCMCONNECTOR tanıtıcısı (yerel bağlayıcı) tarafından temsil edilen yerel bağlayıcının geçerli düzeyini belirtir. Bu ilk tanıtım, bağlantının ömrü boyunca değişebilir. Bu değişiklikler istemci sürücüsü tarafından izlenmelidir.

Yerel bağlayıcı güç alıcısıysa ve akım bildirimi değişirse, istemci sürücüsünün akım bildirimindeki değişiklikleri algılaması ve bunları sınıf uzantısına rapor etmesi gerekir. Windows 10 Mobile sistemlerinde, bu bilgiler CAD.sys ve pil alt sistemi tarafından kaynaktan çektiği akım miktarını ayarlamak için kullanılır. Geçerli düzeydeki değişikliği sınıf uzantısına bildirmek için istemci sürücüsünün UcmConnectorTypeCCurrentAdChangedçağrısı yapması gerekir.

4. Yeni anlaşmalı PD sözleşmesini bildirin

Bağlayıcınız PD'yi destekliyorsa, ilk ekleme olayından sonra bağlayıcı ile iş ortağı bağlayıcısı arasında aktarılan PD iletileri vardır. Her iki iş ortağı arasında, konektörün çekebileceği veya iş ortağının çekmesine izin verebileceği mevcut seviyeleri belirleyen bir PD sözleşmesi müzakere edilir. PD sözleşmesi her değiştiğinde, istemci sürücüsünün değişikliği sınıf uzantısına raporlamak için bu yöntemleri çağırması gerekir.

5. Pil şarj durumunu bildirin

İstemci sürücüsü, şarj düzeyi yeterli değilse UCM sınıf uzantısını bilgilendirebilir. Sınıf uzantısı bu bilgileri işletim sistemine bildirir. Sistem bu bilgileri, şarj cihazının sistemi en iyi şekilde şarj etmediğini belirten bir kullanıcı bildirimi göstermek için kullanır. Ücretlendirme durumu şu yöntemlerle bildirilebilir:

Bu yöntemler şarj durumunu belirtir. Bildirilen düzeyler UcmChargingStateSlowCharging veya UcmChargingStateTrickleCharging olduğunda (bkz. UCM_CHARGING_STATE), işletim sistemi kullanıcıya bildirim gösterir.

6. PR_Swap/DR_Swap olaylarını bildirme

Bağlayıcı iş ortağından güç rolü (PR_Swap) veya veri rolü (DR_Swap) değiştirme iletisi alırsa, istemci sürücüsünün UCM sınıf uzantısını bilgilendirmesi gerekir.

  • UcmConnectorDataDirectionChanged

    PD DR_Swap iletisi işlendikten sonra bu yöntemi çağırın. Bu çağrıdan sonra, işletim sistemi yeni rolü URS'ye bildirir ve bu da mevcut rol sürücülerini yok eder ve yeni rol için sürücüleri yükler.

  • UcmConnectorPowerDirectionChanged

    PD PR_Swap iletisi işlendikten sonra bu yöntemi çağırın. Bir PR_Swap'tan sonra, PD sözleşmesinin yeniden müzakere edilmesi gerekir. İstemci sürücüsünün, adım 4'de açıklanan yöntemleri çağırarak PD sözleşme anlaşmasını bildirmesi gerekir.

7. Güç ve veri rolü değiştirme isteklerini işlemek için geri çağırma işlevleri uygulama

UCM sınıf uzantısı, bağlayıcının verilerini veya güç yönünü değiştirme istekleri alabilir. Bu durumda, bağlayıcı PD'yi uygularsa, istemci sürücüsünün EVT_UCM_CONNECTOR_SET_DATA_ROLE ve EVT_UCM_CONNECTOR_SET_POWER_ROLE geri çağırma işlevlerini çağırır. İstemci sürücüsü daha önce bu işlevleri UcmConnectorCreateçağrısına kaydetti.

İstemci sürücüsü, donanım arabirimlerini kullanarak rol değiştirme işlemleri gerçekleştirir.

  • EVT_UCM_CONNECTOR_SET_DATA_ROLE

    Geri çağırma uygulamasında istemci sürücüsünün şunları gerçekleştirmesi beklenir:

    1. Bağlantı ortağına PD DR_Swap iletisi gönderin.
    2. sınıf uzantısına ileti dizisinin başarıyla veya başarısız bir şekilde tamamlandığını bildirmek için UcmConnectorDataDirectionChangedçağırın.
    EVT_UCM_CONNECTOR_SET_DATA_ROLE     EvtSetDataRole;
    
    NTSTATUS
    EvtSetDataRole(
        UCMCONNECTOR  Connector,
        UCM_TYPE_C_PORT_STATE DataRole
        )
    {
        PCONNECTOR_CONTEXT connCtx;
    
        TRACE_INFO("EvtSetDataRole(%!UCM_TYPE_C_PORT_STATE!) Entry", DataRole);
    
        connCtx = GetConnectorContext(Connector);
    
        TRACE_FUNC_EXIT();
    
        return STATUS_SUCCESS;
    }
    
  • EVT_UCM_CONNECTOR_SET_POWER_ROLE

    Geri çağırma uygulamasında istemci sürücüsünün şunları gerçekleştirmesi beklenir:

    1. Bağlantı noktası ortağına PD PR_Swap mesajı gönderin.
    2. sınıf uzantısına ileti dizisinin başarıyla veya başarısız bir şekilde tamamlandığını bildirmek için UcmConnectorPowerDirectionChangedçağırın.
    EVT_UCM_CONNECTOR_SET_POWER_ROLE     EvtSetPowerRole;
    
    NTSTATUS
    EvtSetPowerRole(
        UCMCONNECTOR Connector,
        UCM_POWER_ROLE PowerRole
        )
    {
        PCONNECTOR_CONTEXT connCtx;
    
        TRACE_INFO("EvtSetPowerRole(%!UCM_POWER_ROLE!) Entry", PowerRole);
    
        connCtx = GetConnectorContext(Connector);
    
        //PR_Swap operation.
    
        TRACE_FUNC_EXIT();
    
        return STATUS_SUCCESS;
    }
    

Uyarı

İstemci sürücüsü UcmConnectorDataDirectionChanged çağırabilir ve UcmConnectorPowerDirectionChanged zaman uyumsuz olarak çağırabilir; bu, geri çağırma iş parçacığından değildir. Tipik bir uygulamada, sınıf uzantısı istemci sürücüsünün iletiyi göndermek için bir donanım işlemi başlatmasına neden olan geri çağırma işlevlerini çağırır. İşlem tamamlandığında, donanım sürücüye bildirir. Sürücü sınıf uzantısını bilgilendirmek için bu yöntemleri çağırır.

8. İş ortağı bağlayıcı ayırma olayını rapor etme

bir iş ortağı bağlayıcısı bağlantısı sona erdiğinde istemci sürücüsünün UcmConnectorTypeCDetach çağırması gerekir. Bu çağrı, işletim sistemine daha fazla bilgi veren UCM sınıf uzantısını bildirir.

Kullanım örneği: Bir bilgisayara bağlı mobil cihaz

Windows 10 Mobile çalıştıran bir cihaz USB Type-C bağlantısı üzerinden masaüstü sürümleri için Windows 10 çalıştıran bir bilgisayara bağlandığında, MTP yalnızca bu yönde çalıştığından, işletim sistemi mobil cihazın Yukarı Akışa Yönelik Bağlantı Noktası (UFP) olduğundan emin olur. Bu senaryoda, veri rolü düzeltme sırası aşağıdadır:

  1. Mobil cihazda çalışan istemci sürücüsü, UcmConnectorTypeCAttach çağırarak bir ekleme olayı bildirir ve iş ortağı bağlayıcısını Aşağı Akışa Yönelik Bağlantı Noktası (UFP) olarak bildirir.
  2. İstemci sürücüsü, UcmConnectorPdPartnerSourceCapsve UcmConnectorPdConnectionStateChangedçağırarak PD sözleşmesini bildirir.
  3. UCM sınıf uzantısı, USB cihaz sürücülerine konaktan gelen numaralandırmaya yanıt vermeleri için bildirimde bulunur. İşletim sistemi bilgileri USB üzerinden değiştirilir.
  4. UCM sınıf uzantısı UcmCx, rolleri değiştirmek için istemci sürücüsünün geri çağırma işlevlerini çağırır: EVT_UCM_CONNECTOR_SET_DATA_ROLE ve EVT_UCM_CONNECTOR_SET_POWER_ROLE.

Uyarı

İki Windows 10 Mobile cihazı birbirine bağlıysa rol değiştirme işlemi yapılmaz ve kullanıcıya bağlantının geçerli bir bağlantı olmadığı bildirilir.