Delen via


Een stuurprogramma voor een USB-Type-C-connector schrijven

In deze scenario's moet u een stuurprogramma voor de USB-Type-C-connector schrijven:

Samenvatting

  • UCM-object dat wordt gebruikt door de klasse-extensie en het clientstuurprogramma
  • Services die worden geleverd door de UCM-klasse-extensie
  • Verwacht gedrag van het clientstuurprogramma

Officiële specificaties

Van toepassing op

  • Windows 10

WDF-versie

  • KMDF versie 1.15
  • UMDF versie 2.15

Belangrijke API's

Beschrijft de USB-connectorbeheerder (UCM) die een USB Type-C-connector beheert en het verwachte gedrag van een connectorstuurprogramma.

UCM is ontwikkeld volgens het WDF-uitbreidingsclientstuurprogrammamodel. De klasse-extensie (UcmCx) is een door Microsoft geleverd WDF-stuurprogramma dat interfaces biedt die het clientstuurprogramma kan aanroepen om informatie over de connector te rapporteren. Het UCM-clientstuurprogramma maakt gebruik van de hardware-interfaces van de connector en houdt de klasse-extensie op de hoogte van gebeurtenissen die op de connector plaatsvinden. Omgekeerd roept de klasse-extensie callback-functies aan die door het clientstuurprogramma zijn geïmplementeerd als reactie op gebeurtenissen van het besturingssysteem.

Als u een USB-Type-C-connector op een systeem wilt inschakelen, moet u het clientstuurprogramma schrijven.

usb-connectorbeheer.

Voordat u begint

  • Installeer de nieuwste Windows Driver Kit (WDK) op uw ontwikkelcomputer. nl-NL: De kit beschikt over de vereiste headerbestanden en -bibliotheken voor het schrijven van een UCM-clientstuurprogramma, met name:

    • De stub-bibliotheek (UcmCxstub.lib). De bibliotheek vertaalt oproepen van het clientstuurprogramma en geeft deze door aan UcmCx.

    • Het headerbestand UcmCx.h.

      U kunt een UCM-clientstuurprogramma schrijven dat wordt uitgevoerd in de gebruikersmodus of kernelmodus. Voor de gebruikersmodus wordt deze gekoppeld aan de UMDF 2.x-bibliotheek; voor kernelmodus is het KMDF 1.15. Programmeerinterfaces zijn identiek voor beide modussen.

      Visual Studio-configuratie voor UCM.

  • Bepaal of uw clientstuurprogramma geavanceerde functies van de USB-Type-C-connector en de USB-voeding ondersteunt.

    Met deze ondersteuning kunt u Windows-apparaten bouwen met USB-Type-C-connectors, USB-Type-C docks en accessoires en USB-Type-C opladers. Het clientstuurprogramma rapporteert connector-gebeurtenissen waarmee het besturingssysteem beleid rond USB- en energieverbruik in het systeem kan implementeren.

  • Installeer Windows 10 voor desktopversies (Home, Pro, Enterprise en Education) op uw doelcomputer of Windows 10 Mobile met een USB-Type-C-connector.

  • Maak uzelf vertrouwd met UCM en hoe deze communiceert met andere Windows-stuurprogramma's. Zie Architectuur: USB-Type-C ontwerp voor een Windows-systeem.

  • Maak uzelf vertrouwd met Windows Driver Foundation (WDF). Aanbevolen lezing: Stuurprogramma's ontwikkelen met Windows Driver Foundation, geschreven door Penny Orwick en Guy Smith.

Samenvatting van de services die worden geleverd door de UCM-klasse-extensie

De UCM-klasse-extensie houdt het besturingssysteem op de hoogte van de wijzigingen in gegevens- en energierol, laadniveaus en het onderhandelde PD-contract. Terwijl het clientstuurprogramma communiceert met de hardware, moet het de klasse-extensie waarschuwen wanneer deze wijzigingen optreden. De klasse-extensie biedt een set methoden die het clientstuurprogramma kan gebruiken om de meldingen te verzenden (besproken in dit onderwerp). Dit zijn de services die worden geleverd:

Configuratie van gegevensrol

