Proprietà del veicolo

L'interfaccia Vehicle Hardware Abstraction Layer (VHAL) 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);
    Scrivi 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à 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 variazione del valore della proprietà del veicolo. Dovrebbe essere fatto solo per le proprietà sottoscritte.
  • oneway onPropertySetError(StatusCode errorCode,int32_t propId,int32_tareaId);
    Restituisce un errore di livello VHAL globale o un 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, di sola scrittura (utilizzate per passare 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à suddivisa in zone può avere più di un valore, in base al numero di zone supportate dalla proprietà.

Tipi di area

Il VHAL definisce più tipi di area:

Tipo di area Descrizione
GLOBAL Questa proprietà è un singleton e non ha più aree.
WINDOW Area basata su Windows, utilizza VehicleAreaWindow .
MIRROR Area basata su specchi, utilizza VehicleAreaMirror .
SEAT Area basata sui posti, utilizza VehicleAreaSeat .
DOOR Area basata sulle porte, utilizza VehicleAreaDoor .
WHEEL Area basata su ruote, utilizza VehicleAreaWheel .

Ogni proprietà suddivisa in zone deve utilizzare un tipo di area predefinito. Ciascun tipo di area dispone di una serie di flag di bit definiti in un'enumerazione per il tipo di area. Ad esempio, l'area SEAT definisce 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 della rispettiva enum. Ad esempio, una proprietà che utilizza VehicleAreaSeat potrebbe utilizzare i seguenti ID area:

Elemento Descrizione
ROW_1_LEFT | ROW_1_RIGHT L'Area ID si applica a entrambi i sedili anteriori.
ROW_2_LEFT Si applica solo al sedile posteriore sinistro.
ROW_2_RIGHT Si applica solo al sedile posteriore destro.

Stato della proprietà

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

Elemento 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 Qualcosa non va in questa proprietà.

Configurazione di una proprietà

Utilizzare VehiclePropConfig per fornire informazioni di configurazione per ciascuna proprietà. Le informazioni includono:

Variabile Descrizione
access r , w , rw
changeMode Rappresenta il modo in cui una proprietà viene monitorata, in base al cambiamento rispetto al continuo.
areaConfigs areaId , min e max .
configArray Ulteriori parametri di configurazione.
configString Informazioni aggiuntive 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 sottoproprietà con il valore dell'ID area specificato.

  • get chiamata per proprietà suddivisa in zone include sempre l'ID area nella richiesta. Pertanto, viene restituito solo il valore corrente per l'ID area richiesto. Se la proprietà è globale, l'ID area è 0.
  • set call per proprietà suddivisa in zone include sempre l'ID area nella richiesta. Pertanto, viene modificato solo l'ID Area richiesto.
  • la chiamata in 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 questi casi, la chiamata get dovrebbe restituire -EAGAIN . Alcune proprietà (come HVAC) hanno proprietà di alimentazione on/off separate. La chiamata a get per tale proprietà (quando spenta) dovrebbe restituire uno stato UNAVAILABLE anziché restituire un errore. Ad esempio, ottieni la temperatura HVAC

VHAL ottiene un esempio HVAC

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

Imposta chiamate

Una chiamata set è un'operazione asincrona che coinvolge la notifica di eventi dopo che è stata apportata una modifica richiesta. In un'operazione tipica, una chiamata set porta a effettuare una richiesta di modifica attraverso la rete del veicolo. Alcune chiamate di set potrebbero richiedere che i dati iniziali siano pronti ma durante l'inizializzazione tali dati potrebbero non essere ancora disponibili. In questi casi, la chiamata set dovrebbe restituire -EAGAIN . Alcune proprietà con accensione/spegnimento separati dovrebbero restituire -ESHUTDOWN quando la proprietà è spenta e non è possibile eseguire l'impostazione. Finché set non viene reso effettivo, get non restituisce necessariamente lo stesso valore di set. Ad esempio, set HVAC Temperature .

Esempio di set HVAC VHAL

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

Gestione delle proprietà personalizzate

Per supportare le esigenze specifiche dei partner, il 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 corretto. Il tipo BYTES consente il passaggio di dati grezzi che nella maggior parte dei casi sono sufficienti. L'invio frequente di big data tramite proprietà personalizzate può rallentare l'accesso all'intera rete del veicolo: fai attenzione quando aggiungi un grande carico utile.
    • Property ID
      Scegli un ID quattro nibble per la proprietà personalizzata.
  • Per prevenire la frammentazione dell'ecosistema, le proprietà personalizzate non devono essere utilizzate per replicare le proprietà del veicolo già esistenti in ( VehiclePropertyIds SDK).
  • Compila VehiclePropConfig.configString con una breve descrizione della proprietà personalizzata. Ciò consente agli strumenti di controllo dell'integrità di segnalare la replica accidentale delle proprietà del veicolo esistente. Ad esempio, "stato di luce di pericolo".
  • Accesso tramite CarPropertyManager (per componenti Java) o tramite l'API Vehicle Network Service (per nativo). Non modificare altre API per auto poiché ciò potrebbe causare problemi di compatibilità futuri.
  • Dopo aver implementato le proprietà del fornitore, seleziona solo l'elenco delle autorizzazioni VehicleVendorPermission per le proprietà del fornitore. La mappatura delle autorizzazioni del fornitore alle proprietà di 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 ricircolo per zona.

Per visualizzare un elenco completo delle proprietà HVAC, cercare VEHICLE_PROPERTY_HVAC_ 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 è dotata di 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 in prima fila ( ROW_1_LEFT, ROW_1_RIGHT ), tre posti nella seconda fila ( 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 centraline di controllo della temperatura: lato guida, lato passeggero e posteriore. Un modo ragionevole per mappare HVAC_TEMPERATURE_SET agli ID area è come un array a 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 reali del sensore o le informazioni sulle politiche come lo stato di guida. Alcune informazioni dei sensori (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 sui sensori (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 scambiare i dati delle mappe 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 nelle applicazioni VHAL o Android privilegiate. I dati condivisi su VMS devono essere limitati alla mappatura dei dati per l'utilizzo da parte dei sistemi del veicolo e delle app di supporto.

VMS è destinato all'uso solo nelle implementazioni Android Automotive; AOSP non contiene client predefiniti che pubblicano o si iscrivono a VMS. Per la proprietà VMS in VHAL, i tipi di messaggio e le strutture di 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 delle proprietà del veicolo e determina come viene decodificato il resto del messaggio.