Delen via


Opsomming van ACX-apparaten

In dit onderwerp wordt de opsomming van ACX-apparaten, opstarten en afsluiten en het opnieuw verdelen van apparaten besproken. Voor een algemeen overzicht van ACX, zie overzicht van ACX-audioklasse-extensies. Zie ACX-energiebeheervoor meer informatie over ACX-energiebeheer en PnP.

Opsomming van ACX-apparaten en opstarten voor statische audioapparaten

Voor meer informatie over hoe ACX opstarten werkt, wordt het volgende scenario beschreven.

  • Een audioapparaat wordt vertegenwoordigd door één circuit.
  • De levensduur van een audio/circuit is gekoppeld aan de levensduur van het PnP-apparaat.
  • Eén apparaat kan meerdere circuits maken voor verschillende audioapparaten.
  • KMDF-kernelmodusomgeving.

De volgorde van het opstarten is:

ACX Stream Toevoegen

  • ACX Stream Add (instantie) op ACX-circuit (ACX-callback op ACX-circuits) – kan op elk gewenst moment worden aangeroepen nadat de zelfbeheerde WDF I/O-initialisatie of herstart is uitgevoerd en het apparaat zich in D0 bevindt. Bereik binnen een circuit.
    • Invoer: AcxStreamInit context, ACXCIRCUIT.
    • Callbacks toevoegen.
    • Een AcxStream (instantie) maken.
    • Voer desgewenst een initiatie uit van een poststream-instantie.
    • Bij terugkeer activeert ACX dit stroomexemplaar, en omdat het in dit scenario de enige in het audiopad is, kan het streamberichten doorlaten.

Opsomming van ACX-apparaten en opstarten voor dynamische audioapparaten

In dit scenario wordt ervan uitgegaan dat het volgende geldt.

  • Dynamische audioondersteuning (audioapparaten maken/verwijderen tijdens runtime).
  • De levensduur van het apparaat is niet gekoppeld aan de levensduur van het circuit.
  • Eén apparaat kan meerdere circuits maken voor verschillende audioapparaten.
  • Leunt op het hierboven beschreven eenvoudige statische patroon door alleen elementen toe te voegen die specifiek zijn voor het dynamische patroon.
  • Maakt gebruik van onderliggende onbewerkte PDO's.
  • KMDF-kernelmodusomgeving.

De reeks opstartbewerkingen voor dit scenario is:

  • WDM DriverEntry. Bestuurdersspecifiek.

    • Initialisatie van tracering.
    • U kunt zich desgewenst registreren voor het uitladen.
    • WDFDRIVER maken.
    • Roep ACX aan om een post driver-initialisatie uit te voeren.
    • U kunt eventueel een stuurprogramma initialiseren.
  • WDF DeviceAdd. Apparaatgebaseerd.

    • Roep ACX aan om de initialisatiecontext van het apparaat te initialiseren.
    • Apparaat maken.
    • Neem contact op met ACX om na de apparaatinitialisatie verdere stappen uit te voeren.
    • U kunt eventueel aanvullende stappen uitvoeren na de apparaatinitialisatie.
  • WDF PrepareHardware. Apparaatspecifiek.

    • Hardwarebronnen maken en initen (voor interrupts en threads, registreren bij ACX).
  • WDF-apparaat D0-entry callback. Apparaatgebonden.

  • WDF-wachtrijen worden opnieuw gestart.

  • WDF DeviceSelfManagedIoInit. Apparaatgebonden.

  • WDF DeviceSelfManagedIoRestart. Apparaatbereik.

    • Initialiseer na elke opstart van Dx.

Dynamische aanmaak van circuits (op elk gewenst moment)

  • De driver wijst een WDFDEVICE_INIT-structuur toe door WdfPdoInitAllocateaan te roepen. Het stuurprogramma is verantwoordelijk voor het aanroepen van de WdfDeviceInitFree als het fouten tegenkomt voordat het succesvol een apparaat creëert.
  • Het stuurprogramma specificeert welke PnP/power terugroepfuncties het wil ontvangen.
  • Het stuurprogramma maakt een apparaat.
  • Het stuurprogramma instantiateert het nieuwe apparaat/circuit door AcxDeviceAddCircuitDeviceaan te roepen.
  • WDF/PnP neemt over en het eenvoudige enum/startup-patroon dat in de vorige sectie wordt beschreven, vindt plaats.

