W sekcjach poniżej opisujemy, jak korzystać z warstwy abstrakcji sprzętowej (HAL), aby i wdrożyć rozgłośnie radiowe.
Interfejs transmisji HAL radia
HAL radiowy nadajnik udostępnia struktury i interfejsy danych na poziomie sprzętowym, aby wdrożyć radio naziemne, takie jak radio AM/FM lub DAB.
Interfejsy HIDL 2.0 i AIDL
HAL transmisji radiowej wykorzystuje interfejsy opisane w poniższych sekcjach.
Detektor komunikatów
IAnnouncementListener
to interfejs wywołania zwrotnego dla detektora powiadomień, który
można zarejestrować się w radiu HAL, aby otrzymywać powiadomienia. Interfejs ma te elementy
metody:
Detektor komunikatów | ||
---|---|---|
Opis: wywołany za każdym razem, gdy na liście ogłoszeń została zmieniona. | ||
HIDL 2.0 | oneway onListUpdated(vec<Announcement> announcements) |
|
AIDL | oneway void onListUpdated(in Announcement[] announcements) |
ICloseHandle
ICloseHandle
to ogólny uchwyt zamykający służący do usuwania wywołania zwrotnego, który nie wymaga parametru
przy użyciu aktywnego interfejsu.
ICloseHandle | ||
---|---|---|
Opis: zamknij nick. | ||
HIDL 2.0 | close() |
|
AIDL | void close() |
Wywołanie zwrotne ITuner
ITunerCallback
to interfejs wywołania zwrotnego wywoływany przez radio HAL do
wysyłać aktualizacje do obsługi klienta HAL.
Wywołanie zwrotne ITuner | ||
---|---|---|
Opis: wywoływany przez HAL podczas operacji dostrajania (dostrajanie, przewijanie (w AIDL) lub skanowanie (w HIDL) i udany krok) kończy się asynchronicznie. | ||
HIDL 2.0 | oneway onCurrentProgramInfoChanged(ProgramInfo info) |
|
AIDL | void onCurrentProgramInfoChanged(in ProgramInfo info) |
|
Opis: wywoływany w przypadku dostrajania, przewijania (w AIDL) lub skanowania (w HIDL), albo krok powiódł się. | ||
HIDL 2.0 | oneway onTuneFailed(Result result, ProgramSelector selector) |
|
AIDL | void onTuneFailed(in Result result, in ProgramSelector selector) |
|
Opis: wywoływany w przypadku dostrajania, przewijania (w AIDL) lub skanowania (w HIDL), albo krok powiódł się. | ||
HIDL 2.0 | oneway onCurrentProgramInfoChanged(ProgramInfo info) |
|
AIDL | void onCurrentProgramInfoChanged(in ProgramInfo info) |
|
Opis: wywoływany po aktualizacji listy programów. każdy fragment powinien być ograniczony do 500 kiB. | ||
HIDL 2.0 | oneway onProgramListUpdated(ProgramListChunk chunk) |
|
AIDL | oneway onProgramListUpdated(ProgramListChunk chunk) |
|
Opis: wywołanie po podłączeniu anteny lub – rozłączono. | ||
HIDL 2.0 | oneway onAntennaStateChange(bool connected) |
|
AIDL | void onCurrentProgramInfoChanged(in ProgramInfo info) |
|
Opis: wywoływany w przypadku parametru danego dostawcy
wartości są aktualizowane wewnętrznie w HAL (nie wywoływaj po wywołaniu
setParameters przez klienta HAL). |
||
HIDL 2.0 | oneway onParametersUpdated(vec<VendorKeyValue> parameters) |
|
AIDL | void onParametersUpdated(in VendorKeyValue[] parameters) |
|
Opis: nowości w AIDL. Wywoływana, gdy flaga konfiguracji ma wartość
aktualizowane wewnętrznie w HAL (nie należy
wywołany po wywołaniu funkcji setConfigFlag przez klienta HAL). |
||
HIDL 2.0 | Nie dotyczy. | |
AIDL | void onConfigFlagUpdated(in ConfigFlag flag, in boolean value) |
Radio Nowy Świat
IBroadcastRadio
jest głównym interfejsem HAL radiowego. W ramach HIDL
2.0 HAL, użyj interfejsu ITunerSession
dostrajania, aby wywoływać operacje. Jednak na stronie
w danym momencie aktywna jest większość tunera HAL (pod warunkiem, że każde wystąpienie HAL ma tylko jeden tuner
).
Interfejs ITunerSession
został usunięty z interfejsów AIDL i przeniesiony do
IBroadcastRadio
Radio Nowy Świat | ||
---|---|---|
Opis: zapoznaj się z opisem modułu i jego opisu. funkcje zabezpieczeń. | ||
HIDL 2.0 | getProperties() generates (Properties properties) |
|
AIDL | Properties getProperties() |
|
Opis: pobiera bieżącą lub możliwą częstotliwość AM/FM konfiguracji regionu. | ||
HIDL 2.0 | getAmFmRegionConfig(bool full) generates (Result result, AmFmRegionConfig
config) |
|
AIDL | AmFmRegionConfig getAmFmRegionConfig(bool full) |
|
Opis: Pobiera bieżący region DAB konfiguracji. | ||
HIDL 2.0 | getDabRegionConfig() generates (Result result, vec<DabTableEntry>
config) |
|
AIDL | DabTableEntry[] getDabRegionConfig() |
|
Opis: pobiera obraz z pamięci podręcznej modułu radiowego. W AIDL rozmiar obrazu musi być mniejszy niż 1 MB z powodu sztywnego limitu w buforze transakcji powiązania. | ||
HIDL 2.0 | getImage(uint32_t id) generates (vec<uint8_t> image) |
|
AIDL | byte[] getImage(in int id) |
|
Opis: rejestruje detektor ogłoszenia. | ||
HIDL 2.0 | registerAnnouncementListener(vec<AnnouncementType>
enabled,IAnnouncementListener listener) generates (Result result, ICloseHandle
closeHandle) |
|
AIDL | ICloseHandle registerAnnouncementListener(in IAnnouncementListener listener, in
AnnouncementType[] enabled) |
|
Opis:
|
||
HIDL 2.0 | openSession(ITunerCallback callback) generuje
(Result result, ITunerSession session) |
|
AIDL | void setTunerCallback(in ITunerCallback callback) |
|
Opis:
|
||
HIDL 2.0 | close() |
|
AIDL | unsetTunerCallback() |
|
Opis: dostraja do określonego programu. | ||
HIDL 2.0 | tune(ProgramSelector program) generates (Result result) |
|
AIDL | void tune(in ProgramSelector program) |
|
Opis: szuka następnego prawidłowego programu na
powietrza. Aby uniknąć nieporozumień w AIDL,
Nazwa scan została zmieniona na seek .
|
||
HIDL 2.0 | scan(bool directionUp, bool skipSubChannel) generates (Result result) |
|
AIDL | void seek(in boolean directionUp, in boolean skipSubChannel) |
|
Opis: kroki dotyczące sąsiedniego kanału, które mogą nie być zajmowane przez jakikolwiek program. | ||
HIDL 2.0 | step(bool directionUp) generates (Result result) |
|
AIDL | void step(in boolean directionUp) |
|
Opis: anuluje oczekujące dostrajanie, skanowanie (w HIDL) lub przewijanie (w AIDL) czy operacji krokowych. | ||
HIDL 2.0 | cancel() |
|
AIDL | void cancel() |
|
Opis: stosuje filtr do listy programów oraz
rozpoczyna wysyłanie aktualizacji list programów przez
onProgramListUpdated oddzwonienie. |
||
HIDL 2.0 | startProgramListUpdates(ProgramFilter filter) generates (Result result) |
|
AIDL | void startProgramListUpdates(in ProgramFilter filter) |
|
Opis: przestaje wysyłać aktualizacje listy programów. | ||
HIDL 2.0 | stopProgramListUpdates() |
|
AIDL | void stopProgramListUpdates() |
|
Opis: Pobiera bieżące ustawienie danej wartości config. | ||
HIDL 2.0 | isConfigFlagSet(ConfigFlag flag) generates (Result result, bool value) |
|
AIDL | boolean isConfigFlagSet(in ConfigFlag flag) |
|
Opis: ustawia daną flagę konfiguracji. | ||
HIDL 2.0 | setConfigFlag(ConfigFlag flag, bool value) generates (Result result) |
|
AIDL | void setConfigFlag(in ConfigFlag flag, boolean value) |
|
Opis: ustawia wartości parametrów właściwe dla dostawcy. | ||
HIDL 2.0 | setParameters(vec<VendorKeyValue> parameters)
generuje, (vec<VendorKeyValue> results) |
|
AIDL | VendorKeyValue[] setParameters(in VendorKeyValue[] parameters) |
|
Opis: pobiera wartości parametrów związane z dostawcą. | ||
HIDL 2.0 | getParameters(vec<string> keys) generates (vec<VendorKeyValue>
parameters) |
|
AIDL | VendorKeyValue[] getParameters(in String[] keys) |
Wyjaśnienia dotyczące interfejsu
Zachowanie asynchroniczne
Każda operacja dostrajania (na przykład dostrajanie, skanowanie (w HIDL) lub przewijanie (w AIDL) i krok może jest czasochłonne, a wątek nie powinien być blokowany na długi czas, operacja zaplanować późniejsze wykonanie czasochłonnych operacji i szybko zwrócić stan lub wynik. Więcej informacji: każda operacja powinna:
- Anuluj wszystkie oczekujące operacje dostrajania.
- Sprawdź, czy operacja może zostać przetworzona w zależności od danych wejściowych metody i stanu w tunerze.
- Zaplanuj zadanie dostrajania, a następnie zwróć
Result
(w HIDL) lubstatus
(w AIDL) natychmiast. JeśliResult
lubstatus
toOK
, wywołanie zwrotne dostrajania Podczas dostrajania należy wywołać funkcjętuneFailed
lubcurrentProgramInfoChanged
nie udało się wykonać zadania (np. z powodu przekroczenia limitu czasu oczekiwania) lub już się zakończyło.
Podobnie startProgramListUpdates
planuje również czasochłonne zadanie:
zaktualizowanie listy programów tak, aby odbyło się później i szybko zwrócić stan lub wynik; Metoda
najpierw anuluje oczekujące żądania aktualizacji, a następnie planuje zadanie aktualizacji i szybko zwraca
wynik.
Warunek wyścigu
Ze względu na asynchroniczne zachowanie operacji dostrajania (na przykład dostrajania, skanowania (w HIDL) lub przewijania)
(w AIDL) i kroku), między anulowaniem operacji a dostrajaniem istnieje warunek wyścigu.
operacji. Jeśli funkcja cancel
jest wywoływana po zakończeniu operacji dostrajania HAL, ale przed
gdy oddzwanianie zostanie ukończone, możesz zignorować anulowanie i oddzwonić.
przez klienta HAL.
Podobnie, jeśli funkcja stopProgramListUpdates
jest wywoływana po zakończeniu programu przez HAL
a przed zakończeniem wywołania zwrotnego onCurrentProgramInfoChanged
,
Działanie stopProgramListUpdates
można zignorować, a wywołanie zwrotne zostanie wykonane.
Limit rozmiaru danych
Ponieważ bufor transakcji powiązania ma stały limit, limit danych w niektórym interfejsie metody przekazywania danych o potencjalnie dużej wielkości zostały wyjaśnione w zbiorze HAL AIDL.
- Funkcja
getImage
wymaga, aby obraz był o rozmiarze mniejszym niż 1 MB. onProgramListUpdate
wymaga, aby wartość każdej kolumnychunk
była mniejsza niż 500 kiB. Większe listy programów muszą zostać podzielone przez wdrożenie HAL na wiele części i wysyłane przez wiele wywołań zwrotnych.
Zmiany w strukturach danych HAL AIDL
Oprócz zmian w interfejsach zmiany te zostały również zastosowane do struktur danych. zdefiniowane w radiu AIDL HAL, który korzysta z AIDL.
- Wyliczenie
Constant
zostało usunięte z AIDL i zdefiniowane jako stałe int wIBroadcastRadio
W międzyczasie nazwaANTENNA_DISCONNECTED_TIMEOUT_MS
została zmieniona do:ANTENNA_STATE_CHANGE_TIMEOUT_MS
. Nowa liczba całkowita stałejTUNER_TIMEOUT_MS
to – dodano. Wszystkie operacje dostrajania, przewijania i kroków muszą zostać wykonane w tym czasie. - Wyliczenia
RDS
iDeemphasis
zostały usunięte w AIDL i zdefiniowane jako stałe int w aplikacjiAmFmRegionConfig
. ZarównofmDeemphasis
, jak ifmRds
wProgramInfo
są zadeklarowane jako liczba całkowita, wynik obliczeń bitowych odpowiednie flagi. W międzyczasie nazwyD50
iD75
zostały zmienione naDEEMPHASIS_D50
iDEEMPHASIS_D75
. - Wyliczenie
ProgramInfoFlags
zostało usunięte w AIDL i zdefiniowane jako stałe int wProgramInfo
z prefiksemFLAG_
. ParametrinfoFlags
w poluProgramInfo
jest zadeklarowany jako liczba całkowita (bitowe obliczenia) flag. NazwaTUNED
została również zmieniona naFLAG_TUNABLE
, aby lepiej opisać swoją definicję, do której można nastroić stację. - W
AmFmBandRange
nazwascanSpacing
została zmieniona naseekSpacing
, ponieważ nazwascan
została zmieniona naseek
w AIDL. - Ponieważ koncepcja union została wprowadzona w AIDL,
MetadataKey
ParametryMetadata
zdefiniowane w HAL HIDL nie są już używane. Związek AIDLMetadata
jest zdefiniowane w interfejsie AIDL HAL. Każda wartość wyliczenia wcześniej wMetadataKey
jest teraz polem wMetadata
z typem ciągu znaków lub liczbą całkowitą, w zależności od ich definicji.