Op USB-Type-C systemen is de gegevensrol (host of functie) afhankelijk van de status van de CC-pinnen van de connector. Het clientstuurprogramma leest de CC-regel (zie Architectuur: USB-Type-C ontwerp voor een Windows-systeem) van uw poortcontroller om te bepalen of de poort is omgezet in een Upstream Facing Port (UFP) of Downstream Facing Port (UFP). Het rapporteert die informatie aan de klasse-extensie, zodat deze de huidige rol kan rapporteren aan USB-stuurprogramma's voor rollenwissel.

Opmerking

USB-stuurprogramma's voor rollenschakelaars worden gebruikt op Windows 10 Mobile-systemen. In Windows 10 voor desktopversiessystemen is de communicatie tussen de klasse-extensie en de stuurprogramma's voor rollenschakelaars optioneel. Dergelijke systemen maken mogelijk geen gebruik van een dual-role controller; als dat het geval is, worden de drivers voor rolwisseling niet gebruikt.

Stroomrol en opladen

Uw clientstuurprogramma leest de USB-Type-C huidige advertentie of onderhandelt over een PD-energiecontract met de partnerconnector.

  • Op een Windows 10 Mobile-systeem wordt de beslissing om de juiste oplader te kiezen software-ondersteund. Het clientstuurprogramma rapporteert de contractgegevens aan de klasse-uitbreiding, zodat het de laadniveaus naar de oplaadarbiter (CAD.sys) kan verzenden. CAD selecteert het huidige niveau dat moet worden gebruikt en stuurt de informatie over het laadniveau door naar het batterijsubsysteem.
  • Op een Systeem met Windows 10 voor desktopversies wordt de juiste oplader geselecteerd door de hardware. Het clientstuurprogramma kan ervoor kiezen om die informatie op te halen en door te sturen naar de klasse-extensie. Deze logica kan ook worden geïmplementeerd door een ander stuurprogramma.

Wijzigingen in gegevens- en energierol

Nadat een PD-contract is afgesproken, kunnen de data- en machtsrollen veranderen. Deze wijziging kan worden geïnitieerd door het clientstuurprogramma of de connector van de partner. Het clientstuurprogramma rapporteert die informatie aan de klasse-extensie, zodat het de zaken dienovereenkomstig opnieuw kan configureren.

Gegevens- en/of energierolupdate

Het besturingssysteem kan besluiten dat de huidige gegevensrol niet juist is. In dat geval roept de klasse-extensie de callback-functie van uw stuurprogramma aan om de benodigde rolwisselingsbewerkingen uit te voeren.

De door Microsoft geleverde USB-Type-C Policy Manager bewaakt de activiteiten van USB-Type-C-connectors. Windows, versie 1809, introduceert een set programmeerinterfaces die u kunt gebruiken om een clientstuurprogramma naar Policy Manager te schrijven. Het clientstuurprogramma kan deelnemen aan de beleidsbeslissingen voor USB-Type-C-connectors. Met deze set kunt u ervoor kiezen om een exportstuurprogramma voor de kernelmodus of een stuurprogramma voor de gebruikersmodus te schrijven. Zie Een USB-Type-C Policy Manager-clientstuurprogramma schrijven voor meer informatie.

Verwacht gedrag van het clientstuurprogramma

Uw client-stuurprogramma is verantwoordelijk voor deze taken:

  • Detecteer wijzigingen aan de CC-regel en bepaal het type partner, zoals UFP, DFP en anderen. Hiervoor moet het stuurprogramma de volledige Type-C-toestandsmachine implementeren zoals gedefinieerd in de USB Type-C-specificatie.
  • Configureer uw Mux op basis van de oriëntatie die op de CC-lijn is gedetecteerd. Dit omvat het inschakelen van uw PD-zender/ontvanger en de verwerking en het reageren op PD-berichten. Hiervoor moet het stuurprogramma de volledige ontvanger- en zenderstatusmachines voor PD implementeren zoals gedefinieerd in de USB Power Delivery 2.0-specificatie.
  • Neem PD-beleidsbeslissingen, zoals onderhandelen over een contract (als bron of sink), rolwisselingen en andere. Het clientdriver is verantwoordelijk voor het bepalen van het meest geschikte contract.
  • U kunt alternatieve modi adverteren en onderhandelen en de Mux configureren als er een alternatieve modus wordt gedetecteerd. Het clientstuurprogramma is verantwoordelijk voor het bepalen van de alternatieve modus om te onderhandelen.
  • Controle van VBus/VConn via de connector.

