функция обратного вызова UFX_PROPRIETARY_CHARGER_DETECT (ufxproprietarycharger.h)

Реализация драйвера фильтра, чтобы определить, подключено ли зарядное устройство, и получить сведения о зарядном устройстве.

Синтаксис

UFX_PROPRIETARY_CHARGER_DETECT UfxProprietaryChargerDetect;

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

Параметры

[in] Context

Указатель на контекст, определенный драйвером.

[out] DetectedCharger

Указатель на структуру UFX_PROPRIETARY_CHARGER , которую драйвер заполняет сведениями о зарядном устройстве.

Возвращаемое значение

Если операция выполнена успешно, функция обратного вызова должна возвращать STATUS_SUCCESS или другое значение состояния, для которого NT_SUCCESS(status) равно TRUE. В противном случае он должен возвращать значение состояния, для которого NT_SUCCESS (status) равно FALSE.

Комментарии

Для поддержки обработки собственных зарядных устройств драйвер нижнего фильтра USB должен публиковать поддержку. В процессе публикации драйвер также регистрирует свою реализацию этой функции обратного вызова. Дополнительные сведения см. в разделе Драйвер фильтра USB для поддержки собственных зарядных устройств.

В этой функции обратного вызова драйвер назначает зарядному устройству GUID и задает минимальное требуемое состояние Dx, когда устройство подключено для зарядки.

Примеры

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;
}

Требования

Требование Значение
Целевая платформа Windows
Минимальная версия KMDF 1,0
Минимальная версия UMDF 2,0
Верхняя часть ufxproprietarycharger.h
IRQL PASSIVE_LEVEL

См. также раздел

Драйвер фильтра USB для поддержки собственных зарядных устройств