UFX_PROPRIETARY_CHARGER_DETECT función de devolución de llamada (ufxproprietarycharger.h)
Implementación del controlador de filtro para detectar si un cargador está conectado y obtener detalles sobre el cargador.
Sintaxis
UFX_PROPRIETARY_CHARGER_DETECT UfxProprietaryChargerDetect;
NTSTATUS UfxProprietaryChargerDetect(
[in] PVOID Context,
[out] PUFX_PROPRIETARY_CHARGER DetectedCharger
)
{...}
Parámetros
[in] Context
Puntero a un contexto definido por el controlador.
[out] DetectedCharger
Puntero a una estructura UFX_PROPRIETARY_CHARGER que el conductor rellena con información del cargador.
Valor devuelto
Si la operación se realiza correctamente, la función de devolución de llamada debe devolver STATUS_SUCCESS u otro valor de estado para el que NT_SUCCESS(status) es igual a TRUE. De lo contrario, debe devolver un valor de estado para el que NT_SUCCESS(status) es igual a FALSE.
Observaciones
Para admitir el control de cargadores propietarios, el controlador de filtro inferior USB debe publicar compatibilidad. Durante el proceso de publicación, el controlador también registra su implementación de esta función de devolución de llamada. Para obtener más información, consulte controlador de filtro USB para admitir cargadores propietarios.
En esta función de devolución de llamada, el controlador asigna un GUID al cargador y establece el estado Dx mínimo necesario cuando el dispositivo está conectado para la carga.
Ejemplos
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;
}
Requisitos
Requisito | Valor |
---|---|
de la plataforma de destino de | Windows |
versión mínima de KMDF | 1.0 |
versión mínima de UMDF | 2.0 |
encabezado de | ufxproprietarycharger.h |
irQL | PASSIVE_LEVEL |
Consulte también
controlador de filtro USB para admitir cargadores propietarios