1. Initialiseer het UCM-connectorobject (UCMCONNECTOR)

Het UCM-connectorobject (UCMCONNECTOR) vertegenwoordigt de USB-Type-C-connector en is de belangrijkste ingang tussen de UCM-klasse-extensie en het clientstuurprogramma. Het object houdt de bedrijfsmodi en mogelijkheden voor energiebronnen van de connector bij.

Hier volgt de samenvatting van de volgorde waarin het clientstuurprogramma een UCMCONNECTOR-ingang voor de connector ophaalt. Voer deze taken uit in uw auto

  1. Roep UcmInitializeDevice aan door de verwijzing door te geven aan een UCM_MANAGER_CONFIG structuur. Het stuurprogramma moet deze methode aanroepen in de EVT_WDF_DRIVER_DEVICE_ADD callback-functie voordat u WdfDeviceCreate aanroept.

  2. Geef de initialisatieparameters voor de USB-Type-C-connector op in een UCM_CONNECTOR_TYPEC_CONFIG structuur. Dit omvat de bedrijfsmodus van de connector, ongeacht of het een downstreampoort, upstream-gerichte poort is of geschikt is voor twee rollen. Hij specificeert ook de USB Type-C-stroomniveaus wanneer de connector een voedingsbron is. Een USB-Type-C connector kan zo worden ontworpen dat het een audioaansluiting van 3,5 mm kan gebruiken. Als de hardware de functie ondersteunt, moet het connectorobject dienovereenkomstig worden geïnitialiseerd.

    In de structuur moet u ook de callbackfunctie van het clientstuurprogramma registreren voor het beheren van gegevensrollen.

    Deze callback-functie is gekoppeld aan het connectorobject, dat wordt aangeroepen door de UCM-klasse-extensie. Deze functie moet worden geïmplementeerd door het clientstuurprogramma.

    EVT_UCM_CONNECTOR_SET_DATA_ROLE Hiermee wordt de gegevensrol van de connector omgewisseld naar de opgegeven rol wanneer deze is gekoppeld aan een partnerconnector.

  3. Als uw clientstuurprogramma pd-geschikt wil zijn, dat wil gezegd, moet u de hardware-implementatie van Power Delivery 2.0 van de connector afhandelen, u moet ook een UCM_CONNECTOR_PD_CONFIG structuur initialiseren waarmee de PD-initialisatieparameters worden opgegeven. Dit geldt ook voor de stroomstroom, ongeacht of de verbindingslijn een voedingssink of bron is.

    In de structuur moet u ook de callbackfunctie van de clientstuurprogramma registreren om machtsrollen te beheren.

    Deze callback-functie is gekoppeld aan het connectorobject, dat wordt aangeroepen door de UCM-klasse-extensie. Deze functie moet worden geïmplementeerd door het clientstuurprogramma.

    EVT_UCM_CONNECTOR_SET_POWER_ROLE Hiermee stelt u de energierol van de connector in op de opgegeven rol wanneer deze is gekoppeld aan een partnerconnector.

  4. Roep UcmConnectorCreate aan en haal een UCMCONNECTOR-ingang op voor de connector. Zorg ervoor dat u deze methode aanroept nadat het clientstuurprogramma het frameworkapparaatobject heeft gemaakt door WdfDeviceCreate aan te roepen. Een geschikte plaats voor deze aanroep kan zich in de EVT_WDF_DEVICE_PREPARE_HARDWARE of EVT_WDF_DEVICE_D0_ENTRY van het stuurprogramma bevinden.

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. De gebeurtenis van partnerconnector koppelen rapporteren

Het clientstuurprogramma moet UcmConnectorTypeCAttach aanroepen wanneer er een verbinding met een partnerconnector wordt gedetecteerd. Deze aanroep meldt de UCM-klasse-extensie, die het besturingssysteem verder op de hoogte stelt. Op dit moment kan het systeem beginnen met opladen op USB-Type-C niveaus.

