Proprietà veicolo

L'interfaccia Vehicle Hardware Abstraction Layer (VHAL) definisce le proprietà che gli OEM possono implementare e contiene metadati della proprietà (ad esempio, se la proprietà è un valore intero 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

VHAL utilizza le seguenti interfacce:

  • getAllPropConfigs() genera (vec<VehiclePropConfig>propConfigs)
    Elenca la configurazione di tutte le proprietà supportate dal VHAL. CarService utilizza solo 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 una modifica del valore di una proprietà. Per la proprietà con zone, unsubscribe(IVehicleCallback callback, int32_t propId) genera (StatusCode status);

Il VHAL utilizza le seguenti interfacce di callback:

  • oneway onPropertyEvent(vec<VehiclePropValue>propValues);
    Invia una notifica relativa alla modifica del valore della proprietà del veicolo. Deve essere eseguita solo per le proprietà sottoscritte.
  • oneway onPropertySetError(StatusCode errorCode,int32_t propId,int32_tareaId);
    Restituisce l'errore a livello di VHAL globale o l'errore per proprietà. L'errore globale causa il riavvio dell'HAL, che può comportare il riavvio di altri componenti (incluse le applicazioni).

Proprietà del veicolo

Le proprietà possono essere di sola lettura, di sola scrittura (utilizzate per trasmettere informazioni a 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 area

VHAL definisce più tipi di area:

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

Ogni proprietà a zone deve utilizzare un tipo di area predefinito. Ogni tipo di area ha un insieme di bit flag definiti in un enum per il tipo di area. Ad esempio, l'area SEAT definisce gli enum 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à con zone sono indirizzate tramite ID area. Ogni proprietà con zone può supportare uno o più ID area. Un ID area è composto da uno o più flag della rispettiva enumerazione. Ad esempio, una proprietà che utilizza VehicleAreaSeat potrebbe utilizzare i seguenti ID area:

Articolo Descrizione
ROW_1_LEFT | ROW_1_RIGHT L'ID area vale per entrambi i posti anteriori.
ROW_2_LEFT Si applica solo al sedile posteriore sinistro.
ROW_2_RIGHT Si applica solo al sedile posteriore destro.

Stato proprietà

Ogni valore della proprietà è associato a un valore VehiclePropertyStatus. Indica lo stato attuale della proprietà:

Articolo Descrizione
AVAILABLE La proprietà è disponibile e il valore è valido.
UNAVAILABLE Il valore della proprietà non è al momento disponibile. Utilizzato per le funzionalità disattivate temporaneamente per una proprietà supportata.
ERROR C'è un problema con questa proprietà.

Configurazione di una proprietà

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

Variabile Descrizione
access r, w e rw
changeMode Rappresenta il modo in cui una proprietà viene monitorata, in base al cambiamento e non continuo.
areaConfigs areaId, min e max.
configArray Parametri di configurazione aggiuntivi.
configString Informazioni aggiuntive passate come stringa.
minSampleRate maxSampleRate
prop ID proprietà, int

Gestione delle proprietà delle zone

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

  • La chiamata get per la proprietà con zone include sempre l'ID area nella richiesta. Di conseguenza, viene restituito solo il valore corrente per l'ID area richiesto. Se la proprietà è globale, l'ID area è 0.
  • La chiamata set per la proprietà con zone include sempre l'ID area nella richiesta. Pertanto, viene modificato solo l'ID area richiesto.
  • La chiamata subscribe genera eventi per tutti gli ID area della proprietà.

Ricevere chiamate

Durante l'inizializzazione, il valore della proprietà potrebbe non essere ancora disponibile perché il messaggio della rete del veicolo corrispondente non è stato ancora ricevuto. In questi casi, la chiamata get dovrebbe restituire -EAGAIN. Alcune proprietà (ad esempio l'impianto di climatizzazione) hanno una proprietà di alimentazione on/off separata. La chiamata a get per una proprietà di questo tipo (quando è spenta) dovrebbe restituire uno stato UNAVAILABLE anziché un errore. Ad esempio, ottieni la temperatura dell'impianto di climatizzazione

Esempio di recupero dell&#39;impianto HVAC da VHAL

Figura 1. Ottieni temperatura dell'impianto di climatizzazione (CS = CarService, VHAL = HAL veicolo)

