廣播電台 HAL

以下各節說明如何使用硬體抽象層 (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 HAL:開啟新的調諧器工作階段時,必須終止舊的工作階段。
  • AIDL HAL:由於沒有可用的調諧器工作階段,因此只需要設定調音器回呼。 如果存在,則應取消設定舊回呼。
HIDL 2.0 產生openSession(ITunerCallback callback) (Result result, ITunerSession session)
AIDL void setTunerCallback(in ITunerCallback callback)
說明:
  • HIDL HAL:關閉調諧器工作階段不得失敗,只能發出一次。
  • AIDL HAL:沒有調音器,只需要設定調音器回呼。
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 中)。 如果 ResultstatusOK,表示調音器回呼 調整時必須呼叫 tuneFailedcurrentProgramInfoChanged 工作失敗 (例如因逾時) 或完成

同樣地,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 為 已新增。所有調整、跳轉和步數作業都必須在這段時間內完成。
  • 列舉 RDSDeemphasis 已從 AIDL 中移除,並定義為 const int 位置:AmFmRegionConfig。對應,fmDeemphasisProgramInfo 中的 fmRds 會宣告為 int, 查看各自的旗標同時,D50D75 已重新命名為 DEEMPHASIS_D50DEEMPHASIS_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