De UCM-klasse-extensie meldt ook de USB-stuurprogramma's voor functiewisselaars (URS). Op basis van het type partner configureert URS de controller in de host-rol of functie-rol. Voordat u deze methode aanroept, moet u ervoor zorgen dat mux op uw systeem correct is geconfigureerd. In het andere geval, als het systeem zich in een functionele rol bevindt, zal het verbinding maken met een onjuiste snelheid (High Speed in plaats van SuperSpeed).

        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 aankondigingswijzigingen melden

Bij de eerste koppelingsgebeurtenis verzendt de partnerconnector een actuele advertentie. Als de advertentie het huidige niveau van de partnerconnector specificeert wanneer de partner een USB-Type-C naar beneden gerichte poort is. Anders geeft de advertentie de actuele status van de lokale connector op, vertegenwoordigd door de UCMCONNECTOR-handle (lokale connector). Deze eerste advertentie kan tijdens de levensduur van de verbinding veranderen. Deze wijzigingen moeten worden bewaakt door het clientstuurprogramma.

Als de lokale connector de stroomsink is en de huidige advertentie verandert, moet het clientstuurprogramma wijzigingen in de huidige advertentie detecteren en deze rapporteren aan de klasse-extensie. Op Windows 10 Mobile-systemen wordt die informatie gebruikt door CAD.sys en het batterijsubsysteem om de hoeveelheid stroom aan te passen die uit de bron wordt getrokken. Als u de wijziging in het huidige niveau wilt rapporteren aan de klasse-extensie, moet het clientstuurprogramma UcmConnectorTypeCCurrentAdChanged aanroepen.

4. Het nieuwe onderhandelde PD-contract rapporteren

Als uw connector PD ondersteunt, worden er na de eerste koppelingsgebeurtenis PD-berichten overgebracht tussen de connector en de partnerconnector. Tussen beide partners wordt er onderhandeld over een PD-contract dat de huidige stroomniveaus bepaalt die de connector kan gebruiken of toestaan dat de partner kan gebruiken. Telkens wanneer het PD-contract wordt gewijzigd, moet het clientstuurprogramma deze methoden aanroepen om de wijziging aan de klasse-extensie te rapporteren.

  • Het clientdriver moet deze methoden aanroepen wanneer het een advertentie van bronmogelijkheden (ongevraagd of anderszins) van de partner ontvangt. De lokale connector (sink) krijgt alleen een ongevraagde advertentie van de partner wanneer de partner de bron is. De lokale connector kan ook expliciet bronmogelijkheden aanvragen van de partner die de bron kan zijn (zelfs wanneer de partner momenteel de sink is). Dat wordt uitgewisseld door een Get_Source_Caps bericht naar de partner te sturen.
  • Omgekeerd moet het clientstuurprogramma deze methoden aanroepen telkens wanneer de lokale connector (bron) bronmogelijkheden aan de partner adverteert. Wanneer de lokale connector een Get_Source_Caps bericht van de partner ontvangt, moet deze ook reageren met de bronmogelijkheden van de lokale connector.

5. Batterijlaadstatus rapporteren

Het clientstuurprogramma kan de UCM-klasse-extensie melden als het laadniveau niet voldoende is. De klasse-extensie rapporteert deze informatie aan het besturingssysteem. Het systeem gebruikt deze informatie om een gebruikersmelding weer te geven dat de oplader het systeem niet optimaal laadt. De laadstatus kan worden gerapporteerd door deze methoden:

Deze methoden geven de laadstatus op. Als de gerapporteerde niveaus UcmChargingStateSlowCharging of UcmChargingStateTrickleCharging (zie UCM_CHARGING_STATE) zijn, wordt in het besturingssysteem de gebruikersmelding weergegeven.

6. Gebeurtenissen PR_Swap/DR_Swap rapporteren

Als de connector een wisselbericht voor energierol (PR_Swap) of gegevensrol (DR_Swap) van de partner ontvangt, moet het clientstuurprogramma de UCM-klasse-uitbreiding op de hoogte stellen.

  • UcmConnectorDataDirectionChanged

    Roep deze methode aan nadat een PD-DR_Swap bericht is verwerkt. Na deze aanroep meldt het besturingssysteem de nieuwe rol aan URS, die de bestaande rolstuurprogramma's verwijdert en stuurprogramma's voor de nieuwe rol laadt.

  • UcmConnectorPowerDirectionChanged

    Roep deze methode aan nadat een PD-PR_Swap bericht is verwerkt. Na een PR_Swap moet het PD-contract opnieuw worden onderhandeld. Het clientstuurprogramma moet rapporteren over de PD-contractonderhandeling door de methoden aan te roepen die worden beschreven in stap 4.