Impostare le chiamate

In un'operazione tipica, una chiamata set comporta l'invio di una richiesta di modifica alla rete del veicolo. Idealmente, una chiamata set è un'operazione asincrona che restituisce il risultato il più rapidamente possibile, ma può anche essere sincrona. Alcune chiamate set potrebbero richiedere dati iniziali per essere pronte, ma durante l'inizializzazione, questi dati potrebbero non essere ancora disponibili. In questi casi, la chiamataset 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 non è possibile eseguire set. Finché set non viene applicato, get non necessariamente restituisce lo stesso valore impostato. Ad esempio, set HVAC Temperature.

Esempio di impostazione dell&#39;impianto di climatizzazione VHAL

Figura 2. Imposta la temperatura dell'impianto di climatizzazione (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. Segui queste linee guida quando lavori 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
      Seleziona un tipo di area appropriato.
    • VehiclePropertyType
      Seleziona il tipo di dati corretto. Il tipo BYTES consente il passaggio di dati non elaborati, che è sufficiente nella maggior parte dei casi. L'invio frequente di big data tramite proprietà personalizzate può rallentare l'accesso alla rete dell'intero veicolo. Fai attenzione quando aggiungi un payload di grandi dimensioni.
    • 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à dei veicoli già esistenti nell'SDK (VehiclePropertyIds).
  • Compila VehiclePropConfig.configString con una breve descrizione della proprietà personalizzata. In questo modo, gli strumenti di controllo di congruità possono segnalare la replica accidentale delle proprietà dei veicoli esistenti. Ad esempio, "stato delle frecce di emergenza".
  • Accedi tramite CarPropertyManager (per i componenti Java) o tramite l'API Vehicle Network Service (per il formato nativo). Non modificare altre API dell'auto poiché ciò potrebbe portare a problemi di compatibilità futuri.
  • Dopo aver implementato le proprietà del fornitore, selezionasolo l'elenco delle autorizzazioni nell'enum VehicleVendorPermission per le proprietà del fornitore. Mappare le autorizzazioni del fornitore alle proprietà di sistema comporterà l'interruzione di CTS e VTS.

Gestione delle proprietà di climatizzazione

Puoi utilizzare VHAL per controllare l'impianto di climatizzazione impostando le proprietà relative all'impianto. La maggior parte delle proprietà HVAC è suddivisa in zone, anche se alcune non sono suddivise in zone (globali). Ecco alcune proprietà definite di esempio:

Proprietà Finalità
VEHICLE_PROPERTY_HVAC_TEMPERATURE_SET Imposta la temperatura per zona.
VEHICLE_PROPERTY_HVAC_RECIRC_ON Controlla la ricircolazione per zona.

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

Esempio 1. 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 unità di controllo della temperatura: lato conducente e lato passeggero.

  • Un insieme 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 2. Un'auto ha tre file di sedili con due sedili nella prima fila (ROW_1_LEFT, ROW_1_RIGHT), tre sedili 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 conducente, lato passeggero e posteriore. Un modo ragionevole per mappare HVAC_TEMPERATURE_SET agli ID area è usare 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à dei sensori VHAL rappresentano dati reali dei sensori o informazioni sulle norme, ad esempio lo stato di guida. Alcune informazioni dei sensori (ad esempio lo stato di guida e la modalità giorno/notte) sono accessibili a qualsiasi app senza limitazioni, in quanto i dati sono obbligatori per creare un'applicazione per veicoli sicura. Altre informazioni del sensore (ad esempio la velocità del veicolo) sono più sensibili e richiedono autorizzazioni specifiche che gli utenti possono gestire.

Scopri le proprietà dei sensori supportate (in types.hal).

servizio di mappe per il veicolo

Il servizio di mappe del veicolo (VMS) fornisce un meccanismo per scambiare dati delle mappe tra i clienti tramite un'interfaccia Pub/Sub al fine di supportare funzionalità comuni del veicolo, come gli sistemi avanzati di assistenza alla guida (ADAS). I clienti possono includere sistemi di veicoli che si interfacciano tramite la proprietà VMS nella VHAL o applicazioni per Android privilegiate. I dati condivisi sulle VM sono destinati a essere limitati alla mappatura dei dati affinché possano essere utilizzati dai sistemi dei veicoli e dalle app di supporto.

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