Condividi tramite


IOCTL_GNSS_CREATE_GEOFENCE IOCTL (gnssdriver.h)

Il codice di controllo IOCTL_GNSS_CREATE_GEOFENCE viene usato dall'adattatore GNSS per creare un recinto virtuale.

Si applica a GNSS DDI versione 2 e successive.

Codice principale

IRP_MJ_DEVICE_CONTROL

Buffer di input

Puntatore a una struttura GNSS_GEOFENCE_CREATE_PARAM che definisce il recinto virtuale da creare.

Lunghezza del buffer di input

Impostare su sizeof(GNSS_GEOFENCE_CREATE_PARAM).

Buffer di output

Puntatore a una struttura GNSS_GEOFENCE_CREATE_RESPONSE.

Lunghezza del buffer di output

Impostare su sizeof(GNSS_GEOFENCE_CREATE_RESPONSE).

Blocco di stato

Irp-> IoStatus.Status è impostato su STATUS_SUCCESS se la richiesta ha esito positivo. In caso contrario, stato alla condizione di errore appropriata come codice NTSTATUS.

Osservazioni

Note sull'adattatore GNSS

Se la chiamata ha esito positivo, il motore GNSS registra il recinto virtuale e assegna un ID univoco. L'adattatore GNSS usa l'ID univoco per tutte le interazioni con il driver relativo a questo recinto virtuale specifico.

Se la chiamata non riesce, il driver GNSS deve assicurarsi che il motore GNSS non finisce per creare il recinto virtuale e avviare il rilevamento. Un errore dovrebbe riportare lo stato del motore GNSS allo stato precedente prima di aggiungere questo recinto virtuale.

L'adattatore GNSS non prevede che il driver persista i recinti virtuali tra i riavvii del driver. L'adattatore GNSS cancella in modo esplicito tutti i recinti virtuali dal driver GNSS tramite il comando GNSS_ResetGeofencesTracking in momenti appropriati (inizializzazione, rilevamento della modifica dello stato dopo un errore e così via).

Note sul driver GNSS

Se si tratta del primo recinto virtuale, il driver GNSS deve avviare il rilevamento del recinto virtuale, continuare a monitorare il recinto virtuale rispetto alla posizione corrente del dispositivo in modo efficiente e generare avvisi in caso di violazione di un recinto virtuale. Se il motore GNSS non è in grado di tenere traccia del recinto virtuale (a causa di condizioni di segnale non valido o altri errori temporanei), è necessario generare uno stato di errore tramite l'evento LISTEN_GEOFENCES_TRACKINGSTATUS.

Il motore GNSS deve rispettare le linee guida seguenti per il rilevamento del recinto virtuale:

  • L'operazione di rilevamento dei dispositivi e il rilevamento delle violazioni devono essere ottimizzati per tenere conto delle dimensioni e dell'area del recinto virtuale. Se tutte le condizioni sono uguali, i recinti virtuali più grandi devono essere monitorati in modo meno aggressivo rispetto ai recinti virtuali più piccoli.

  • L'operazione di rilevamento del dispositivo deve essere ottimizzata dinamicamente per tenere conto della distanza relativa del recinto virtuale rispetto alla posizione corrente. Tutte le condizioni sono uguali, più lontano recinto virtuale devono essere monitorate meno aggressivamente rispetto a quelle più vicine e l'aggressività dovrebbe aumentare man mano che il dispositivo si avvicina al recinto virtuale.

  • Il meccanismo di rilevamento delle violazioni deve essere asimmetrico per l'ingresso e l'uscita. Come regola generale, le regole per determinare l'uscita da un recinto virtuale devono essere rilassate rispetto alle regole per determinare l'ingresso nel recinto virtuale.

  • Il meccanismo di rilevamento delle violazioni deve tenere conto dei potenziali falsi positivi derivanti dall'imprecisione intrinseca della posizione del dispositivo. Ad esempio, se il dispositivo sta passando il puntatore del mouse vicino al bordo di un recinto virtuale, un meccanismo di rilevamento delle violazioni sub-ottimale può generare troppi eventi di ingresso e uscita per tornare indietro anche se il dispositivo non è fisicamente in movimento e in uscita. Il rilevamento di uscita asimmetrica e l'isteresi sono misure tipiche per evitare tali errori.

  • L'operazione di rilevamento dei dispositivi del motore GNSS deve usare tutte le forme di segnali di modifica della posizione disponibili disponibili nel SoC o possono essere usati a basso consumo. Tali segnali possono includere, a titolo esemplificativo, i dati dell'accelerometro e di altri sensori, la modifica del segnale cellulare, la connessione WiFi/disconnessione e così via.

  • Le operazioni di rilevamento e rilevamento delle violazioni del recinto virtuale devono essere completamente implementate nel motore GNSS su SoC. Né il driver GNSS né qualsiasi altro componente di estensione nel processore di applicazioni deve riattivarsi per il rilevamento o la violazione dei dispositivi.

  • Il driver GNSS e il motore GNSS devono esporre parametri di ottimizzazione specifici di IHV documentati per facilitare l'ottimizzazione delle prestazioni e dell'alimentazione della funzionalità di rilevamento del recinto virtuale. Microsoft e oem useranno i parametri di ottimizzazione e determineranno il giusto equilibrio tra la qualità del servizio, l'affidabilità e il costo energetico dell'esperienza end-to-end del recinto virtuale. I parametri di ottimizzazione possono essere resi disponibili tramite le impostazioni del Registro di sistema o tramite i dati di configurazione soC IHV.

Fabbisogno

Requisito Valore
intestazione gnssdriver.h (include Gnssdriver.h)

Vedere anche

creazione di richieste IOCTL nei driver

WdfIoTargetSendInternalIoctlOthersSynchronously

WdfIoTargetSendInternalIoctlSynchronously

WdfIoTargetSendIoctlSynchronously