UFX_PROPRIETARY_CHARGER_DETECT funzione di callback (ufxproprietarycharger.h)
L'implementazione del driver di filtro per rilevare se un caricatore è collegato e ottenere dettagli sul caricatore.
Sintassi
UFX_PROPRIETARY_CHARGER_DETECT UfxProprietaryChargerDetect;
NTSTATUS UfxProprietaryChargerDetect(
[in] PVOID Context,
[out] PUFX_PROPRIETARY_CHARGER DetectedCharger
)
{...}
Parametri
[in] Context
Puntatore a un contesto definito dal driver.
[out] DetectedCharger
Puntatore a una struttura UFX_PROPRIETARY_CHARGER che il conducente riempie di informazioni sul caricatore.
Valore restituito
Se l'operazione ha esito positivo, la funzione di callback deve restituire STATUS_SUCCESS o un altro valore di stato per cui NT_SUCCESS(status) è TRUE. In caso contrario, deve restituire un valore di stato per il quale NT_SUCCESS(status) è uguale a FALSE.
Commenti
Per supportare la gestione dei caricatori proprietari, il driver di filtro inferiore USB deve pubblicare il supporto. Durante il processo di pubblicazione, il driver registra anche l'implementazione di questa funzione di callback. Per altre informazioni, vedere Driver di filtro USB per il supporto di caricatori proprietari.
In questa funzione di callback, il driver assegna al caricatore un GUID e imposta lo stato Dx minimo necessario quando il dispositivo è connesso per la ricarica.
Esempio
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;
}
Requisiti
Requisito | Valore |
---|---|
Piattaforma di destinazione | Windows |
Versione KMDF minima | 1,0 |
Versione UMDF minima | 2,0 |
Intestazione | ufxproprietarycharger.h |
IRQL | PASSIVE_LEVEL |