AcxFactoryCircuit

Een ACX-stuurprogramma kan ook AcxFactoryCircuit-objecten (circuitproviders) maken tijdens de stroomopschakeling met behulp van de functie AcxFactoryCircuitCreate en de functie AcxDeviceAddFactoryCircuit.

Omdat het ACX-stuurprogramma zichzelf heeft geregistreerd bij ACX als circuitfactory, gebruikt het ACX-framework de geregistreerde factory om het stuurprogramma te vragen een nieuw circuit te maken.

AcxFactoryCircuitCreate(Device, &attributes, &factoryInit, &factory);

AcxDeviceAddFactoryCircuit(Device, factory);

ACX-apparaat herbalanceren

Herverdeling wordt uitgevoerd wanneer het systeemresourcegebruik vereist dat het besturingssysteem resources tussen apparaten opnieuw in balans brengt. Zie PnP-herbalance implementeren voor PortCls Audio Driversvoor algemene informatie over herbalanceren.

ACX ondersteunt het herverdelen van apparaten als volgt:

  • In de krachtuitreeks van WDF/ACX laat de driver alle streamingresources (EvtAcxStreamPowerDown, EvtAcxStreamReleaseHardware), circuitresources (EvtAcxCircuitPowerDown, EvtAcxCircuitReleaseHardware) en apparaatresources (EvtDeviceReleaseHardware) vrij.

  • Alle aanvragen worden gepend en handles blijven open.

  • Tijdens de inschakelingssequentie van de WDF/ACX zorgt de driver ervoor dat de nieuwe resources compatibel zijn met de huidige en voert het alle toegestane aanpassingen aan de instellingen door. Als de resources niet compatibel zijn met de initialisatie van het huidige apparaat/circuit, moet het stuurprogramma de huidige circuits verwijderen en nieuwe circuits maken. Zie hieronder meer informatie.

  • In de opstartvolgorde roept WDF de bijbehorende EvtDevicePrepareHardware en EvtDeviceD0-invoer aan, en ACX roept de bijbehorende EvtAcxCircuitPrepareHardware en EvtAcxCircuitPowerUp aan, en alle stromen worden verplaatst naar hun oorspronkelijke toestanden.

  • Zodra de wachtrijen overgaan naar de opstart-/uitvoeringsstatus, zal de I/O-stroom weer doorstromen.

ACX staat verwijderen (mislukt query-verwijderen) of herbalanceren (mislukte query-stop) niet toe als er stromen in actieve status (RUN) zijn.

Bestuurders kunnen er ook voor kiezen om audioapparaten altijd te verwijderen en opnieuw te maken bij herbalancering. Dit is hetzelfde scenario als het apparaat detecteert dat de nieuwe instellingen niet compatibel zijn met de oude instellingen. Het verwijderen van het circuit moet worden uitgevoerd in EvtDevicePrepareHardware/EvtDeviceReleaseHardware callbacks en het nieuwe circuit wordt opnieuw gemaakt in EvtDevicePrepareHardware. Het stuurprogramma verwijdert een circuit door de registratie van het circuit ongedaan te maken (met behulp van AcxDeviceRemoveCircuit). Fabriekscircuits mogen normaal gesproken niet worden verwijderd tijdens het herbalanceren.

Bestandshandvatten in de gebruikersmodus

ACX wacht niet totdat de bestandsingangen in de gebruikersmodus zijn gesloten voordat nieuwe circuits opnieuw worden gemaakt. De levensduur van de bestandssysteemgrepen is niet gekoppeld aan de levensduur van de hardwarebronnen die door het apparaat/de circuits worden gebruikt. Het is de verantwoordelijkheid van klanten om te luisteren naar het aankomen en verwijderen van een interface en om bestandsgrepen te sluiten en opnieuw te openen.

Oude bestandsingangen zijn gemarkeerd als verouderd en ACX mislukt alle I/O-aanvragen die eraan zijn gekoppeld.

Zie ook

Overzicht van ACX-audioklasse-extensies

ACX-referentiedocumentatie

callbackreeksen voor PnP en Energiebeheer