ブロードキャスト ラジオ HAL

以降のセクションでは、Hardware Abstraction Layer(HAL)を使用して、 ブロードキャスト ラジオを実装します。

ブロードキャスト ラジオ HAL インターフェース

ブロードキャスト ラジオ HAL は、ハードウェア レベルでデータ構造とインターフェースを提供し、 AM/FM ラジオや DAB ラジオなどのブロードキャスト ラジオを実装する。

HIDL 2.0 インターフェースと AIDL インターフェース

ブロードキャスト ラジオ HAL では、以降のセクションで説明するインターフェースを使用します。

IAnnouncementListener

IAnnouncementListener は、通知リスナーのコールバック インターフェースです。 ブロードキャスト ラジオ HAL に登録して通知を受信できる。インターフェースには次のものがあります。 メソッド:

IAnnouncementListener
説明: 通知リストで 変更されました。
HIDL 2.0 oneway onListUpdated(vec<Announcement> announcements)
AIDL oneway void onListUpdated(in Announcement[] announcements)

ICloseHandle

ICloseHandle は、 使用できます。

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 KiB に制限する必要があります。
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 内で内部的に更新されます(呼び出し後に呼び出しは行わないでください)。 HAL クライアントによる setParameters)。
HIDL 2.0 oneway onParametersUpdated(vec<VendorKeyValue> parameters)
AIDL void onParametersUpdated(in VendorKeyValue[] parameters)
説明: AIDL の新機能です。構成フラグが HAL 内で内部的に更新される(または HAL クライアントによって setConfigFlag が呼び出された後に呼び出されます)。
HIDL 2.0 該当はありません。
AIDL void onConfigFlagUpdated(in ConfigFlag flag, in boolean value)

IBroadcastRadio

IBroadcastRadio は、ブロードキャスト ラジオ HAL のプライマリ インターフェースです。HIDL の場合 2.0 HAL では、チューナーへの ITunerSession インターフェースを使用してオペレーションを呼び出します。しかし、 ほとんどのチューナーが同時にアクティブになる(各ブロードキャスト ラジオ HAL インスタンスに 1 つのチューナーしかない場合)。 。 ITunerSession が AIDL インターフェースから削除され、そのインターフェースが IBroadcastRadio

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 リージョンを取得します。 できます。
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: チューナー セッションの終了は失敗してはならず、1 回のみ行う必要があります。
  • AIDL HAL: チューナーはなく、チューナー コールバックの設定のみを解除する必要があります。
HIDL 2.0 close()
AIDL unsetTunerCallback()
説明: 指定された番組に選局します。
HIDL 2.0 tune(ProgramSelector program) generates (Result result)
AIDL void tune(in ProgramSelector program)
説明: オンラインのデバイスで次の有効な番組を検索します。 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()
説明: 特定のプロジェクトの現在の設定を取得します。 使用します。
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 でのシーク、ステップなど)のたびに、 長時間にわたってスレッドをブロックしなければ、オペレーションを 時間のかかるオペレーションを後で実行するようにスケジュールし、ステータスや結果を迅速に返すことができます。具体的には 各オペレーションで以下を行う必要があります。

  • 保留中のすべての選局オペレーションをキャンセルします。
  • メソッド入力と チューナー。
  • チューニング タスクをスケジュールしてから、(HIDL で)Result を返すか、 status(AIDL 内)がすぐにコピーされます。 Result または statusOK の場合、チューナー コールバック チューニングを行うときは、tuneFailed または currentProgramInfoChanged を呼び出す必要があります。 タスクが失敗したか(タイムアウトなど)完了したかを確認します。

同様に、startProgramListUpdates は、時間のかかる次のタスクもスケジュール設定します。 後で実行してステータスや結果をすばやく返すようにプログラム リストを更新する。メソッド まず保留中の更新リクエストをキャンセルしてから、更新タスクをスケジュールして、 表示されます。

競合状態

選局オペレーション(HIDL での選局、スキャン(HIDL 内)、シークなど)の非同期動作による (AIDL )、ステップ)では、オペレーションのキャンセルとチューニングとの間で競合状態が発生します。 必要があります。HAL がチューニング オペレーションを完了した後で、その前に cancel が呼び出された場合 キャンセルは無視してかまいません。コールバックが完了して受信されるようにする必要があります。 HAL クライアントが管理します。

同様に、HAL がプログラムを完了した後に stopProgramListUpdates が呼び出された場合。 リストが更新され、onCurrentProgramInfoChanged コールバックが完了する前に、 stopProgramListUpdates は無視してかまいません。コールバックは完了します。

データサイズの上限

バインダ トランザクション バッファにはハードリミットがあるため、一部のインターフェースでは サイズが大きくなる可能性があるデータを渡すメソッドについては、AIDL HAL で明確化されています。

  • getImage では、返される画像が 1 MB 未満である必要があります。
  • onProgramListUpdate では、各 chunk を 500 KiB 未満にする必要があります。 これよりも大きい番組リストは、HAL 実装によって複数のチャンクに分割され、 複数のコールバックを経由させることです

AIDL HAL データ構造の変更

インターフェースの変更に加え、以下の変更がデータ構造にも適用されました。 ブロードキャスト ラジオ AIDL HAL で定義されています。

  • Constant 列挙型が AIDL で削除され、 IBroadcastRadio。同時に、ANTENNA_DISCONNECTED_TIMEOUT_MS の名前が変更されます 宛先: ANTENNA_STATE_CHANGE_TIMEOUT_MS新しい定数 int TUNER_TIMEOUT_MS は次のとおりです。 追加されました。選局、シーク、ステップの各オペレーションはすべて、この時間内に完了する必要があります。
  • 列挙型 RDSDeemphasis を AIDL で削除し、定数 int として定義しました (AmFmRegionConfig)それに応じて、fmDeemphasisProgramInfofmRds は int として宣言されます。これは次のビット計算結果です。 表示されます。同時に、D50D75 の名前が次のように変更されました。 それぞれ DEEMPHASIS_D50DEEMPHASIS_D75 です。
  • 列挙型 ProgramInfoFlags が AIDL で削除され、 int 関数として定義されました。 接頭辞 FLAG_ が追加された ProgramInfo。それに応じて ProgramInfoinfoFlags は int(ビットの計算結果)として宣言されます。 構成されます。また、説明をわかりやすくするために、TUNED の名前も FLAG_TUNABLE に変更されました。 その定義を表す名前です。
  • AmFmBandRange で、scanSpacing の名前が次のように変更されました。 seekSpacing。AIDL で scan の名前が seek に変更されているため。
  • UNION のコンセプトは AIDL で導入されたため、MetadataKey と HIDL HAL で定義された Metadata は使用されなくなりました。AIDL ユニオン Metadata AIDL HAL で定義されます。これまで MetadataKey に含まれていた各列挙値は、次のフィールドになりました。 Metadata は、定義に応じて文字列型または int 型に置き換えます。