以下各節說明如何使用硬體抽象層 (HAL), 實作廣播電台。
廣播電台 HAL 介面
廣播無線電 HAL 提供硬體層級的資料結構和介面 安裝廣播無線電,例如 AM/FM 和 DAB 無線電
HIDL 2.0 和 AIDL 介面
廣播無線電 HAL 會使用以下各節所述的介面。
通知接聽器
IAnnouncementListener
是公告事件監聽器的回呼介面,
註冊在廣播電台 HAL 上即可接收公告。介面如下
方法:
通知接聽器 | ||
---|---|---|
說明:每當公告清單出現時呼叫 已變更。 | ||
HIDL 2.0 | oneway onListUpdated(vec<Announcement> announcements) |
|
AIDL | oneway void onListUpdated(in Announcement[] announcements) |
拉柄
ICloseHandle
是一般的關閉控點,用於移除不需要的回呼
啟用介面。
拉柄 | ||
---|---|---|
說明:關閉帳號代碼。 | ||
HIDL 2.0 | close() |
|
AIDL | void close() |
ITunerCallback
ITunerCallback
是廣播電台 HAL 呼叫的回呼介面,
將更新傳送至 HAL 用戶端服務。
ITunerCallback | ||
---|---|---|
說明:HAL 在調整作業時呼叫 無法同步失敗 (調整、跳轉 (在 AIDL 中) 或掃描 (在 HIDL 中) 和步驟)。 | ||
HIDL 2.0 | oneway onCurrentProgramInfoChanged(ProgramInfo info) |
|
AIDL | void onCurrentProgramInfoChanged(in ProgramInfo info) |
|
說明:調整、跳轉 (AIDL) 或掃描時呼叫 (在 HIDL 中) 或步驟成功。 | ||
HIDL 2.0 | oneway onTuneFailed(Result result, ProgramSelector selector) |
|
AIDL | void onTuneFailed(in Result result, in ProgramSelector selector) |
|
說明:調整、跳轉 (AIDL) 或掃描時呼叫 (在 HIDL 中) 或步驟成功。 | ||
HIDL 2.0 | oneway onCurrentProgramInfoChanged(ProgramInfo info) |
|
AIDL | void onCurrentProgramInfoChanged(in ProgramInfo info) |
|
說明:在程式清單更新時呼叫;這個 每個區塊的大小不得超過 500 KB | ||
HIDL 2.0 | oneway onProgramListUpdated(ProgramListChunk chunk) |
|
AIDL | oneway onProgramListUpdated(ProgramListChunk chunk) |
|
說明:在天線連線或連接天線時呼叫 已中斷連線。 | ||
HIDL 2.0 | oneway onAntennaStateChange(bool connected) |
|
AIDL | void onCurrentProgramInfoChanged(in ProgramInfo info) |
|
說明:當供應商專屬參數時呼叫
值會在 HAL 內部更新 (不會在
setParameters )。 |
||
HIDL 2.0 | oneway onParametersUpdated(vec<VendorKeyValue> parameters) |
|
AIDL | void onParametersUpdated(in VendorKeyValue[] parameters) |
|
說明:AIDL 的新功能。在 config 標記
HAL 內部更新 (不應
叫用 setConfigFlag 後)。 |
||
HIDL 2.0 | 不適用。 | |
AIDL | void onConfigFlagUpdated(in ConfigFlag flag, in boolean value) |
廣播電台
IBroadcastRadio
是廣播電台 HAL 的主要介面。在 HIDL 中
2.0 HAL,使用調整器的 ITunerSession
介面呼叫作業。不過,
最多只會啟用一個調音器 (前提是每個廣播無線電 HAL 執行個體只有一個調音器)
方塊)。
ITunerSession
已從 AIDL 介面中移除,其介面已移至
IBroadcastRadio
。
廣播電台 | ||
---|---|---|
說明:取得模組及其說明 即便沒有技術背景,也能因這些工具的功能而受益 | ||
HIDL 2.0 | getProperties() generates (Properties properties) |
|
AIDL | Properties getProperties() |
|
說明:擷取目前或可能的 AM/FM 區域設定 | ||
HIDL 2.0 | getAmFmRegionConfig(bool full) generates (Result result, AmFmRegionConfig
config) |
|
AIDL | AmFmRegionConfig getAmFmRegionConfig(bool full) |
|
說明:擷取目前的 DAB 區域 此外還會從 0 自動調整資源配置 您完全不必調整資源調度設定 | ||
HIDL 2.0 | getDabRegionConfig() generates (Result result, vec<DabTableEntry>
config) |
|
AIDL | DabTableEntry[] getDabRegionConfig() |
|
說明:從無線電模組快取中取得圖片。 在 AIDL 中,圖片大小必須小於 1 MB 原因是繫結器交易緩衝區的硬性限制。 | ||
HIDL 2.0 | getImage(uint32_t id) generates (vec<uint8_t> image) |
|
AIDL | byte[] getImage(in int id) |
|
說明:註冊公告事件監聽器。 | ||
HIDL 2.0 | registerAnnouncementListener(vec<AnnouncementType>
enabled,IAnnouncementListener listener) generates (Result result, ICloseHandle
closeHandle) |
|
AIDL | ICloseHandle registerAnnouncementListener(in IAnnouncementListener listener, in
AnnouncementType[] enabled) |
|
說明:
|
||
HIDL 2.0 | 產生openSession(ITunerCallback callback)
(Result result, ITunerSession session) |
|
AIDL | void setTunerCallback(in ITunerCallback callback) |
|
說明:
|
||
HIDL 2.0 | close() |
|
AIDL | unsetTunerCallback() |
|
說明:對指定節目進行調整。 | ||
HIDL 2.0 | tune(ProgramSelector program) generates (Result result) |
|
AIDL | void tune(in ProgramSelector program) |
|
Description: 搜尋下一個有效方案,
air。為避免 AIDL 中的混淆
scan 已重新命名為 seek 。
|
||
HIDL 2.0 | scan(bool directionUp, bool skipSubChannel) generates (Result result) |
|
AIDL | void seek(in boolean directionUp, in boolean skipSubChannel) |
|
說明:相鄰頻道的步驟,可能略有不同 因此任何計畫都可能使用 | ||
HIDL 2.0 | step(bool directionUp) generates (Result result) |
|
AIDL | void step(in boolean directionUp) |
|
說明:取消待處理的調整、掃描 (在 HIDL 中) 或跳轉 (在 AIDL 中) 或步數作業 | ||
HIDL 2.0 | cancel() |
|
AIDL | void cancel() |
|
說明:將篩選器套用至計畫清單,
開始透過
onProgramListUpdated 回呼。 |
||
HIDL 2.0 | startProgramListUpdates(ProgramFilter filter) generates (Result result) |
|
AIDL | void startProgramListUpdates(in ProgramFilter filter) |
|
說明:停止傳送計畫清單更新。 | ||
HIDL 2.0 | stopProgramListUpdates() |
|
AIDL | void stopProgramListUpdates() |
|
說明:擷取特定指定條件的目前設定 config 標記 | ||
HIDL 2.0 | isConfigFlagSet(ConfigFlag flag) generates (Result result, bool value) |
|
AIDL | boolean isConfigFlagSet(in ConfigFlag flag) |
|
說明:設定指定的設定標記。 | ||
HIDL 2.0 | setConfigFlag(ConfigFlag flag, bool value) generates (Result result) |
|
AIDL | void setConfigFlag(in ConfigFlag flag, boolean value) |
|
說明:設定供應商專屬的參數值。 | ||
HIDL 2.0 | setParameters(vec<VendorKeyValue> parameters)
產生、 (vec<VendorKeyValue> results) |
|
AIDL | VendorKeyValue[] setParameters(in VendorKeyValue[] parameters) |
|
說明:擷取供應商專屬的參數值。 | ||
HIDL 2.0 | getParameters(vec<string> keys) generates (vec<VendorKeyValue>
parameters) |
|
AIDL | VendorKeyValue[] getParameters(in String[] keys) |
介面說明
非同步行為
每次調整作業 (例如調整、掃描 (使用 HIDL) 或搜尋 (在 AIDL) 中) 都可能會 執行緒很耗時,而且執行緒不應長時間遭到封鎖, 安排耗時的作業稍後執行,然後快速傳回狀態或結果。詳細說明 每項作業都應該:
- 取消所有待處理的調整作業。
- 檢查系統能否根據方法輸入的內容及 調音器
- 為調整工作排定時間,然後傳回
Result
(位於 HIDL) 或status
(位於 AIDL 中)。 如果Result
或status
為OK
,表示調音器回呼 調整時必須呼叫tuneFailed
或currentProgramInfoChanged
工作失敗 (例如因逾時) 或完成
同樣地,startProgramListUpdates
也會排定耗時的工作
更新計劃清單以稍後進行,並且快速傳回狀態或結果。方法
會先取消待處理的更新要求,然後安排更新工作並快速傳回
結果。
競爭狀況
由於調整作業的非同步行為 (例如調整、掃描 (使用 HIDL) 或搜尋時)
(在 AIDL 中) 和步驟),取消作業與調整作業之間存在競爭狀況
作業。在 HAL 完成調整作業後和cancel
回呼完成後,可以忽略取消作業,且應完成回呼程序,並且應接收到回呼
HAL 用戶端
同樣地,如果在 HAL 完成程式後呼叫 stopProgramListUpdates
更新清單,並在 onCurrentProgramInfoChanged
回呼完成之前
stopProgramListUpdates
可以忽略,且回呼應該完成。
資料大小上限
由於繫結器交易緩衝區有固定限制,因此部分介面的資料限制 在 AIDL HAL 中更清楚傳遞可能較大規模資料的方法。
getImage
要求傳回的圖片小於 1 MB。onProgramListUpdate
要求每個chunk
必須小於 500 KB。 大型程式清單必須依 HAL 實作分割為多個區塊,再透過 多個回呼。
AIDL HAL 資料結構的異動
除了介面中的變更之外,資料結構也已套用這些變更 定義採用 AIDL 技術的廣播電台 AIDL HAL。
Constant
列舉已從 AIDL 中移除,並定義為IBroadcastRadio
。同時,ANTENNA_DISCONNECTED_TIMEOUT_MS
已重新命名 至ANTENNA_STATE_CHANGE_TIMEOUT_MS
。新的常數TUNER_TIMEOUT_MS
為 已新增。所有調整、跳轉和步數作業都必須在這段時間內完成。- 列舉
RDS
和Deemphasis
已從 AIDL 中移除,並定義為 const int 位置:AmFmRegionConfig
。對應,fmDeemphasis
和ProgramInfo
中的fmRds
會宣告為 int, 查看各自的旗標同時,D50
和D75
已重新命名為DEEMPHASIS_D50
和DEEMPHASIS_D75
。 - 已在 AIDL 中移除列舉
ProgramInfoFlags
,並定義為以下字串中的常數: 已新增前置字串FLAG_
的ProgramInfo
。相對來說ProgramInfo
中的infoFlags
會宣告為 int,位元運算結果 狀態。TUNED
也已重新命名為FLAG_TUNABLE
,以更妥善地描述 定義可調整的電台類型 - 在
AmFmBandRange
中,scanSpacing
已重新命名為seekSpacing
,因為在 AIDL 中的scan
已重新命名為seek
。 - 由於 union 的概念是在 AIDL 中導入,
MetadataKey
和 系統不再使用 HIDL HAL 中定義的Metadata
。AIDL 聯集Metadata
是在 AIDL HAL 中定義MetadataKey
中先前的每個列舉值現已成為 根據其定義,包含類型為字串或 int 的Metadata
。