브로드캐스트 라디오 HAL

다음 섹션에서는 하드웨어 추상화 계층 (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 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)
설명: 다음에서 유효한 다음 프로그램을 찾습니다. 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 또는 statusOK이면 튜너 콜백입니다. 조정 시 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 int TUNER_TIMEOUT_MS는 다음과 같습니다. 추가되었습니다. 모든 미세 조정, 탐색, 단계 작업은 이 시간 내에 완료되어야 합니다.
  • enum RDSDeemphasis가 AIDL에서 삭제되고 const int로 정의됩니다. (AmFmRegionConfig) 이에 따라 fmDeemphasisProgramInfofmRds는 다음의 비트 계산 결과인 int로 선언됩니다. 확인할 수 있습니다 한편 D50D75는 다음과 같이 이름이 변경됩니다. 각각 DEEMPHASIS_D50DEEMPHASIS_D75입니다.
  • enum ProgramInfoFlags가 AIDL에서 삭제되고 다음에서 const int로 정의됩니다. 프리픽스 FLAG_가 있는 ProgramInfo가 추가되었습니다. 이에 따라 ProgramInfoinfoFlags가 비트 계산 결과인 int로 선언되었습니다. 개의 플래그입니다. TUNED는 더 잘 설명하기 위해 FLAG_TUNABLE로도 이름이 변경됩니다. 스테이션에 맞출 수 있다는 의미입니다.
  • AmFmBandRange에서 scanSpacing의 이름이 다음으로 변경됨: seekSpacing: scan가 AIDL에서 seek로 이름이 변경되었기 때문입니다.
  • union 개념이 AIDL에 도입되었으므로 MetadataKey 및 HIDL HAL에 정의된 Metadata는 더 이상 사용되지 않습니다. AIDL union Metadata AIDL HAL에 정의되어 있습니다. 이전에 MetadataKey에 있던 각 enum 값은 이제 정의에 따라 문자열 또는 정수 유형이 포함된 Metadata입니다.