Proprietà del veicolo

L'interfaccia VHAL (Vehicle Hardware Abstraction Layer) definisce le proprietà che gli OEM possono implementare e contiene i metadati delle proprietà (ad esempio, se la proprietà è un int e quali modalità di modifica sono consentite). L'interfaccia VHAL si basa sull'accesso (lettura, scrittura, sottoscrizione) a una proprietà, che è un'astrazione per una funzione specifica.

Interfacce HAL

Il VHAL utilizza le seguenti interfacce:

  • getAllPropConfigs() genera (vec<VehiclePropConfig>propConfigs)
    Elenca la configurazione di tutte le proprietà supportate dal VHAL. CarService utilizza solo le proprietà supportate.
  • getPropConfigs(vec<int32_t> props) genera (StatusCode status,vec<VehiclePropConfig> propConfigs);
    Restituisce la configurazione delle proprietà selezionate.
  • set(VehiclePropValue propValue) genera (StatusCodestatus);
    Scrive un valore nella proprietà. Il risultato della scrittura è definito per proprietà.
  • subscribe(IVehicleCallback callback, vec<SubscribeOptions> options) genera (StatusCode status);
    Inizia a monitorare la modifica del valore di una proprietà. Per la proprietà suddivisa in zone, unsubscribe(IVehicleCallback callback, int32_t propId) genera (StatusCode status);

Il VHAL utilizza le seguenti interfacce di callback:

  • oneway onPropertyEvent(vec<VehiclePropValue>propValues);
    Notifica la modifica del valore della proprietà del veicolo. Dovrebbe essere fatto solo per le proprietà sottoscritte.
  • oneway onPropertySetError(StatusCode errorCode,int32_t propId,int32_tareaId);
    Restituisce l'errore di livello VHAL globale o l'errore per proprietà. L'errore globale provoca il riavvio dell'HAL, che può portare al riavvio di altri componenti (incluse le applicazioni).

Proprietà del veicolo

Le proprietà possono essere di sola lettura, sola scrittura (utilizzate per passare informazioni al livello VHAL) o di lettura e scrittura (il supporto della maggior parte delle proprietà è facoltativo). Ogni proprietà è identificata in modo univoco da una chiave int32 e ha un tipo predefinito ( value_type ):

  • BYTES
  • BOOLEAN
  • EPOCH_TIME
  • FLOAT
  • FLOAT[]
  • INT32
  • INT32[]
  • INT64
  • INT64[]
  • STRING
  • MIXED

Una proprietà con zone può avere più di un valore, in base al numero di zone supportate dalla proprietà.

Tipi di zona

Il VHAL definisce più tipi di area:

Tipo di zona Descrizione
GLOBAL Questa proprietà è un singleton e non ha più aree.
WINDOW Area basata sulle finestre, utilizza l'enumerazione VehicleAreaWindow .
MIRROR Area basata su mirror, usa l'enumerazione VehicleAreaMirror .
SEAT Area basata sui posti, usa l'enumerazione VehicleAreaSeat .
DOOR Area basata sulle porte, usa l'enumerazione VehicleAreaDoor .
WHEEL Area basata sulle ruote, usa l'enumerazione VehicleAreaWheel .

Ogni proprietà suddivisa in zone deve utilizzare un tipo di area predefinito. Ogni tipo di area ha un insieme di flag di bit definiti in un'enumerazione per il tipo di area. Ad esempio, l'area SEAT definisce le enumerazioni VehicleAreaSeat :

  • ROW_1_LEFT = 0x0001
  • ROW_1_CENTER = 0x0002
  • ROW_1_RIGHT = 0x0004
  • ROW_2_LEFT = 0x0010
  • ROW_2_CENTER = 0x0020
  • ROW_2_RIGHT = 0x0040
  • ROW_3_LEFT = 0x0100
  • ...

ID area

Le proprietà suddivise in zone vengono indirizzate tramite ID area. Ogni proprietà suddivisa in zone può supportare uno o più ID area. Un ID area è composto da uno o più flag dal rispettivo enum. Ad esempio, una proprietà che utilizza VehicleAreaSeat potrebbe utilizzare i seguenti ID area:

Articolo Descrizione
ROW_1_LEFT | ROW_1_RIGHT L'Area ID si applica a entrambi i sedili anteriori.
ROW_2_LEFT Vale solo per il sedile posteriore sinistro.
ROW_2_RIGHT Vale solo per il sedile posteriore destro.

Stato della proprietà

Ogni valore di proprietà viene fornito con un valore VehiclePropertyStatus . Questo indica lo stato attuale della proprietà:

