다음 섹션에서는 하드웨어 추상화 계층 (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) |
|
설명: 프로그램 목록이 업데이트되면 호출됩니다. 크기는 500KiB로 제한해야 합니다. | ||
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 인스턴스에 튜너가 하나만 있는 경우)
칩).
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의 경우 이미지 크기는 1MB 미만이어야 합니다. 이는 바인더 트랜잭션 버퍼에 대한 엄격한 제한 때문입니다. | ||
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) 또는 탐색을 취소합니다. 또는 단계 연산으로 정의될 수 있습니다. | ||
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이 프로그램을 완료한 후 stopProgramListUpdates
가 호출되는 경우
목록 업데이트와 onCurrentProgramInfoChanged
콜백이 완료되기 전에
stopProgramListUpdates
를 무시할 수 있으며 콜백이 완료됩니다.
데이터 크기 한도
바인더 트랜잭션 버퍼에는 엄격한 제한이 있으므로 일부 인터페이스의 데이터 제한은 잠재적으로 큰 데이터를 전달하는 메서드는 AIDL HAL에 자세히 설명되어 있습니다.
getImage
는 반환되는 이미지 크기가 1MB 미만이어야 합니다.onProgramListUpdate
는 각chunk
의 크기가 500KiB 미만이어야 합니다. 더 큰 프로그램 목록은 HAL 구현을 통해 여러 청크로 분할하여 전송해야 합니다. 여러 콜백이 있습니다
AIDL HAL 데이터 구조 변경사항
인터페이스의 변경사항 외에도 이러한 변경사항은 데이터 구조에 적용되었습니다. 방송 라디오 AIDL HAL에 정의되어 있습니다. 이는 AIDL을 활용합니다.
Constant
enum은 AIDL에서 삭제되고 다음에서 const int로 정의됩니다.IBroadcastRadio
입니다. 한편ANTENNA_DISCONNECTED_TIMEOUT_MS
의 이름은ANTENNA_STATE_CHANGE_TIMEOUT_MS
에게 전송합니다. 새 const intTUNER_TIMEOUT_MS
는 다음과 같습니다. 추가되었습니다. 모든 미세 조정, 탐색, 단계 작업은 이 시간 내에 완료되어야 합니다.- enum
RDS
및Deemphasis
가 AIDL에서 삭제되고 const int로 정의됩니다. (AmFmRegionConfig
) 이에 따라fmDeemphasis
및ProgramInfo
의fmRds
는 다음의 비트 계산 결과인 int로 선언됩니다. 확인할 수 있습니다 한편D50
및D75
는 다음과 같이 이름이 변경됩니다. 각각DEEMPHASIS_D50
및DEEMPHASIS_D75
입니다. - enum
ProgramInfoFlags
가 AIDL에서 삭제되고 다음에서 const int로 정의됩니다. 프리픽스FLAG_
가 있는ProgramInfo
가 추가되었습니다. 이에 따라ProgramInfo
의infoFlags
가 비트 계산 결과인 int로 선언되었습니다. 개의 플래그입니다.TUNED
는 더 잘 설명하기 위해FLAG_TUNABLE
로도 이름이 변경됩니다. 스테이션에 맞출 수 있다는 의미입니다. AmFmBandRange
에서scanSpacing
의 이름이 다음으로 변경됨:seekSpacing
:scan
가 AIDL에서seek
로 이름이 변경되었기 때문입니다.- union 개념이 AIDL에 도입되었으므로
MetadataKey
및 HIDL HAL에 정의된Metadata
는 더 이상 사용되지 않습니다. AIDL unionMetadata
AIDL HAL에 정의되어 있습니다. 이전에MetadataKey
에 있던 각 enum 값은 이제 정의에 따라 문자열 또는 정수 유형이 포함된Metadata
입니다.