Trasmissione radio HAL

Le seguenti sezioni descrivono come utilizzare l'HAL (Hardware Astrazione Layer) per implementare la radio broadcast.

Interfaccia HAL per Broadcast Radio

Broadcast Radio HAL fornisce strutture di dati e interfacce a livello di hardware per implementare le trasmissioni radio, ad esempio AM/FM e DAB.

Interfacce HIDL 2.0 e AIDL

L'HAL Broadcast Radio utilizza le interfacce descritte nelle sezioni seguenti.

Listener annunci

IAnnouncementListener è l'interfaccia di callback per il listener di annunci, che possono essere registrati su Broadcast Radio HAL per ricevere annunci. L'interfaccia presenta quanto segue metodo:

Listener annunci
Descrizione: viene chiamato ogni volta che l'elenco degli annunci contiene è cambiato.
HIDL 2.0 oneway onListUpdated(vec<Announcement> announcements)
AIDL oneway void onListUpdated(in Announcement[] announcements)

ICloseHandle

ICloseHandle è l'handle di chiusura generico che consente di rimuovere un callback che non richiede un un'interfaccia utente attiva.

ICloseHandle
Descrizione: chiudi l'handle.
HIDL 2.0 close()
AIDL void close()

Callback ITuner

ITunerCallback è l'interfaccia di callback chiamata da Broadcast Radio HAL per e inviare aggiornamenti al servizio client HAL.

Callback ITuner
Descrizione: viene chiamato dall'HAL durante un'operazione di ottimizzazione (correzione, ricerca (in AIDL) o scansione (in HIDL) e passaggio riuscito) non riesce in modo asincrono.
HIDL 2.0 oneway onCurrentProgramInfoChanged(ProgramInfo info)
AIDL void onCurrentProgramInfoChanged(in ProgramInfo info)
Descrizione: richiamato durante la ricerca, la correzione (in AIDL) o la scansione (in HIDL) o il passaggio riesce.
HIDL 2.0 oneway onTuneFailed(Result result, ProgramSelector selector)
AIDL void onTuneFailed(in Result result, in ProgramSelector selector)
Descrizione: richiamato durante la ricerca, la correzione (in AIDL) o la scansione (in HIDL) o il passaggio riesce.
HIDL 2.0 oneway onCurrentProgramInfoChanged(ProgramInfo info)
AIDL void onCurrentProgramInfoChanged(in ProgramInfo info)
Descrizione: chiamato quando l'elenco dei programmi viene aggiornato; il di ogni blocco deve essere limitata a 500 kiB.
HIDL 2.0 oneway onProgramListUpdated(ProgramListChunk chunk)
AIDL oneway onProgramListUpdated(ProgramListChunk chunk)
Descrizione: chiamato quando l'antenna è collegata o disconnesso.
HIDL 2.0 oneway onAntennaStateChange(bool connected)
AIDL void onCurrentProgramInfoChanged(in ProgramInfo info)
Descrizione: viene chiamato quando un parametro specifico del fornitore vengono aggiornati internamente nell'HAL (non richiamarli dopo aver chiamato setParameters dal client HAL).
HIDL 2.0 oneway onParametersUpdated(vec<VendorKeyValue> parameters)
AIDL void onParametersUpdated(in VendorKeyValue[] parameters)
Descrizione: novità AIDL. Richiamato se il flag di configurazione è aggiornate internamente nell'HAL (non deve essere richiamato dopo aver chiamato setConfigFlag dal client HAL).
HIDL 2.0 Non applicabile.
AIDL void onConfigFlagUpdated(in ConfigFlag flag, in boolean value)

IBroadcastRadio

IBroadcastRadio è l'interfaccia principale per la radio broadcast HAL. Nella formazione HIDL 2.0 HAL, usa l'interfaccia ITunerSession del sintonizzatore per chiamare il reparto. Tuttavia, all'indirizzo sia attivo un solo sintonizzatore alla volta (a condizione che ogni istanza HAL di radiodiffusione abbia un solo sintonizzatore) ). ITunerSession è stata rimossa dalle interfacce AIDL e le relative interfacce sono state spostate in IBroadcastRadio.