Articolo Descrizione
AVAILABLE La proprietà è disponibile e il valore è valido.
UNAVAILABLE Il valore della proprietà non è attualmente disponibile. Utilizzato per funzionalità disabilitate temporaneamente per una proprietà supportata.
ERROR C'è qualcosa che non va in questa proprietà.

Configurazione di una proprietà

Utilizza VehiclePropConfig per fornire informazioni di configurazione per ogni proprietà. Le informazioni includono:

Variabile Descrizione
access r , w , rw
changeMode Rappresenta il modo in cui viene monitorata una proprietà, in caso di modifica anziché continua.
areaConfigs valori areaId , min e max .
configArray Parametri di configurazione aggiuntivi.
configString Ulteriori informazioni passate come stringa.
minSampleRate maxSampleRate
prop ID proprietà, int

Gestione delle proprietà della zona

Una proprietà suddivisa in zone equivale a una raccolta di più proprietà in cui è possibile accedere a ciascuna proprietà secondaria con il valore ID area specificato.

  • get call for zoned property include sempre l'Area ID nella richiesta. Pertanto, viene restituito solo il valore corrente per l'ID area richiesto. Se la proprietà è globale, l'ID area è 0.
  • set call for zoned property include sempre l'Area ID nella richiesta. Pertanto, viene modificato solo l'ID area richiesto.
  • la chiamata subscribe genera eventi per tutti gli ID area per la proprietà.

Ricevi chiamate

Durante l'inizializzazione, il valore per la proprietà potrebbe non essere ancora disponibile poiché il messaggio di rete del veicolo corrispondente non è stato ancora ricevuto. In tali casi, la chiamata get dovrebbe restituire -EAGAIN . Alcune proprietà (come HVAC) hanno proprietà di accensione/spegnimento separate. La chiamata get per tale proprietà (quando disattivata) dovrebbe restituire uno stato UNAVAILABLE anziché restituire un errore. Ad esempio, ottieni la temperatura HVAC

VHAL ottiene l'esempio HVAC

Figura 1 . Ottieni la temperatura HVAC (CS = CarService, VHAL = Vehicle HAL)

Imposta chiamate

In un'operazione tipica, una chiamata set porta a effettuare una richiesta di modifica attraverso la rete del veicolo. Una chiamata set è idealmente un'operazione asincrona che restituisce il prima possibile, ma può anche essere sincrona. Alcune chiamate set potrebbero richiedere che i dati iniziali siano pronti, ma durante l'inizializzazione, tali dati potrebbero non essere ancora disponibili. In tali casi, la chiamata set dovrebbe restituire StatusCode#TRY_AGAIN . Alcune proprietà con accensione e spegnimento separati dovrebbero restituire StatusCode#NOT_AVAILABLE o StatusCode#NOT_AVAILABLE_DISABLED quando la proprietà è spenta e set non può essere eseguita. Fino a quando set non viene reso effettivo, get non restituisce necessariamente lo stesso valore di ciò che è impostato. Ad esempio, set HVAC Temperature .

Esempio di set HVAC VHAL

Figura 2 . Impostare la temperatura HVAC (CS = CarService, VHAL = Vehicle HAL)

Gestione delle proprietà personalizzate

Per supportare le esigenze specifiche dei partner, VHAL consente proprietà personalizzate limitate alle app di sistema. Utilizzare le seguenti linee guida quando si lavora con le proprietà personalizzate:

  • L'ID proprietà deve essere generato utilizzando i seguenti campi:
    • VehiclePropertyGroup:VENDOR
      Il gruppo VENDOR viene utilizzato solo per le proprietà personalizzate.
    • VehicleArea
      Selezionare un tipo di area appropriato.
    • VehiclePropertyType
      Seleziona il tipo di dati appropriato. Il tipo BYTES consente il passaggio di dati grezzi che è sufficiente nella maggior parte dei casi. L'invio frequente di big data tramite proprietà personalizzate può rallentare l'accesso all'intera rete del veicolo: fai attenzione quando aggiungi un carico utile elevato.
    • Property ID
      Scegli un ID di quattro nibble per la proprietà personalizzata.
  • Per evitare la frammentazione dell'ecosistema, le proprietà personalizzate non devono essere utilizzate per replicare le proprietà del veicolo già esistenti in ( VeicoloPropertyIds SDK).
  • Compila VehiclePropConfig.configString con una breve descrizione della proprietà personalizzata. Ciò consente agli strumenti di controllo di integrità di contrassegnare la replica accidentale delle proprietà del veicolo esistente. Ad esempio, "stato luci di emergenza".
  • Accesso tramite CarPropertyManager (per i componenti Java) o tramite l'API Vehicle Network Service (per i nativi). Non modificare altre API per auto poiché ciò potrebbe portare a futuri problemi di compatibilità.
  • Dopo aver implementato le proprietà del fornitore, selezionare solo l'elenco delle autorizzazioni nell'enumerazione VehicleVendorPermission per le proprietà del fornitore. La mappatura delle autorizzazioni del fornitore alle proprietà del sistema interromperà CTS e VTS.

