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 2.0 | openSession(ITunerCallback callback) genera
(Result result, ITunerSession session) |
|
AIDL | void setTunerCallback(in ITunerCallback callback) |
|
Descrizione:
|
||
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) ostatus
(in AIDL) immediatamente. SeResult
ostatus
èOK
, il callback del sintonizzatore È necessario chiamaretuneFailed
ocurrentProgramInfoChanged
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 ognichunk
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 inIBroadcastRadio
. Nel frattempo,ANTENNA_DISCONNECTED_TIMEOUT_MS
è stato rinominato aANTENNA_STATE_CHANGE_TIMEOUT_MS
. Un nuovo const intTUNER_TIMEOUT_MS
è aggiunto. Tutte le operazioni di ottimizzazione, ricerca e passo devono essere completate entro questo tempo. - Le enum
RDS
eDeemphasis
sono state rimosse in AIDL e definite come const int aAmFmRegionConfig
. Di conseguenza,fmDeemphasis
efmRds
inProgramInfo
sono dichiarati come int, risultato di calcolo di un bit di i rispettivi flag. Nel frattempo,D50
eD75
vengono rinominati inDEEMPHASIS_D50
eDEEMPHASIS_D75
, rispettivamente. - Le enum
ProgramInfoFlags
vengono rimosse in AIDL e definite come const int inProgramInfo
con prefissoFLAG_
aggiunto. Di conseguenza,infoFlags
inProgramInfo
è dichiarato come int, un risultato di calcolo a bit di flag. AncheTUNED
è stato rinominatoFLAG_TUNABLE
per descrivere meglio la definizione su cui è possibile sintonizzare la stazione. - In
AmFmBandRange
,scanSpacing
è stato rinominato inseekSpacing
, poichéscan
è rinominatoseek
in AIDL. - Poiché il concetto di unione viene introdotto in AIDL,
MetadataKey
e I criteriMetadata
definiti nell'HAL HIDL non vengono più utilizzati. Un'unione AIDLMetadata
è definito in AIDL HAL. Ogni valore enum precedentemente inMetadataKey
è ora un campo inMetadata
con il tipo di stringa o int, a seconda delle relative definizioni.