IBroadcastRadio
Descrizione: recupera la descrizione di un modulo e dei suoi le funzionalità di machine learning.
HIDL 2.0 getProperties() generates (Properties properties)
AIDL Properties getProperties()
Descrizione: recupera la frequenza AM/FM attuale o possibile e la configurazione della regione.
HIDL 2.0 getAmFmRegionConfig(bool full) generates (Result result, AmFmRegionConfig config)
AIDL AmFmRegionConfig getAmFmRegionConfig(bool full)
Descrizione: recupera la regione DAB attuale configurazione.
HIDL 2.0 getDabRegionConfig() generates (Result result, vec<DabTableEntry> config)
AIDL DabTableEntry[] getDabRegionConfig()
Descrizione: ottiene un'immagine dalla cache del modulo di opzione. In AIDL, le dimensioni delle immagini devono essere inferiori a 1 MB a causa di un limite rigido al buffer delle transazioni di binder.
HIDL 2.0 getImage(uint32_t id) generates (vec<uint8_t> image)
AIDL byte[] getImage(in int id)
Descrizione: registra il listener di annunci.
HIDL 2.0 registerAnnouncementListener(vec<AnnouncementType> enabled,IAnnouncementListener listener) generates (Result result, ICloseHandle closeHandle)
AIDL ICloseHandle registerAnnouncementListener(in IAnnouncementListener listener, in AnnouncementType[] enabled)
Descrizione:
  • HIDL HAL: quando viene aperta una nuova sessione di sintonizzatore, quella precedente deve essere terminata.
  • AIDL HAL: dato che non è disponibile nessuna sessione del sintonizzatore, è necessario impostare solo il callback del sintonizzatore. Se esiste, il callback precedente non deve essere impostato.
HIDL 2.0 openSession(ITunerCallback callback) genera (Result result, ITunerSession session)
AIDL void setTunerCallback(in ITunerCallback callback)
Descrizione:
  • HIDL HAL: la chiusura di una sessione di sintonizzatore non deve fallire e deve essere effettuata una sola volta.
  • AIDL HAL: non è presente alcun sintonizzatore e occorre disimpostare solo il callback del sintonizzatore.
HIDL 2.0 close()
AIDL unsetTunerCallback()
Descrizione: si sintonizza su un programma specifico.
HIDL 2.0 tune(ProgramSelector program) generates (Result result)
AIDL void tune(in ProgramSelector program)
Descrizione: cerca il successivo programma valido nella aria. Per evitare confusione nell'AIDL, scan è stato rinominato in seek.
HIDL 2.0 scan(bool directionUp, bool skipSubChannel) generates (Result result)
AIDL void seek(in boolean directionUp, in boolean skipSubChannel)
Descrizione: passaggi per accedere al canale adiacente, che potrebbero non essere occupato da un programma.
HIDL 2.0 step(bool directionUp) generates (Result result)
AIDL void step(in boolean directionUp)
Descrizione: annulla l'in attesa di correzione, scansione (in HIDL) o ricerca (in AIDL) o operazioni di passo.
HIDL 2.0 cancel()
AIDL void cancel()
Descrizione: applica un filtro all'elenco dei programmi e inizia a inviare aggiornamenti sull'elenco del programma Chiamata onProgramListUpdated.
HIDL 2.0 startProgramListUpdates(ProgramFilter filter) generates (Result result)
AIDL void startProgramListUpdates(in ProgramFilter filter)
Descrizione: interrompe l'invio di aggiornamenti sull'elenco dei programmi.
HIDL 2.0 stopProgramListUpdates()
AIDL void stopProgramListUpdates()
Descrizione: recupera l'impostazione corrente di una determinata di configurazione del deployment.
HIDL 2.0 isConfigFlagSet(ConfigFlag flag) generates (Result result, bool value)
AIDL boolean isConfigFlagSet(in ConfigFlag flag)
Descrizione: imposta il flag di configurazione specificato.
HIDL 2.0 setConfigFlag(ConfigFlag flag, bool value) generates (Result result)
AIDL void setConfigFlag(in ConfigFlag flag, boolean value)
Descrizione: imposta i valori dei parametri specifici del fornitore.
HIDL 2.0 setParameters(vec<VendorKeyValue> parameters)

genera,

(vec<VendorKeyValue> results)
AIDL VendorKeyValue[] setParameters(in VendorKeyValue[] parameters)
Descrizione: consente di recuperare i valori dei parametri specifici del fornitore.
HIDL 2.0 getParameters(vec<string> keys) generates (vec<VendorKeyValue> parameters)
AIDL VendorKeyValue[] getParameters(in String[] keys)

Chiarimenti dell'interfaccia

Comportamento asincrono

