Bagian berikut ini menjelaskan cara menggunakan lapisan abstraksi hardware (HAL) untuk mengimplementasikan radio siaran.
Antarmuka HAL radio siaran
{i>Broadcast radio HAL<i} menyediakan struktur dan antarmuka data pada tingkat perangkat keras untuk mengimplementasikan radio siaran, seperti radio AM/FM dan DAB.
Antarmuka HIDL 2.0 dan AIDL
HAL radio siaran menggunakan antarmuka yang dijelaskan di bagian berikut.
IPengumumanListener
IAnnouncementListener
adalah antarmuka callback untuk pemroses pengumuman, yang
dapat didaftarkan di radio siaran HAL untuk menerima pengumuman. Antarmuka tersebut memiliki
metode:
IPengumumanListener | ||
---|---|---|
Deskripsi: Dipanggil setiap kali daftar pengumuman memiliki ubah. | ||
HIDL 2.0 | oneway onListUpdated(vec<Announcement> announcements) |
|
AIDL | oneway void onListUpdated(in Announcement[] announcements) |
ICloseHandle
ICloseHandle
adalah handle penutup umum untuk menghapus callback yang tidak memerlukan callback
antarmuka aktif.
ICloseHandle | ||
---|---|---|
Deskripsi: Menutup tuas. | ||
HIDL 2.0 | close() |
|
AIDL | void close() |
Callback ITuner
ITunerCallback
adalah antarmuka callback yang dipanggil oleh HAL radio siaran untuk
mengirim pembaruan ke layanan klien HAL.
Callback ITuner | ||
---|---|---|
Deskripsi: Dipanggil oleh HAL saat operasi tuning (tuning, mencari (di AIDL) atau memindai (dalam HIDL) dan langkah berhasil) gagal secara asinkron. | ||
HIDL 2.0 | oneway onCurrentProgramInfoChanged(ProgramInfo info) |
|
AIDL | void onCurrentProgramInfoChanged(in ProgramInfo info) |
|
Deskripsi: Dipanggil saat men-tuning, mencari (dalam AIDL), atau memindai (dalam HIDL), atau langkah berhasil. | ||
HIDL 2.0 | oneway onTuneFailed(Result result, ProgramSelector selector) |
|
AIDL | void onTuneFailed(in Result result, in ProgramSelector selector) |
|
Deskripsi: Dipanggil saat men-tuning, mencari (dalam AIDL), atau memindai (dalam HIDL), atau langkah berhasil. | ||
HIDL 2.0 | oneway onCurrentProgramInfoChanged(ProgramInfo info) |
|
AIDL | void onCurrentProgramInfoChanged(in ProgramInfo info) |
|
Deskripsi: Dipanggil saat daftar program diperbarui; tindakan setiap potongan harus dibatasi hingga 500 kiB. | ||
HIDL 2.0 | oneway onProgramListUpdated(ProgramListChunk chunk) |
|
AIDL | oneway onProgramListUpdated(ProgramListChunk chunk) |
|
Deskripsi: Dipanggil saat antena terhubung atau terputus. | ||
HIDL 2.0 | oneway onAntennaStateChange(bool connected) |
|
AIDL | void onCurrentProgramInfoChanged(in ProgramInfo info) |
|
Deskripsi: Dipanggil saat parameter khusus vendor
diperbarui secara internal di HAL (jangan panggil setelah memanggil
setParameters oleh klien HAL). |
||
HIDL 2.0 | oneway onParametersUpdated(vec<VendorKeyValue> parameters) |
|
AIDL | void onParametersUpdated(in VendorKeyValue[] parameters) |
|
Deskripsi: Baru di AIDL. Dipanggil saat flag konfigurasi
diperbarui secara internal di HAL (tidak boleh
dipanggil setelah memanggil setConfigFlag oleh klien HAL). |
||
HIDL 2.0 | Tidak berlaku. | |
AIDL | void onConfigFlagUpdated(in ConfigFlag flag, in boolean value) |
IBroadcastRadio
IBroadcastRadio
adalah antarmuka utama untuk siaran radio HAL. Di HIDL
2.0 HAL, menggunakan antarmuka ITunerSession
ke tuner untuk memanggil operasi. Namun, pada
sebagian besar tuner aktif pada satu waktu (asalkan setiap instance HAL radio siaran hanya memiliki satu tuner
{i>chip<i}).
ITunerSession
dihapus dari antarmuka AIDL dan antarmukanya dipindahkan ke
IBroadcastRadio
.
IBroadcastRadio | ||
---|---|---|
Deskripsi: Mendapatkan deskripsi modul dan kemampuan IT. | ||
HIDL 2.0 | getProperties() generates (Properties properties) |
|
AIDL | Properties getProperties() |
|
Deskripsi: Mengambil AM/FM saat ini atau yang memungkinkan konfigurasi region. | ||
HIDL 2.0 | getAmFmRegionConfig(bool full) generates (Result result, AmFmRegionConfig
config) |
|
AIDL | AmFmRegionConfig getAmFmRegionConfig(bool full) |
|
Deskripsi: Mengambil region DAB saat ini konfigurasi Anda. | ||
HIDL 2.0 | getDabRegionConfig() generates (Result result, vec<DabTableEntry>
config) |
|
AIDL | DabTableEntry[] getDabRegionConfig() |
|
Deskripsi: Mendapatkan gambar dari cache modul radio. Dalam AIDL, ukuran gambar harus kurang dari 1 MB karena adanya batas keras pada {i>buffer <i}transaksi binder. | ||
HIDL 2.0 | getImage(uint32_t id) generates (vec<uint8_t> image) |
|
AIDL | byte[] getImage(in int id) |
|
Deskripsi: Mendaftarkan pemroses pengumuman. | ||
HIDL 2.0 | registerAnnouncementListener(vec<AnnouncementType>
enabled,IAnnouncementListener listener) generates (Result result, ICloseHandle
closeHandle) |
|
AIDL | ICloseHandle registerAnnouncementListener(in IAnnouncementListener listener, in
AnnouncementType[] enabled) |
|
Deskripsi:
|
||
HIDL 2.0 | openSession(ITunerCallback callback) menghasilkan
(Result result, ITunerSession session) |
|
AIDL | void setTunerCallback(in ITunerCallback callback) |
|
Deskripsi:
|
||
HIDL 2.0 | close() |
|
AIDL | unsetTunerCallback() |
|
Deskripsi: Menyesuaikan program tertentu. | ||
HIDL 2.0 | tune(ProgramSelector program) generates (Result result) |
|
AIDL | void tune(in ProgramSelector program) |
|
Deskripsi: Mencari program valid berikutnya di
air. Untuk menghindari kebingungan
dalam AIDL,
scan diganti namanya menjadi seek .
|
||
HIDL 2.0 | scan(bool directionUp, bool skipSubChannel) generates (Result result) |
|
AIDL | void seek(in boolean directionUp, in boolean skipSubChannel) |
|
Deskripsi: Langkah-langkah ke saluran yang berdekatan, yang mungkin tidak diperlukan oleh program apa pun. | ||
HIDL 2.0 | step(bool directionUp) generates (Result result) |
|
AIDL | void step(in boolean directionUp) |
|
Deskripsi: Membatalkan pencarian, pemindaian (dalam HIDL), atau pencarian yang tertunda (di AIDL), atau operasi langkah. | ||
HIDL 2.0 | cancel() |
|
AIDL | void cancel() |
|
Deskripsi: Menerapkan filter ke daftar program dan
mulai mengirimkan pembaruan daftar program melalui
Callback onProgramListUpdated . |
||
HIDL 2.0 | startProgramListUpdates(ProgramFilter filter) generates (Result result) |
|
AIDL | void startProgramListUpdates(in ProgramFilter filter) |
|
Deskripsi: Berhenti mengirim pembaruan daftar program. | ||
HIDL 2.0 | stopProgramListUpdates() |
|
AIDL | void stopProgramListUpdates() |
|
Deskripsi: Mengambil setelan saat ini dari item tertentu flag konfigurasi. | ||
HIDL 2.0 | isConfigFlagSet(ConfigFlag flag) generates (Result result, bool value) |
|
AIDL | boolean isConfigFlagSet(in ConfigFlag flag) |
|
Deskripsi: Menetapkan tanda konfigurasi yang diberikan. | ||
HIDL 2.0 | setConfigFlag(ConfigFlag flag, bool value) generates (Result result) |
|
AIDL | void setConfigFlag(in ConfigFlag flag, boolean value) |
|
Deskripsi: Menetapkan nilai parameter khusus vendor. | ||
HIDL 2.0 | setParameters(vec<VendorKeyValue> parameters)
menghasilkan, (vec<VendorKeyValue> results) |
|
AIDL | VendorKeyValue[] setParameters(in VendorKeyValue[] parameters) |
|
Deskripsi: Mengambil parameter value khusus vendor. | ||
HIDL 2.0 | getParameters(vec<string> keys) generates (vec<VendorKeyValue>
parameters) |
|
AIDL | VendorKeyValue[] getParameters(in String[] keys) |
Klarifikasi antarmuka
Perilaku asinkron
Karena setiap operasi tuning (misalnya, tuning, memindai (dalam HIDL) atau mencari (dalam AIDL), dan langkah) mungkin memakan waktu dan thread tidak boleh diblokir untuk waktu yang lama, operasi harus menjadwalkan operasi yang memakan waktu untuk terjadi kemudian dan dengan cepat mengembalikan status atau hasil. Secara rinci, setiap operasi harus:
- Batalkan semua operasi tuning yang tertunda.
- Periksa apakah operasi dapat diproses berdasarkan input metode dan status tuner.
- Jadwalkan tugas tuning, lalu tampilkan
Result
(dalam HIDL) ataustatus
(dalam AIDL) segera. JikaResult
ataustatus
adalahOK
, callback tunertuneFailed
ataucurrentProgramInfoChanged
harus dipanggil saat tuning tugas gagal (misalnya, karena waktu tunggu habis) atau selesai.
Demikian pula, startProgramListUpdates
juga menjadwalkan tugas yang memakan waktu
memperbarui daftar program untuk dilakukan nanti dan untuk mengembalikan status atau hasil dengan cepat. Metode
pertama-tama membatalkan permintaan pembaruan yang tertunda, lalu menjadwalkan tugas pembaruan dan
hasil pengujian tersebut.
Kondisi race
Karena perilaku operasi tuning yang asinkron (misalnya, tuning, pindai (di HIDL) atau cari
(di AIDL), dan langkah), ada kondisi race antara membatalkan operasi dan tuning
operasional bisnis. Jika cancel
dipanggil setelah HAL menyelesaikan operasi penyesuaian dan sebelum
callback selesai, pembatalan bisa diabaikan dan callback harus selesai dan diterima
oleh klien HAL.
Demikian pula, jika stopProgramListUpdates
dipanggil setelah HAL menyelesaikan program
pembaruan daftar dan sebelum callback onCurrentProgramInfoChanged
selesai,
stopProgramListUpdates
dapat diabaikan dan callback harus selesai.
Batas ukuran data
Karena ada batas pasti pada buffer transaksi binder, batas data untuk beberapa antarmuka metode yang meneruskan data dengan ukuran yang mungkin berukuran besar akan diklarifikasi dalam HAL AIDL.
getImage
mengharuskan gambar ditampilkan kurang dari 1 MB.onProgramListUpdate
mengharuskan setiapchunk
berukuran kurang dari 500 kiB. Daftar program yang lebih besar harus dibagi oleh implementasi HAL menjadi beberapa potongan dan dikirim melalui beberapa callback.
Perubahan pada struktur data HAL AIDL
Selain perubahan dalam antarmuka, perubahan ini telah diterapkan pada struktur data didefinisikan di radio siaran AIDL HAL, yang memanfaatkan AIDL.
- Enum
Constant
dihapus di AIDL dan ditetapkan sebagai konstanta int diIBroadcastRadio
. Sementara itu,ANTENNA_DISCONNECTED_TIMEOUT_MS
diganti namanya keANTENNA_STATE_CHANGE_TIMEOUT_MS
. Konstanta baru intTUNER_TIMEOUT_MS
adalah ditambahkan. Semua operasi penyesuaian, pencarian, dan langkah harus diselesaikan dalam waktu ini. - Enum
RDS
danDeemphasis
dihapus dalam AIDL dan ditetapkan sebagai const int diAmFmRegionConfig
. Dengan demikian, baikfmDeemphasis
maupunfmRds
diProgramInfo
dideklarasikan sebagai int, yakni hasil komputasi bit flag yang terkait. Sementara itu,D50
danD75
diganti namanya menjadiDEEMPHASIS_D50
danDEEMPHASIS_D75
. - Enum
ProgramInfoFlags
dihapus di AIDL dan ditetapkan sebagai konstanta int diProgramInfo
dengan awalanFLAG_
yang ditambahkan. Sejalan dengan itu,infoFlags
diProgramInfo
dideklarasikan sebagai int, sebuah hasil komputasi bit flag.TUNED
juga diganti namanya menjadiFLAG_TUNABLE
, untuk mendeskripsikan dengan lebih baik definisinya agar stasiun dapat di-tuning. - Di
AmFmBandRange
, namascanSpacing
diganti menjadiseekSpacing
, karenascan
diganti namanya menjadiseek
di AIDL. - Karena konsep union diperkenalkan dalam AIDL,
MetadataKey
danMetadata
yang ditentukan dalam HIDL HAL tidak digunakan lagi. Gabungan AIDLMetadata
didefinisikan dalam AIDL HAL. Setiap nilai enum sebelumnya diMetadataKey
sekarang menjadi kolom diMetadata
dengan jenis string atau int, bergantung pada definisinya.