以降のセクションでは、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 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) |
|
説明: オンラインのデバイスで次の有効な番組を検索します。
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
またはstatus
がOK
の場合、チューナー コールバック チューニングを行うときは、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
新しい定数 intTUNER_TIMEOUT_MS
は次のとおりです。 追加されました。選局、シーク、ステップの各オペレーションはすべて、この時間内に完了する必要があります。- 列挙型
RDS
とDeemphasis
を AIDL で削除し、定数 int として定義しました (AmFmRegionConfig
)それに応じて、fmDeemphasis
とProgramInfo
のfmRds
は int として宣言されます。これは次のビット計算結果です。 表示されます。同時に、D50
とD75
の名前が次のように変更されました。 それぞれDEEMPHASIS_D50
とDEEMPHASIS_D75
です。 - 列挙型
ProgramInfoFlags
が AIDL で削除され、 int 関数として定義されました。 接頭辞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
に含まれていた各列挙値は、次のフィールドになりました。Metadata
は、定義に応じて文字列型または int 型に置き換えます。