Poiché ogni operazione di ottimizzazione (ad esempio, ottimizzazione, scansione (in HIDL) o ricerca (in AIDL) e passo) potrebbe richiedere molto tempo e il thread non deve essere bloccato per molto tempo, l'operazione pianificare operazioni dispendiose in termini di tempo da eseguire in un secondo momento e restituire rapidamente uno stato o un risultato. Nel dettaglio, ogni operazione deve:

  • Annulla tutte le operazioni di ottimizzazione in sospeso.
  • Controlla se l'operazione può essere elaborata in base agli input del metodo e allo stato del il tuo sintonizzatore.
  • Programma l'attività di ottimizzazione, quindi restituisci Result (in HIDL) o status (in AIDL) immediatamente. Se Result o status è OK, il callback del sintonizzatore È necessario chiamare tuneFailed o currentProgramInfoChanged durante l'ottimizzazione l'attività non è riuscita (ad esempio, a causa di un timeout) o è stata completata.

Allo stesso modo, startProgramListUpdates pianifica anche l'attività dispendiosa in termini di tempo, aggiornare l'elenco del programma in modo che venga eseguito in un secondo momento e per restituire rapidamente uno stato o un risultato. Il metodo annulla le richieste di aggiornamento in sospeso, quindi pianifica l'attività di aggiornamento e restituisce rapidamente o il risultato finale.

Gara

A causa del comportamento asincrono delle operazioni di ottimizzazione (ad esempio, tune, scan (in HIDL) o ricerca) (in AIDL) e passaggio), esiste una condizione di gara tra l'annullamento dell'operazione e l'ottimizzazione operazioni. Se cancel viene chiamato dopo che l'HAL completa un'operazione di ottimizzazione e prima il callback viene completato, l'annullamento può essere ignorato e il callback dovrebbe essere completato e ricevuto dal client HAL.

Analogamente, se stopProgramListUpdates viene chiamato dopo che l'HAL ha completato un programma dell'elenco aggiornato e prima che il callback onCurrentProgramInfoChanged venga completato, stopProgramListUpdates può essere ignorato e il callback deve essere completato.

Limite dimensione dati

Poiché esiste un limite fisso al buffer delle transazioni di binder, il limite dati per alcune interfacce metodi che trasmettono dati di dimensioni potenzialmente grandi sono chiariti nell'AIDL HAL.

  • getImage richiede che l'immagine restituita meno di 1 MB.
  • onProgramListUpdate richiede che ogni chunk sia inferiore a 500 kiB. Gli elenchi di programmi più grandi devono essere suddivisi in base all'implementazione dell'HAL in più blocchi e inviati più callback.

Modifiche nelle strutture di dati dell'HAL AIDL

Oltre alle modifiche alle interfacce, queste modifiche sono state applicate alle strutture dati definita in AIDL HAL, che sfrutta AIDL.

  • L'enumerazione Constant è stata rimossa in AIDL e definita come const int in IBroadcastRadio. Nel frattempo, ANTENNA_DISCONNECTED_TIMEOUT_MS è stato rinominato a ANTENNA_STATE_CHANGE_TIMEOUT_MS. Un nuovo const int TUNER_TIMEOUT_MS è aggiunto. Tutte le operazioni di ottimizzazione, ricerca e passo devono essere completate entro questo tempo.
  • Le enum RDS e Deemphasis sono state rimosse in AIDL e definite come const int a AmFmRegionConfig. Di conseguenza, fmDeemphasis e fmRds in ProgramInfo sono dichiarati come int, risultato di calcolo di un bit di i rispettivi flag. Nel frattempo, D50 e D75 vengono rinominati in DEEMPHASIS_D50 e DEEMPHASIS_D75, rispettivamente.
  • Le enum ProgramInfoFlags vengono rimosse in AIDL e definite come const int in ProgramInfo con prefisso FLAG_ aggiunto. Di conseguenza, infoFlags in ProgramInfo è dichiarato come int, un risultato di calcolo a bit di flag. Anche TUNED è stato rinominato FLAG_TUNABLE per descrivere meglio la definizione su cui è possibile sintonizzare la stazione.
  • In AmFmBandRange, scanSpacing è stato rinominato in seekSpacing, poiché scan è rinominato seek in AIDL.
  • Poiché il concetto di unione viene introdotto in AIDL, MetadataKey e I criteri Metadata definiti nell'HAL HIDL non vengono più utilizzati. Un'unione AIDL Metadata è definito in AIDL HAL. Ogni valore enum precedentemente in MetadataKey è ora un campo in Metadata con il tipo di stringa o int, a seconda delle relative definizioni.