Proprietà del veicolo

L'interfaccia hardware veicolo (livello di astrazione vhal) definisce le proprietà OEM possono implementare e contiene metadati proprietà (ad esempio, se la proprietà è un int e che modalità di commutazione sono ammessi). 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 per la 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 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 l'errore di livello VHAL globale o l'errore per proprietà. L'errore globale causa 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 al livello VHAL) o di lettura e scrittura (il supporto della maggior parte delle proprietà è facoltativo). Ogni proprietà è univocamente individuato 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 finestre, usa VehicleAreaWindow enum.
MIRROR Area sulla base di specchi, utilizza VehicleAreaMirror enum.
SEAT Area sulla base di posti a sedere, utilizza VehicleAreaSeat enum.
DOOR Area basata su porte, utilizza VehicleAreaDoor enum.
WHEEL Area base su ruote, utilizza VehicleAreaWheel enum.

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

  • 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 struttura tramite VehicleAreaSeat potrebbe utilizzare il seguente Area ID:

Articolo Descrizione
ROW_1_LEFT | ROW_1_RIGHT L'ID area 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 della proprietà viene fornito con un VehiclePropertyStatus valore. 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 Qualcosa non va in questa proprietà.

Configurazione di una proprietà

Utilizzare VehiclePropConfig di fornire le 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 base al cambiamento rispetto a quella continua.
areaConfigs areaId , min e max valori.
configArray Parametri di configurazione aggiuntivi.
configString Informazioni aggiuntive passate come stringa.
minSampleRate maxSampleRate
prop ID proprietà, int

Proprietà della zona di gestione

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

  • get chiamata per la proprietà a zone comprende 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 richiesta di proprietà suddivisa in zone comprende sempre l'area ID nella richiesta. Pertanto, viene modificato solo l'ID area richiesto.
  • subscribe chiamata genera eventi per zona tutti gli ID 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, il get chiamata deve restituire -EAGAIN . Alcune proprietà (come HVAC) hanno proprietà di accensione/spegnimento separate. Chiamata get per tale proprietà una (se spento) dovrebbe restituire un UNAVAILABLE di stato piuttosto che restituire un errore. Ad esempio, ottieni la temperatura HVAC

VHAL ottieni un esempio HVAC

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

Imposta chiamate

Un set chiamata è un'operazione asincrona che coinvolge la notifica degli eventi dopo una modifica richiesta è fatta. In una tipica operazione, un set chiamata porta a fare una richiesta di cambiamento attraverso rete di bordo. Alcuni set chiamate possono richiedere dati iniziali per essere pronta, ma durante l'inizializzazione, tali dati potrebbero non essere ancora disponibili. In questi casi, il set chiamata deve restituire -EAGAIN . Alcune proprietà con alimentazione separata on / off dovrebbe tornare -ESHUTDOWN quando la proprietà è spento e insieme non può essere fatto. Fino set è reso efficace, get non deve necessariamente restituire lo stesso valore di quello che è impostato. Ad esempio, set HVAC Temperature .

Esempio 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 proprietà personalizzate:

  • L'ID proprietà deve essere generato utilizzando i seguenti campi:
    • VehiclePropertyGroup:VENDOR
      Il VENDOR gruppo viene utilizzato solo per le proprietà personalizzate.
    • VehicleArea
      Seleziona un tipo di area appropriato.
    • VehiclePropertyType
      Seleziona il tipo di dati corretto. BYTES tipo permette il passaggio dei 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 grande carico utile.
    • Property ID
      Scegli un ID a quattro nibble per la proprietà personalizzata.
  • Per evitare la frammentazione degli ecosistemi, le proprietà personalizzate non devono essere utilizzati per le proprietà del veicolo replicare che già esistono nella ( VehiclePropertyIds SDK).
  • Compilare VehiclePropConfig.configString con una breve descrizione della proprietà personalizzata. Ciò consente agli strumenti di controllo dell'integrità di contrassegnare la replica accidentale delle proprietà dei veicoli esistenti. Ad esempio, "stato luci di emergenza".
  • Accesso tramite CarPropertyManager (per i componenti Java) o attraverso l'API Service Network veicolo (per nativo). Non modificare altre API per auto poiché ciò può portare a futuri problemi di compatibilità.
  • Dopo l'implementazione di proprietà del fornitore, selezionare solo la lista autorizzazioni nel VehicleVendorPermission enum 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 dal campione includono:

Proprietà Scopo
VEHICLE_PROPERTY_HVAC_TEMPERATURE_SET Impostare la temperatura per zona.
VEHICLE_PROPERTY_HVAC_RECIRC_ON Ricircolo di controllo per zona.

Per visualizzare un elenco completo delle proprietà HVAC, cercare VEHICLE_PROPERTY_HVAC_* in types.hal . Quando la proprietà HVAC utilizza VehicleAreaSeat , si applicano le regole aggiuntive per mappare una proprietà HVAC suddivisa in zone per id d'area. Ciascun posto disponibile nell'auto deve essere parte di un ID area nell'array ID area.

Esempio uno. Una macchina 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 guidatore e lato passeggero.

  • Una mappatura valida serie di Area ID 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. Una macchina ha tre file di sedili con due posti nella prima fila ( ROW_1_LEFT, ROW_1_RIGHT ), tre sedili della 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 è dotata di tre centraline di controllo della temperatura: lato guida, lato passeggero e posteriore. Un modo ragionevole per mappare HVAC_TEMPERATURE_SET a ID zona è 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 dati reali del sensore o informazioni sulle politiche 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 per veicoli sicura. 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 supportati (in types.hal ).

Servizio di mappa del veicolo

Il Map Service Vehicle (SCP) fornisce un meccanismo per lo scambio di dati tra client mappa attraverso un'interfaccia pub / sub per supportare caratteristiche del veicolo comuni, come Advanced Systems di assistenza alla guida (ADAS) . I client possono includere sistemi di veicoli che si interfacciano tramite la proprietà VMS nel VHAL o applicazioni Android privilegiate. I dati condivisi su VMS devono essere limitati ai dati delle mappe 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 si iscrivono a VMS. Per la proprietà VMS nel vhal, i tipi di messaggio e strutture dati sono descritti in vhal 2.0 nella VmsMessageType enum, 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.