UFX_PROPRIETARY_CHARGER_DETECT fungsi panggilan balik (ufxproprietarycharger.h)

Implementasi driver filter untuk mendeteksi apakah pengisi daya terpasang dan mendapatkan detail tentang pengisi daya.

Sintaks

UFX_PROPRIETARY_CHARGER_DETECT UfxProprietaryChargerDetect;

NTSTATUS UfxProprietaryChargerDetect(
  [in]  PVOID Context,
  [out] PUFX_PROPRIETARY_CHARGER DetectedCharger
)
{...}

Parameter

[in] Context

Penunjuk ke konteks yang ditentukan driver.

[out] DetectedCharger

Penunjuk ke struktur UFX_PROPRIETARY_CHARGER yang diisi driver dengan informasi pengisi daya.

Nilai kembali

Jika operasi berhasil, fungsi panggilan balik harus mengembalikan STATUS_SUCCESS, atau nilai status lain yang NT_SUCCESS(status) sama dengan TRUE. Jika tidak, nilai status harus dikembalikan yang NT_SUCCESS(statusnya) sama dengan FALSE.

Keterangan

Untuk mendukung penanganan pengisi daya kepemilikan, driver filter usb yang lebih rendah harus menerbitkan dukungan. Selama proses penerbitan, driver juga mendaftarkan implementasinya dari fungsi panggilan balik ini. Untuk informasi selengkapnya, lihat driver filter USB untuk mendukung pengisi daya kepemilikan.

Dalam fungsi panggilan balik ini, driver menetapkan GUID kepada pengisi daya dan mengatur status Dx minimum yang diperlukan saat perangkat tersambung untuk pengisian daya.

Contoh

NTSTATUS
UsbLowerFilter_ProprietaryChargerDetect(
    __in PVOID Context,
    __out PUFX_PROPRIETARY_CHARGER DetectedCharger
    )
{
    NTSTATUS Status = STATUS_SUCCESS;

    PPDCP_CONTEXT PdcpContext = NULL;


    PAGED_CODE();

    PdcpContext = DeviceGetUsbLowerFilterContext((WDFDEVICE)Context);


    // Clear our event
     KeClearEvent(&PdcpContext>AbortOperation);


    // Wait for a while
     Timeout.QuadPart = WDF_REL_TIMEOUT_IN_MS(PdcpContext>DetectionDelayInms);

    Status = KeWaitForSingleObject(
        &PdcpContext>AbortOperation,
        Executive,
        KernelMode,
        FALSE,
        &Timeout);

    switch (Status)
    {
    case STATUS_SUCCESS:

        // The abort event was set. Abort.

        Status = STATUS_REQUEST_ABORTED;
        break;

    case STATUS_TIMEOUT:

        // Timed out, detection has completed successfully.
        // Check if we want to fail this.

        if (PdcpContext>RejectNextRequest)
        {
            PdcpContext->RejectNextRequest = FALSE;
            Status = STATUS_UNSUCCESSFUL;
        }
        else if (!PdcpContext->PdcpChargerAttached)
        {
            Status = STATUS_NOT_FOUND;
        }
        else
        {
            Status = STATUS_SUCCESS;
        }
        break;

    default:
        break;
    }

    if (NT_SUCCESS(Status))
    {
        PdcpContext->PdcpChargerDetected = TRUE;
        DetectedCharger->ChargerId = GUID_USBFN_PROPRIETARY_CHARGER;
        DetectedCharger->DxState = PowerDeviceD2;
    }

    return Status;
}

Persyaratan

Persyaratan Nilai
Target Platform Windows
Versi KMDF minimum 1,0
Versi UMDF minimum 2.0
Header ufxproprietarycharger.h
IRQL PASSIVE_LEVEL

Lihat juga

Driver filter USB untuk mendukung pengisi daya kepemilikan