Gestione delle proprietà HVAC

È possibile utilizzare il VHAL per controllare l'HVAC impostando le proprietà relative all'HVAC. La maggior parte delle proprietà HVAC sono proprietà suddivise in zone, sebbene molte siano proprietà non suddivise in zone (globali). Le proprietà definite di esempio includono:

Proprietà Scopo
VEHICLE_PROPERTY_HVAC_TEMPERATURE_SET Impostare la temperatura per zona.
VEHICLE_PROPERTY_HVAC_RECIRC_ON Controllo del ricircolo per zona.

Per visualizzare un elenco completo delle proprietà HVAC, cerca VEHICLE_PROPERTY_HVAC_* in types.hal . Quando la proprietà HVAC utilizza VehicleAreaSeat , si applicano regole aggiuntive per la mappatura di una proprietà HVAC suddivisa in zone agli ID area. Ogni posto disponibile nell'auto deve far parte di un ID area nell'array ID area.

Esempio Uno. Un'auto ha due sedili anteriori ( ROW_1_LEFT, ROW_1_RIGHT ) e tre sedili posteriori ( ROW_2_LEFT, ROW_2_CENTER, ROW_2_RIGHT ). L'auto ha due centraline di controllo della temperatura: lato guida e lato passeggero.

  • Un set di mappatura valido di ID area per HVAC_TEMPERATURE SET è:
    • ROW_1_LEFT | ROW_2_LEFT
    • ROW_1_RIGHT | ROW_2_CENTER | ROW_2_RIGHT
  • Una mappatura alternativa per la stessa configurazione hardware è:
    • ROW_1_LEFT | ROW_2_LEFT | ROW_2_CENTER
    • ROW_1_RIGHT | ROW_2_RIGHT

Esempio due. Un'auto ha tre file di sedili con due posti nella prima fila ( ROW_1_LEFT, ROW_1_RIGHT ), tre posti nella seconda ( ROW_2_LEFT, ROW_2_CENTER, ROW_2_RIGHT ) e tre nella terza fila ( ROW_3_LEFT, ROW_3_CENTER, ROW_3_RIGHT ). L'auto ha tre unità di controllo della temperatura: lato guida, lato passeggero e posteriore. Un modo ragionevole per mappare HVAC_TEMPERATURE_SET agli ID area è come un array di tre elementi:

  • ROW_1_LEFT
  • ROW_1_RIGHT
  • ROW_2_LEFT | ROW_2_CENTER | ROW_2_RIGHT | ROW_3_LEFT | ROW_3_CENTER | ROW_3_RIGHT

Gestione delle proprietà del sensore

Le proprietà del sensore VHAL rappresentano i dati del sensore reale o le informazioni sulla politica come lo stato di guida. Alcune informazioni del sensore (come lo stato di guida e la modalità giorno/notte) sono accessibili da qualsiasi app senza restrizioni poiché i dati sono obbligatori per creare un'applicazione sicura per il veicolo. Altre informazioni del sensore (come la velocità del veicolo) sono più sensibili e richiedono autorizzazioni specifiche che gli utenti possono gestire.

Vedere le proprietà del sensore supportate (in types.hal ).

Servizio mappe veicoli

Il Vehicle Map Service (VMS) fornisce un meccanismo per lo scambio di dati cartografici tra i clienti attraverso un'interfaccia pub/sub per supportare le funzioni comuni del veicolo, come i sistemi avanzati di assistenza alla guida (ADAS) . I client possono includere i sistemi del veicolo che si interfacciano tramite la proprietà VMS nel VHAL o nelle applicazioni Android privilegiate. I dati condivisi su VMS devono essere limitati ai dati cartografici per l'utilizzo da parte dei sistemi del veicolo e delle app di supporto.

VMS è destinato all'uso solo nelle implementazioni di Android Automotive; AOSP non contiene client predefiniti che pubblicano o sottoscrivono VMS. Per la proprietà VMS in VHAL, i tipi di messaggio e le strutture dati sono descritti in VHAL 2.0 nell'enumerazione VmsMessageType , che elenca i tipi di messaggi VMS supportati. Questo enum viene utilizzato come primo numero intero nell'array di interi della proprietà del veicolo e determina come viene decodificato il resto del messaggio.