7. Callback-functies implementeren voor het afhandelen van aanvragen voor het wisselen van energie- en gegevensrollen

De UCM-klasse-extensie kan aanvragen krijgen om gegevens of energierichting van de connector te wijzigen. In dat geval roept het clientstuurprogramma de implementatie van EVT_UCM_CONNECTOR_SET_DATA_ROLE en EVT_UCM_CONNECTOR_SET_POWER_ROLE callback-functies aan (als de connector PD implementeert). Het clientstuurprogramma heeft deze functies eerder geregistreerd bij de aanroep van UcmConnectorCreate.

Het clientstuurprogramma voert rolwisselingsbewerkingen uit met behulp van hardwareinterfaces.

  • EVT_UCM_CONNECTOR_SET_DATA_ROLE

    In de callback-implementatie wordt verwacht dat het clientstuurprogramma het volgende doet:

    1. Stuur een PD-DR_Swap bericht naar de poortpartner.
    2. Roep UcmConnectorDataDirectionChanged aan om de klasse-extensie op de hoogte te stellen dat de berichtenreeks is voltooid of mislukt.
    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

    In de callback-implementatie wordt verwacht dat het clientstuurprogramma het volgende doet:

    1. Stuur een PD-PR_Swap bericht naar de poortpartner.
    2. Roep UcmConnectorPowerDirectionChanged aan om de klasse-extensie op de hoogte te stellen dat de berichtenreeks is voltooid of mislukt.
    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;
    }
    

Opmerking

Het clientstuurprogramma kan UcmConnectorDataDirectionChanged en UcmConnectorPowerDirectionChanged asynchroon aanroepen, dat niet afkomstig is van de callback-thread. In een typische implementatie roept de klasse-extensie de callback-functies aan, waardoor het clientstuurprogramma een hardwaretransactie start om het bericht te verzenden. Wanneer de transactie is voltooid, brengt de hardware het stuurprogramma op de hoogte. Het stuurprogramma roept deze methoden aan om de uitbreiding van de klasse op de hoogte te stellen.

8. Het loskoppelingsgebeurtenis van de partnerconnector rapporteren

Het clientstuurprogramma moet UcmConnectorTypeCDetach aanroepen wanneer de verbinding met een partnerconnector afloopt. Deze aanroep meldt de klasse-extensie van UCM, die vervolgens het besturingssysteem op de hoogte stelt.

Voorbeeld van gebruiksvoorbeeld: Mobiel apparaat verbonden met een pc

Wanneer een apparaat met Windows 10 Mobile is verbonden met een pc met Windows 10 voor desktop-edities via een USB-Type-C-verbinding, zorgt het besturingssysteem ervoor dat het mobiele apparaat de Upstream Facing Port (UFP) is omdat MTP alleen in die richting werkt. In dit scenario is dit de volgorde voor correctie van gegevensrollen:

  1. Het clientstuurprogramma, uitgevoerd op het mobiele apparaat, rapporteert een bijlagegebeurtenis door UcmConnectorTypeCAttach aan te roepen en rapporteert de partnerconnector als de Downstream Facing Port (UFP).
  2. Het clientstuurprogramma rapporteert het PD-contract door UcmConnectorPdPartnerSourceCaps en UcmConnectorPdConnectionStateChanged aan te roepen.
  3. De UCM-klasse-extensie geeft een melding aan de USB-stuurprogramma's aan de apparaatzijde, waardoor deze stuurprogramma's reageren op de enumeratie van de host. De informatie van het besturingssysteem wordt uitgewisseld via USB.
  4. De UCM-klasse-extensie UcmCx roept de callbackfuncties van het clientstuurprogramma aan om rollen te wijzigen: EVT_UCM_CONNECTOR_SET_DATA_ROLE en EVT_UCM_CONNECTOR_SET_POWER_ROLE.

Opmerking

Als twee Windows 10 Mobile-apparaten met elkaar zijn verbonden, wordt er geen rolwisseling uitgevoerd en krijgt de gebruiker een melding dat de verbinding geen geldige verbinding is.