В следующих разделах описывается, как работать с уровнем аппаратной абстракции (HAL) для реализации радиовещания.
Радиовещательный интерфейс HAL
HAL радиовещания предоставляет структуры данных и интерфейсы на аппаратном уровне для реализации радиовещания, такого как радио AM/FM и DAB.
Интерфейсы HIDL 2.0 и AIDL
Вещательная радиостанция HAL использует интерфейсы, описанные в следующих разделах.
IОбъявлениеСлушатель
IAnnouncementListener
— это интерфейс обратного вызова для прослушивателя объявлений, который можно зарегистрировать на радиовещании HAL для получения объявлений. Интерфейс имеет следующие методы:
IОбъявлениеСлушатель | ||
---|---|---|
Описание: Вызывается всякий раз, когда список объявлений изменяется. | ||
ХИДЛ 2.0 | oneway onListUpdated(vec<Announcement> announcements) | |
АИДЛ | oneway void onListUpdated(in Announcement[] announcements) |
ICloseHandle
ICloseHandle
— это универсальный дескриптор закрытия для удаления обратного вызова, для которого не требуется активный интерфейс.
ICloseHandle | ||
---|---|---|
Описание: Закройте ручку. | ||
ХИДЛ 2.0 | close() | |
АИДЛ | void close() |
ITunerОбратный вызов
ITunerCallback
— это интерфейс обратного вызова, вызываемый широковещательной радиостанцией HAL для отправки обновлений в клиентскую службу HAL.
ITunerОбратный вызов | ||
---|---|---|
Описание: Вызывается HAL, когда операция настройки (настройка, поиск (в AIDL) или сканирование (в HIDL) и шаг завершаются успешно) завершается асинхронно. | ||
ХИДЛ 2.0 | oneway onCurrentProgramInfoChanged(ProgramInfo info) | |
АИДЛ | void onCurrentProgramInfoChanged(in ProgramInfo info) | |
Описание: Вызывается при настройке, поиске (в AIDL) или сканировании (в HIDL) или при успешном выполнении шага. | ||
ХИДЛ 2.0 | oneway onTuneFailed(Result result, ProgramSelector selector) | |
АИДЛ | void onTuneFailed(in Result result, in ProgramSelector selector) | |
Описание: Вызывается при настройке, поиске (в AIDL) или сканировании (в HIDL) или при успешном выполнении шага. | ||
ХИДЛ 2.0 | oneway onCurrentProgramInfoChanged(ProgramInfo info) | |
АИДЛ | void onCurrentProgramInfoChanged(in ProgramInfo info) | |
Описание: Вызывается при обновлении списка программ; размер каждого фрагмента должен быть ограничен 500 КБ. | ||
ХИДЛ 2.0 | oneway onProgramListUpdated(ProgramListChunk chunk) | |
АИДЛ | oneway onProgramListUpdated(ProgramListChunk chunk) | |
Описание: Вызывается, когда антенна подключена или отключена. | ||
ХИДЛ 2.0 | oneway onAntennaStateChange(bool connected) | |
АИДЛ | void onCurrentProgramInfoChanged(in ProgramInfo info) | |
Описание: Вызывается, когда значения параметров, специфичные для поставщика, обновляются внутри HAL (не вызывать после вызова setParameters клиентом HAL). | ||
ХИДЛ 2.0 | oneway onParametersUpdated(vec<VendorKeyValue> parameters) | |
АИДЛ | void onParametersUpdated(in VendorKeyValue[] parameters) | |
Описание: Новое в AIDL. Вызывается, когда флаг конфигурации обновляется внутри HAL (не следует вызывать после вызова setConfigFlag клиентом HAL). | ||
ХИДЛ 2.0 | Непригодный. | |
АИДЛ | void onConfigFlagUpdated(in ConfigFlag flag, in boolean value) |
IBroadcastRadio
IBroadcastRadio
— это основной интерфейс для радиовещания HAL. В HAL HIDL 2.0 используйте интерфейс ITunerSession
к тюнеру для вызова операций. Однако одновременно активен не более одного тюнера (при условии, что каждый экземпляр HAL радиовещания имеет только один чип тюнера). ITunerSession
был удален из интерфейсов AIDL, а его интерфейсы перенесены в IBroadcastRadio
.
IBroadcastRadio | ||
---|---|---|
Описание: Получите описание модуля и его возможностей. | ||
ХИДЛ 2.0 | getProperties() generates (Properties properties) | |
АИДЛ | Properties getProperties() | |
Описание: Получает текущую или возможную конфигурацию региона AM/FM. | ||
ХИДЛ 2.0 | getAmFmRegionConfig(bool full) generates (Result result, AmFmRegionConfig config) | |
АИДЛ | AmFmRegionConfig getAmFmRegionConfig(bool full) | |
Описание: извлекает текущую конфигурацию региона DAB. | ||
ХИДЛ 2.0 | getDabRegionConfig() generates (Result result, vec<DabTableEntry> config) | |
АИДЛ | DabTableEntry[] getDabRegionConfig() | |
Описание: Получает образ из кэша радиомодуля. В AIDL размер изображения должен быть меньше 1 МБ из-за жесткого ограничения на буфер транзакции связывателя. | ||
ХИДЛ 2.0 | getImage(uint32_t id) generates (vec<uint8_t> image) | |
АИДЛ | byte[] getImage(in int id) | |
Описание: Регистрирует прослушиватель объявлений. | ||
ХИДЛ 2.0 | registerAnnouncementListener(vec<AnnouncementType> enabled,IAnnouncementListener listener) generates (Result result, ICloseHandle closeHandle) | |
АИДЛ | ICloseHandle registerAnnouncementListener(in IAnnouncementListener listener, in AnnouncementType[] enabled) | |
Описание:
| ||
ХИДЛ 2.0 | openSession(ITunerCallback callback) генерирует (Result result, ITunerSession session) | |
АИДЛ | void setTunerCallback(in ITunerCallback callback) | |
Описание:
| ||
ХИДЛ 2.0 | close() | |
АИДЛ | unsetTunerCallback() | |
Описание: Настраивается на указанную программу. | ||
ХИДЛ 2.0 | tune(ProgramSelector program) generates (Result result) | |
АИДЛ | void tune(in ProgramSelector program) | |
Описание: Ищет следующую действительную программу в эфире . Чтобы избежать путаницы в AIDL, scan переименовывается в seek . | ||
ХИДЛ 2.0 | scan(bool directionUp, bool skipSubChannel) generates (Result result) | |
АИДЛ | void seek(in boolean directionUp, in boolean skipSubChannel) | |
Описание: Переход на соседний канал, который не может быть занят какой-либо программой. | ||
ХИДЛ 2.0 | step(bool directionUp) generates (Result result) | |
АИДЛ | void step(in boolean directionUp) | |
Описание: Отменяет ожидающие настройки, сканирование (в HIDL) или поиск (в AIDL) или пошаговые операции. | ||
ХИДЛ 2.0 | cancel() | |
АИДЛ | void cancel() | |
Описание: применяет фильтр к списку программ и начинает отправлять обновления списка программ через обратный вызов onProgramListUpdated . | ||
ХИДЛ 2.0 | startProgramListUpdates(ProgramFilter filter) generates (Result result) | |
АИДЛ | void startProgramListUpdates(in ProgramFilter filter) | |
Описание: Останавливает отправку обновлений списка программ. | ||
ХИДЛ 2.0 | stopProgramListUpdates() | |
АИДЛ | void stopProgramListUpdates() | |
Описание: извлекает текущую настройку данного флага конфигурации. | ||
ХИДЛ 2.0 | isConfigFlagSet(ConfigFlag flag) generates (Result result, bool value) | |
АИДЛ | boolean isConfigFlagSet(in ConfigFlag flag) | |
Описание: Устанавливает данный флаг конфигурации. | ||
ХИДЛ 2.0 | setConfigFlag(ConfigFlag flag, bool value) generates (Result result) | |
АИДЛ | void setConfigFlag(in ConfigFlag flag, boolean value) | |
Описание: Устанавливает значения параметров, зависящие от поставщика. | ||
ХИДЛ 2.0 | setParameters(vec<VendorKeyValue> parameters) генерирует , (vec<VendorKeyValue> results) | |
АИДЛ | VendorKeyValue[] setParameters(in VendorKeyValue[] parameters) | |
Описание: Извлекает значения параметров, зависящие от поставщика. | ||
ХИДЛ 2.0 | getParameters(vec<string> keys) generates (vec<VendorKeyValue> parameters) | |
АИДЛ | VendorKeyValue[] getParameters(in String[] keys) |
Уточнения интерфейса
Асинхронное поведение
Поскольку каждая операция настройки (например, настройка, сканирование (в HIDL) или поиск (в AIDL) и шаг) может занимать много времени, а поток не должен блокироваться на долгое время, операция должна запланировать трудоемкие операции, чтобы они произошли позже, и быстро вернуть статус или результат. Подробно каждая операция должна:
- Отмените все ожидающие операции настройки.
- Проверьте, может ли операция быть обработана на основе входных данных метода и состояния тюнера.
- Запланируйте задачу настройки, а затем немедленно верните
Result
(в HIDL) илиstatus
(в AIDL). ЕслиResult
илиstatus
имеютOK
, обратный вызов тюнераtuneFailed
илиcurrentProgramInfoChanged
должен быть вызван, когда задача настройки не удалась (например, из-за тайм-аута) или была завершена.
Аналогичным образом, startProgramListUpdates
также планирует выполнение трудоемкой задачи по обновлению списка программ, которая будет выполнена позже и быстро вернет статус или результат. Метод сначала отменяет ожидающие запросы на обновление, а затем планирует задачу обновления и быстро возвращает результат.
Состояние гонки
Из-за асинхронного поведения операций настройки (например, настройки, сканирования (в HIDL) или поиска (в AIDL) и шага), существует состояние гонки между отменой операции и операциями настройки. Если cancel
вызывается после того, как HAL завершит операцию настройки и до завершения обратного вызова, отмену можно игнорировать, а обратный вызов должен завершиться и быть получен клиентом HAL.
Аналогично, если stopProgramListUpdates
вызывается после того, как HAL завершит обновление списка программ и до завершения обратного вызова onCurrentProgramInfoChanged
, stopProgramListUpdates
можно игнорировать и обратный вызов должен завершиться.
Ограничение размера данных
Поскольку существует жесткое ограничение на буфер транзакции связывателя, ограничение данных для некоторых методов интерфейса, передающих данные потенциально большого размера, уточняется в AIDL HAL.
-
getImage
требует, чтобы возвращаемое изображение имело размер менее 1 МБ. -
onProgramListUpdate
требует, чтобы каждыйchunk
был меньше 500 КБ. Более крупные списки программ должны быть разделены реализацией HAL на несколько частей и отправлены через несколько обратных вызовов.
Изменения в структурах данных AIDL HAL
Помимо изменений в интерфейсах, эти изменения были применены к структурам данных, определенным в AIDL HAL вещания, который использует преимущества AIDL.
- Перечисление
Constant
удалено в AIDL и определено как const int вIBroadcastRadio
. При этомANTENNA_DISCONNECTED_TIMEOUT_MS
переименовывается вANTENNA_STATE_CHANGE_TIMEOUT_MS
. Добавлена новая константа intTUNER_TIMEOUT_MS
. Все операции настройки, поиска и пошагового выполнения должны быть завершены в течение этого времени. - Enum
RDS
иDeemphasis
удалены в AIDL и определены как const int вAmFmRegionConfig
. Соответственно, иfmDeemphasis
, иfmRds
вProgramInfo
объявлены как int, результат вычисления битов соответствующих флагов. При этомD50
иD75
переименованы вDEEMPHASIS_D50
иDEEMPHASIS_D75
соответственно. - Enum
ProgramInfoFlags
удалены в AIDL и определены как const int вProgramInfo
с добавленным префиксомFLAG_
. Соответственно,infoFlags
вProgramInfo
объявляется как int, битовый результат вычисления флагов.TUNED
также переименован вFLAG_TUNABLE
, чтобы лучше описать его определение, на которое можно настроить станцию. - В
AmFmBandRange
scanSpacing
переименован вseekSpacing
, поскольку в AIDLscan
переименован вseek
. - Поскольку в AIDL введена концепция объединения ,
MetadataKey
иMetadata
определенные в HIDL HAL, больше не используются.Metadata
объединения AIDL определены в AIDL HAL. Каждое значение перечисления, ранее входившее вMetadataKey
теперь является полем вMetadata
с типом string или int, в зависимости от их определений.
Поддержка радио DAB
В этом разделе описывается поддержка радио DAB.
Идентификаторы
Основной тип идентификатора для радио DAB и DMB в HAL широковещательного радио AIDL — DAB_SID_EXT
. DAB_SID_EXT
использует 32-битные идентификаторы служб (SID), поэтому он может представлять SID как для радио DAB, так и для DMB.
Помимо первичных идентификаторов, поддерживаются вторичные идентификаторы, такие как DAB_ENSEMBLE
и DAB_FREQUENCY_KHZ
. Это важно, поскольку несколько станций DAB могут использовать DAB_SID_EXT
, имея при этом разные значения DAB_ENSEMBLE
или DAB_FREQUENCY_KHZ
. Чтобы обеспечить точное обновление списка программ, станции с одинаковым DAB_SID_EXT
обновляются вместе с помощью ITunerCallback#onProgramListUpdated
. Затем это обновление передается в службу радиовещания и диспетчер радио и, наконец, в приложение радио через android.hardware.radio.ProgramList
.
Метаданные
В следующей таблице показаны поддерживаемые метаданные, специфичные для DAB в AIDL Broadcast Radio HAL:
Поле метаданных | Описание |
---|---|
dabEnsembleName (сокращенная форма: dabEnsembleNameShort ) | Название ансамбля станции DAB |
dabServiceName (сокращенно от dabServiceNameShort ) | Название службы станции DAB |
dabComponentName (сокращенно от dabComponentNameShort ) | Название компонента станции DAB |
Поддержка HD-радио
В этом разделе описывается поддержка HD-радио.
Идентификаторы
HD_STATION_ID_EXT
служит основным идентификатором радиостанций HD. Для дальнейшего улучшения идентификации станции также предоставляются вторичные идентификаторы, такие как HD_STATION_NAME
и HD_STATION_LOCATION
. HD_STATION_LOCATION
, предоставляющий информацию о местоположении, был представлен в Android 15.
Включить или отключить цифровое радио
Начиная с Android 15, вы можете включить или отключить цифровое радио (например, HD-радио), настроив ConfigFlag
s. Чтобы управлять этой настройкой для FM-радио, используйте флаг FORCE_ANALOG_FM
; для AM-радио используйте флаг FORCE_ANALOG_AM
. Установка флага в false
включает HD-радио, а установка в значение true
активирует аналоговое радио AM/FM.
Доступны HD-каналы
Начиная с Android 15, HD-каналы, доступные в настоящее время для HD-радиостанции, могут быть представлены 8-битной битовой маской Metadata#hdSubChannelsAvailable
в ProgramInfo.metadata
. Например, значение бита 1 слева показывает, доступен ли подканал HD2 для этой станции HD.
Статус приема сигнала
В версиях Android 15 и более поздних радиоприложения могут показывать пользователям статус приема сигнала радиостанций HD. Это полезно, поскольку получение сильного сигнала HD иногда может занять несколько секунд.
Чтобы предоставить эту информацию, система использует ProgramInfo.infoFlags
для отслеживания статуса и обновления приложения радио через ITunerCallback#onCurrentProgramInfoChanged.
Вот как статус представлен в ProgramInfo.infoFlags
:
- Бит 6: Указывает, был ли получен радиосигнал HD.
- Бит 7: Показывает, доступны ли данные информационной службы станции (SIS). SIS предоставляет дополнительную информацию о станции и о том, что транслируется.
- Бит 8: сообщает, доступен ли цифровой звук HD.
Метаданные
В следующей таблице показаны поддерживаемые метаданные HD-радио для Android 15 и более поздних версий.
Поле метаданных | Описание |
---|---|
commentShortDescription | Краткое контекстное описание комментария |
commentActualText | Текст комментария |
commercial | Радиореклама |
ufids | Уникальные идентификаторы файлов (UFID), связанные с содержимым. |
hdStationNameShort | Краткое название HD-радиостанции или универсальное короткое имя. |
hdStationNameLong | Длинное название, слоган или сообщение радиостанции HD. |
Экстренные оповещения
В Android 15 и более поздних версиях для HD-радиостанций поддерживаются экстренные оповещения, чтобы информировать пользователей радиоприложений о экстренных оповещениях, отправленных с радиостанций. Экстренное оповещение ( Alert
) соответствует стандарту Common Alerting Protocol (CAP) 1.2 и поддерживает оповещения, показанные в следующей таблице:
Предупреждающая информация | Описание | Доступные значения перечисления |
---|---|---|
AlertStatus | Статус предупреждающего сообщения | ACTUAL , EXERCISE , TEST |
AlertMessageType | Тип сообщения о чрезвычайной ситуации | ALERT , UPDATE , CANCEL |
AlertCategory | Категория предметного события аварийного сообщения | GEO , MET , SAFETY , SECURITY , RESCUE , FIRE , HEALTH , ENV , TRANSPORT , INFRA , CBRNE , OTHER |
AlertUrgency | Актуальность предметного события аварийного сообщения | IMMEDIATE , EXPECTED , FUTURE , PAST , UNKNOWN |
AlertSeverity | Серьезность рассматриваемого события сообщения о чрезвычайной ситуации | EXTREME , SEVERE , MODERATE , MINOR , UNKNOWN |
AlertCertainty | Достоверность предметного события аварийного сообщения | OBSERVED , LIKELY , POSSIBLE , UNLIKELY , UNKNOWN |
Alert
(который содержит информацию в таблице), текстовые сообщения оповещений и AlertArea
для отображения информации о текущем оповещении. Alert
— это необязательное поле в ProgramInfo
, поэтому его можно отправлять из Broadcast Radio HAL в радиоприложения через обратные вызовы тюнера для получения текущей информации о программе и обновлений списка программ. , В следующих разделах описывается, как работать с уровнем аппаратной абстракции (HAL) для реализации радиовещания.
Радиовещательный интерфейс HAL
HAL радиовещания предоставляет структуры данных и интерфейсы на аппаратном уровне для реализации радиовещания, такого как радио AM/FM и DAB.
Интерфейсы HIDL 2.0 и AIDL
Вещательная радиостанция HAL использует интерфейсы, описанные в следующих разделах.
IОбъявлениеСлушатель
IAnnouncementListener
— это интерфейс обратного вызова для прослушивателя объявлений, который можно зарегистрировать на радиовещании HAL для получения объявлений. Интерфейс имеет следующие методы:
IОбъявлениеСлушатель | ||
---|---|---|
Описание: Вызывается всякий раз, когда список объявлений изменяется. | ||
ХИДЛ 2.0 | oneway onListUpdated(vec<Announcement> announcements) | |
АИДЛ | oneway void onListUpdated(in Announcement[] announcements) |
ICloseHandle
ICloseHandle
— это универсальный дескриптор закрытия для удаления обратного вызова, для которого не требуется активный интерфейс.
ICloseHandle | ||
---|---|---|
Описание: Закройте ручку. | ||
ХИДЛ 2.0 | close() | |
АИДЛ | void close() |
ITunerОбратный вызов
ITunerCallback
— это интерфейс обратного вызова, вызываемый широковещательной радиостанцией HAL для отправки обновлений в клиентскую службу HAL.
ITunerОбратный вызов | ||
---|---|---|
Описание: Вызывается HAL, когда операция настройки (настройка, поиск (в AIDL) или сканирование (в HIDL) и шаг завершаются успешно) завершается асинхронно. | ||
ХИДЛ 2.0 | oneway onCurrentProgramInfoChanged(ProgramInfo info) | |
АИДЛ | void onCurrentProgramInfoChanged(in ProgramInfo info) | |
Описание: Вызывается при настройке, поиске (в AIDL) или сканировании (в HIDL) или при успешном выполнении шага. | ||
ХИДЛ 2.0 | oneway onTuneFailed(Result result, ProgramSelector selector) | |
АИДЛ | void onTuneFailed(in Result result, in ProgramSelector selector) | |
Описание: Вызывается при настройке, поиске (в AIDL) или сканировании (в HIDL) или при успешном выполнении шага. | ||
ХИДЛ 2.0 | oneway onCurrentProgramInfoChanged(ProgramInfo info) | |
АИДЛ | void onCurrentProgramInfoChanged(in ProgramInfo info) | |
Описание: Вызывается при обновлении списка программ; размер каждого фрагмента должен быть ограничен 500 КБ. | ||
ХИДЛ 2.0 | oneway onProgramListUpdated(ProgramListChunk chunk) | |
АИДЛ | oneway onProgramListUpdated(ProgramListChunk chunk) | |
Описание: Вызывается, когда антенна подключена или отключена. | ||
ХИДЛ 2.0 | oneway onAntennaStateChange(bool connected) | |
АИДЛ | void onCurrentProgramInfoChanged(in ProgramInfo info) | |
Описание: Вызывается, когда значения параметров, специфичные для поставщика, обновляются внутри HAL (не вызывать после вызова setParameters клиентом HAL). | ||
ХИДЛ 2.0 | oneway onParametersUpdated(vec<VendorKeyValue> parameters) | |
АИДЛ | void onParametersUpdated(in VendorKeyValue[] parameters) | |
Описание: Новое в AIDL. Вызывается, когда флаг конфигурации обновляется внутри HAL (не следует вызывать после вызова setConfigFlag клиентом HAL). | ||
ХИДЛ 2.0 | Непригодный. | |
АИДЛ | void onConfigFlagUpdated(in ConfigFlag flag, in boolean value) |
IBroadcastRadio
IBroadcastRadio
— это основной интерфейс для радиовещания HAL. В HAL HIDL 2.0 используйте интерфейс ITunerSession
к тюнеру для вызова операций. Однако одновременно активен не более одного тюнера (при условии, что каждый экземпляр HAL радиовещания имеет только один чип тюнера). ITunerSession
был удален из интерфейсов AIDL, а его интерфейсы перенесены в IBroadcastRadio
.
IBroadcastRadio | ||
---|---|---|
Описание: Получите описание модуля и его возможностей. | ||
ХИДЛ 2.0 | getProperties() generates (Properties properties) | |
АИДЛ | Properties getProperties() | |
Описание: Получает текущую или возможную конфигурацию региона AM/FM. | ||
ХИДЛ 2.0 | getAmFmRegionConfig(bool full) generates (Result result, AmFmRegionConfig config) | |
АИДЛ | AmFmRegionConfig getAmFmRegionConfig(bool full) | |
Описание: извлекает текущую конфигурацию региона DAB. | ||
ХИДЛ 2.0 | getDabRegionConfig() generates (Result result, vec<DabTableEntry> config) | |
АИДЛ | DabTableEntry[] getDabRegionConfig() | |
Описание: Получает образ из кэша радиомодуля. В AIDL размер изображения должен быть меньше 1 МБ из-за жесткого ограничения на буфер транзакции связывателя. | ||
ХИДЛ 2.0 | getImage(uint32_t id) generates (vec<uint8_t> image) | |
АИДЛ | byte[] getImage(in int id) | |
Описание: Регистрирует прослушиватель объявлений. | ||
ХИДЛ 2.0 | registerAnnouncementListener(vec<AnnouncementType> enabled,IAnnouncementListener listener) generates (Result result, ICloseHandle closeHandle) | |
АИДЛ | ICloseHandle registerAnnouncementListener(in IAnnouncementListener listener, in AnnouncementType[] enabled) | |
Описание:
| ||
ХИДЛ 2.0 | openSession(ITunerCallback callback) генерирует (Result result, ITunerSession session) | |
АИДЛ | void setTunerCallback(in ITunerCallback callback) | |
Описание:
| ||
ХИДЛ 2.0 | close() | |
АИДЛ | unsetTunerCallback() | |
Описание: Настраивается на указанную программу. | ||
ХИДЛ 2.0 | tune(ProgramSelector program) generates (Result result) | |
АИДЛ | void tune(in ProgramSelector program) | |
Описание: Ищет следующую действительную программу в эфире . Чтобы избежать путаницы в AIDL, scan переименовывается в seek . | ||
ХИДЛ 2.0 | scan(bool directionUp, bool skipSubChannel) generates (Result result) | |
АИДЛ | void seek(in boolean directionUp, in boolean skipSubChannel) | |
Описание: Переход на соседний канал, который не может быть занят какой-либо программой. | ||
ХИДЛ 2.0 | step(bool directionUp) generates (Result result) | |
АИДЛ | void step(in boolean directionUp) | |
Описание: Отменяет ожидающие настройки, сканирование (в HIDL) или поиск (в AIDL) или пошаговые операции. | ||
ХИДЛ 2.0 | cancel() | |
АИДЛ | void cancel() | |
Описание: применяет фильтр к списку программ и начинает отправлять обновления списка программ через обратный вызов onProgramListUpdated . | ||
ХИДЛ 2.0 | startProgramListUpdates(ProgramFilter filter) generates (Result result) | |
АИДЛ | void startProgramListUpdates(in ProgramFilter filter) | |
Описание: Останавливает отправку обновлений списка программ. | ||
ХИДЛ 2.0 | stopProgramListUpdates() | |
АИДЛ | void stopProgramListUpdates() | |
Описание: извлекает текущую настройку данного флага конфигурации. | ||
ХИДЛ 2.0 | isConfigFlagSet(ConfigFlag flag) generates (Result result, bool value) | |
АИДЛ | boolean isConfigFlagSet(in ConfigFlag flag) | |
Описание: Устанавливает данный флаг конфигурации. | ||
ХИДЛ 2.0 | setConfigFlag(ConfigFlag flag, bool value) generates (Result result) | |
АИДЛ | void setConfigFlag(in ConfigFlag flag, boolean value) | |
Описание: Устанавливает значения параметров, зависящие от поставщика. | ||
ХИДЛ 2.0 | setParameters(vec<VendorKeyValue> parameters) генерирует , (vec<VendorKeyValue> results) | |
АИДЛ | VendorKeyValue[] setParameters(in VendorKeyValue[] parameters) | |
Описание: Извлекает значения параметров, зависящие от поставщика. | ||
ХИДЛ 2.0 | getParameters(vec<string> keys) generates (vec<VendorKeyValue> parameters) | |
АИДЛ | VendorKeyValue[] getParameters(in String[] keys) |
Уточнения интерфейса
Асинхронное поведение
Поскольку каждая операция настройки (например, настройка, сканирование (в HIDL) или поиск (в AIDL) и шаг) может занимать много времени, а поток не должен блокироваться на долгое время, операция должна запланировать трудоемкие операции, чтобы они произошли позже, и быстро вернуть статус или результат. Подробно каждая операция должна:
- Отмените все ожидающие операции настройки.
- Проверьте, может ли операция быть обработана на основе входных данных метода и состояния тюнера.
- Запланируйте задачу настройки, а затем немедленно верните
Result
(в HIDL) илиstatus
(в AIDL). ЕслиResult
илиstatus
имеютOK
, обратный вызов тюнераtuneFailed
илиcurrentProgramInfoChanged
должен быть вызван, когда задача настройки не удалась (например, из-за тайм-аута) или была завершена.
Аналогично, startProgramListUpdates
также планирует выполнение трудоемкой задачи по обновлению списка программ, которая будет выполнена позже и быстро вернет статус или результат. Метод сначала отменяет ожидающие запросы на обновление, а затем планирует задачу обновления и быстро возвращает результат.
Состояние гонки
Из-за асинхронного поведения операций настройки (например, настройки, сканирования (в HIDL) или поиска (в AIDL) и шага), существует состояние гонки между отменой операции и операциями настройки. Если cancel
вызывается после того, как HAL завершит операцию настройки и до завершения обратного вызова, отмену можно игнорировать, а обратный вызов должен завершиться и быть получен клиентом HAL.
Аналогично, если stopProgramListUpdates
вызывается после того, как HAL завершит обновление списка программ и до завершения обратного вызова onCurrentProgramInfoChanged
, stopProgramListUpdates
можно игнорировать и обратный вызов должен завершиться.
Ограничение размера данных
Поскольку существует жесткое ограничение на буфер транзакции связывателя, ограничение данных для некоторых методов интерфейса, передающих данные потенциально большого размера, уточняется в AIDL HAL.
-
getImage
требует, чтобы возвращаемое изображение имело размер менее 1 МБ. -
onProgramListUpdate
требует, чтобы каждыйchunk
был меньше 500 КБ. Более крупные списки программ должны быть разделены реализацией HAL на несколько частей и отправлены через несколько обратных вызовов.
Изменения в структурах данных AIDL HAL
Помимо изменений в интерфейсах, эти изменения были применены к структурам данных, определенным в AIDL HAL вещания, который использует преимущества AIDL.
- Перечисление
Constant
удалено в AIDL и определено как const int вIBroadcastRadio
. При этомANTENNA_DISCONNECTED_TIMEOUT_MS
переименовывается вANTENNA_STATE_CHANGE_TIMEOUT_MS
. Добавлена новая константа intTUNER_TIMEOUT_MS
. Все операции настройки, поиска и пошагового выполнения должны быть завершены в течение этого времени. - Enum
RDS
иDeemphasis
удалены в AIDL и определены как const int вAmFmRegionConfig
. Соответственно, иfmDeemphasis
, иfmRds
вProgramInfo
объявлены как int, результат вычисления битов соответствующих флагов. При этомD50
иD75
переименованы вDEEMPHASIS_D50
иDEEMPHASIS_D75
соответственно. - Enum
ProgramInfoFlags
удалены в AIDL и определены как const int вProgramInfo
с добавленным префиксомFLAG_
. Соответственно,infoFlags
вProgramInfo
объявляется как int, битовый результат вычисления флагов.TUNED
также переименован вFLAG_TUNABLE
, чтобы лучше описать определение, на которое можно настроить станцию. - В
AmFmBandRange
scanSpacing
переименован вseekSpacing
, поскольку в AIDLscan
переименован вseek
. - Поскольку в AIDL введена концепция объединения ,
MetadataKey
иMetadata
определенные в HIDL HAL, больше не используются.Metadata
объединения AIDL определены в AIDL HAL. Каждое значение перечисления, ранее входившее вMetadataKey
теперь является полем вMetadata
с типом string или int, в зависимости от их определений.
Поддержка радио DAB
В этом разделе описывается поддержка радио DAB.
Идентификаторы
Основным типом идентификатора для радио DAB и DMB в HAL широковещательного радио AIDL является DAB_SID_EXT
. DAB_SID_EXT
использует 32-битные идентификаторы служб (SID), поэтому он может представлять SID как для радио DAB, так и для DMB.
Помимо первичных идентификаторов, поддерживаются вторичные идентификаторы, такие как DAB_ENSEMBLE
и DAB_FREQUENCY_KHZ
. Это важно, поскольку несколько станций DAB могут использовать DAB_SID_EXT
, имея при этом разные значения DAB_ENSEMBLE
или DAB_FREQUENCY_KHZ
. Чтобы обеспечить точное обновление списка программ, станции с одинаковым DAB_SID_EXT
обновляются вместе с помощью ITunerCallback#onProgramListUpdated
. Затем это обновление передается в службу радиовещания и диспетчер радио и, наконец, в приложение радио через android.hardware.radio.ProgramList
.
Метаданные
В следующей таблице показаны поддерживаемые метаданные, специфичные для DAB в AIDL Broadcast Radio HAL:
Поле метаданных | Описание |
---|---|
dabEnsembleName (сокращенная форма: dabEnsembleNameShort ) | Название ансамбля станции DAB |
dabServiceName (сокращенно от dabServiceNameShort ) | Название службы станции DAB |
dabComponentName (сокращенно от dabComponentNameShort ) | Название компонента станции DAB |
Поддержка HD-радио
В этом разделе описывается поддержка HD-радио.
Идентификаторы
HD_STATION_ID_EXT
служит основным идентификатором радиостанций HD. Для дальнейшего улучшения идентификации станции также предоставляются вторичные идентификаторы, такие как HD_STATION_NAME
и HD_STATION_LOCATION
. HD_STATION_LOCATION
, предоставляющий информацию о местоположении, был представлен в Android 15.
Включить или отключить цифровое радио
Начиная с Android 15, вы можете включить или отключить цифровое радио (например, HD-радио), настроив ConfigFlag
s. Чтобы управлять этой настройкой для FM-радио, используйте флаг FORCE_ANALOG_FM
; для AM-радио используйте флаг FORCE_ANALOG_AM
. Установка флага в false
включает HD-радио, а установка в значение true
активирует аналоговое радио AM/FM.
Доступны HD-каналы
Начиная с Android 15, HD-каналы, доступные в настоящее время для HD-радиостанции, могут быть представлены 8-битной битовой маской Metadata#hdSubChannelsAvailable
в ProgramInfo.metadata
. Например, значение бита 1 слева показывает, доступен ли подканал HD2 для этой станции HD.
Статус приема сигнала
В версиях Android 15 и более поздних радиоприложения могут показывать пользователям статус приема сигнала радиостанций HD. Это полезно, поскольку получение сильного сигнала HD иногда может занять несколько секунд.
Чтобы предоставить эту информацию, система использует ProgramInfo.infoFlags
для отслеживания статуса и обновления приложения радио через ITunerCallback#onCurrentProgramInfoChanged.
Вот как статус представлен в ProgramInfo.infoFlags
:
- Бит 6: Указывает, был ли получен радиосигнал HD.
- Бит 7: Показывает, доступны ли данные информационной службы станции (SIS). SIS предоставляет дополнительную информацию о станции и о том, что транслируется.
- Бит 8: сообщает, доступен ли цифровой звук HD.
Метаданные
В следующей таблице показаны поддерживаемые метаданные HD-радио для Android 15 и более поздних версий.
Поле метаданных | Описание |
---|---|
commentShortDescription | Краткое контекстное описание комментария |
commentActualText | Текст комментария |
commercial | Радиореклама |
ufids | Уникальные идентификаторы файлов (UFID), связанные с содержимым. |
hdStationNameShort | Краткое название HD-радиостанции или универсальное короткое имя. |
hdStationNameLong | Длинное название, слоган или сообщение радиостанции HD. |
Экстренные оповещения
В Android 15 и более поздних версиях поддерживаются экстренные оповещения для радиостанций HD, чтобы информировать пользователей радиоприложений о экстренных оповещениях, отправленных с радиостанций. Экстренное оповещение ( Alert
) соответствует стандарту Common Alerting Protocol (CAP) 1.2 и поддерживает оповещения, показанные в следующей таблице:
Предупреждающая информация | Описание | Доступные значения перечисления |
---|---|---|
AlertStatus | Статус предупреждающего сообщения | ACTUAL , EXERCISE , TEST |
AlertMessageType | Тип сообщения о чрезвычайной ситуации | ALERT , UPDATE , CANCEL |
AlertCategory | Категория предметного события аварийного сообщения | GEO , MET , SAFETY , SECURITY , RESCUE , FIRE , HEALTH , ENV , TRANSPORT , INFRA , CBRNE , OTHER |
AlertUrgency | Актуальность предметного события аварийного сообщения | IMMEDIATE , EXPECTED , FUTURE , PAST , UNKNOWN |
AlertSeverity | Серьезность рассматриваемого события сообщения о чрезвычайной ситуации | EXTREME , SEVERE , MODERATE , MINOR , UNKNOWN |
AlertCertainty | Достоверность предметного события аварийного сообщения | OBSERVED , LIKELY , POSSIBLE , UNLIKELY , UNKNOWN |
Alert
(который содержит информацию в таблице), текстовые сообщения оповещений и AlertArea
для отображения информации о текущем оповещении. Alert
— это необязательное поле в ProgramInfo
, поэтому его можно отправлять из Broadcast Radio HAL в радиоприложения через обратные вызовы тюнера для получения текущей информации о программе и обновлений списка программ. , В следующих разделах описывается, как работать с уровнем аппаратной абстракции (HAL) для реализации радиовещания.
Радиовещательный интерфейс HAL
HAL радиовещания предоставляет структуры данных и интерфейсы на аппаратном уровне для реализации радиовещания, такого как радио AM/FM и DAB.
Интерфейсы HIDL 2.0 и AIDL
Вещательная радиостанция HAL использует интерфейсы, описанные в следующих разделах.
IОбъявлениеСлушатель
IAnnouncementListener
— это интерфейс обратного вызова для прослушивателя объявлений, который можно зарегистрировать на радиовещании HAL для получения объявлений. Интерфейс имеет следующие методы:
IОбъявлениеСлушатель | ||
---|---|---|
Описание: Вызывается всякий раз, когда список объявлений изменяется. | ||
ХИДЛ 2.0 | oneway onListUpdated(vec<Announcement> announcements) | |
АИДЛ | oneway void onListUpdated(in Announcement[] announcements) |
ICloseHandle
ICloseHandle
— это универсальный дескриптор закрытия для удаления обратного вызова, для которого не требуется активный интерфейс.
ICloseHandle | ||
---|---|---|
Описание: Закройте ручку. | ||
ХИДЛ 2.0 | close() | |
АИДЛ | void close() |
ITunerОбратный вызов
ITunerCallback
— это интерфейс обратного вызова, вызываемый широковещательной радиостанцией HAL для отправки обновлений в клиентскую службу HAL.
ITunerОбратный вызов | ||
---|---|---|
Описание: Вызывается HAL, когда операция настройки (настройка, поиск (в AIDL) или сканирование (в HIDL) и шаг завершаются успешно) завершается асинхронно. | ||
ХИДЛ 2.0 | oneway onCurrentProgramInfoChanged(ProgramInfo info) | |
АИДЛ | void onCurrentProgramInfoChanged(in ProgramInfo info) | |
Описание: Вызывается при настройке, поиске (в AIDL) или сканировании (в HIDL) или при успешном выполнении шага. | ||
ХИДЛ 2.0 | oneway onTuneFailed(Result result, ProgramSelector selector) | |
АИДЛ | void onTuneFailed(in Result result, in ProgramSelector selector) | |
Описание: Вызывается при настройке, поиске (в AIDL) или сканировании (в HIDL) или при успешном выполнении шага. | ||
ХИДЛ 2.0 | oneway onCurrentProgramInfoChanged(ProgramInfo info) | |
АИДЛ | void onCurrentProgramInfoChanged(in ProgramInfo info) | |
Описание: Вызывается при обновлении списка программ; размер каждого фрагмента должен быть ограничен 500 КБ. | ||
ХИДЛ 2.0 | oneway onProgramListUpdated(ProgramListChunk chunk) | |
АИДЛ | oneway onProgramListUpdated(ProgramListChunk chunk) | |
Описание: Вызывается, когда антенна подключена или отключена. | ||
ХИДЛ 2.0 | oneway onAntennaStateChange(bool connected) | |
АИДЛ | void onCurrentProgramInfoChanged(in ProgramInfo info) | |
Описание: Вызывается, когда значения параметров, специфичные для поставщика, обновляются внутри HAL (не вызывать после вызова setParameters клиентом HAL). | ||
ХИДЛ 2.0 | oneway onParametersUpdated(vec<VendorKeyValue> parameters) | |
АИДЛ | void onParametersUpdated(in VendorKeyValue[] parameters) | |
Описание: Новое в AIDL. Вызывается, когда флаг конфигурации обновляется внутри HAL (не следует вызывать после вызова setConfigFlag клиентом HAL). | ||
ХИДЛ 2.0 | Непригодный. | |
АИДЛ | void onConfigFlagUpdated(in ConfigFlag flag, in boolean value) |
IBroadcastRadio
IBroadcastRadio
— это основной интерфейс для радиовещания HAL. В HAL HIDL 2.0 используйте интерфейс ITunerSession
к тюнеру для вызова операций. Однако одновременно активен не более одного тюнера (при условии, что каждый экземпляр HAL радиовещания имеет только один чип тюнера). ITunerSession
был удален из интерфейсов AIDL, а его интерфейсы перенесены в IBroadcastRadio
.
IBroadcastRadio | ||
---|---|---|
Описание: Получите описание модуля и его возможностей. | ||
ХИДЛ 2.0 | getProperties() generates (Properties properties) | |
АИДЛ | Properties getProperties() | |
Описание: Получает текущую или возможную конфигурацию региона AM/FM. | ||
ХИДЛ 2.0 | getAmFmRegionConfig(bool full) generates (Result result, AmFmRegionConfig config) | |
АИДЛ | AmFmRegionConfig getAmFmRegionConfig(bool full) | |
Описание: извлекает текущую конфигурацию региона DAB. | ||
ХИДЛ 2.0 | getDabRegionConfig() generates (Result result, vec<DabTableEntry> config) | |
АИДЛ | DabTableEntry[] getDabRegionConfig() | |
Описание: Получает образ из кэша радиомодуля. В AIDL размер изображения должен быть меньше 1 МБ из-за жесткого ограничения на буфер транзакции связывателя. | ||
ХИДЛ 2.0 | getImage(uint32_t id) generates (vec<uint8_t> image) | |
АИДЛ | byte[] getImage(in int id) | |
Описание: Регистрирует прослушиватель объявлений. | ||
ХИДЛ 2.0 | registerAnnouncementListener(vec<AnnouncementType> enabled,IAnnouncementListener listener) generates (Result result, ICloseHandle closeHandle) | |
АИДЛ | ICloseHandle registerAnnouncementListener(in IAnnouncementListener listener, in AnnouncementType[] enabled) | |
Описание:
| ||
ХИДЛ 2.0 | openSession(ITunerCallback callback) генерирует (Result result, ITunerSession session) | |
АИДЛ | void setTunerCallback(in ITunerCallback callback) | |
Описание:
| ||
ХИДЛ 2.0 | close() | |
АИДЛ | unsetTunerCallback() | |
Описание: Настраивается на указанную программу. | ||
ХИДЛ 2.0 | tune(ProgramSelector program) generates (Result result) | |
АИДЛ | void tune(in ProgramSelector program) | |
Описание: Ищет следующую действительную программу в эфире . Чтобы избежать путаницы в AIDL, scan переименовывается в seek . | ||
ХИДЛ 2.0 | scan(bool directionUp, bool skipSubChannel) generates (Result result) | |
АИДЛ | void seek(in boolean directionUp, in boolean skipSubChannel) | |
Описание: Переход на соседний канал, который не может быть занят какой-либо программой. | ||
ХИДЛ 2.0 | step(bool directionUp) generates (Result result) | |
АИДЛ | void step(in boolean directionUp) | |
Описание: Отменяет ожидающие настройки, сканирование (в HIDL) или поиск (в AIDL) или пошаговые операции. | ||
ХИДЛ 2.0 | cancel() | |
АИДЛ | void cancel() | |
Описание: применяет фильтр к списку программ и начинает отправлять обновления списка программ через обратный вызов onProgramListUpdated . | ||
ХИДЛ 2.0 | startProgramListUpdates(ProgramFilter filter) generates (Result result) | |
АИДЛ | void startProgramListUpdates(in ProgramFilter filter) | |
Описание: Останавливает отправку обновлений списка программ. | ||
ХИДЛ 2.0 | stopProgramListUpdates() | |
АИДЛ | void stopProgramListUpdates() | |
Описание: извлекает текущую настройку данного флага конфигурации. | ||
ХИДЛ 2.0 | isConfigFlagSet(ConfigFlag flag) generates (Result result, bool value) | |
АИДЛ | boolean isConfigFlagSet(in ConfigFlag flag) | |
Описание: Устанавливает данный флаг конфигурации. | ||
ХИДЛ 2.0 | setConfigFlag(ConfigFlag flag, bool value) generates (Result result) | |
АИДЛ | void setConfigFlag(in ConfigFlag flag, boolean value) | |
Описание: Устанавливает значения параметров, зависящие от поставщика. | ||
ХИДЛ 2.0 | setParameters(vec<VendorKeyValue> parameters) генерирует , (vec<VendorKeyValue> results) | |
АИДЛ | VendorKeyValue[] setParameters(in VendorKeyValue[] parameters) | |
Описание: Извлекает значения параметров, зависящие от поставщика. | ||
ХИДЛ 2.0 | getParameters(vec<string> keys) generates (vec<VendorKeyValue> parameters) | |
АИДЛ | VendorKeyValue[] getParameters(in String[] keys) |
Уточнения интерфейса
Асинхронное поведение
Поскольку каждая операция настройки (например, настройка, сканирование (в HIDL) или поиск (в AIDL) и шаг) может занимать много времени, а поток не должен блокироваться на долгое время, операция должна запланировать трудоемкие операции, чтобы они произошли позже, и быстро вернуть статус или результат. Подробно каждая операция должна:
- Отмените все ожидающие операции настройки.
- Проверьте, может ли операция быть обработана на основе входных данных метода и состояния тюнера.
- Запланируйте задачу настройки, а затем немедленно верните
Result
(в HIDL) илиstatus
(в AIDL). ЕслиResult
илиstatus
имеютOK
, обратный вызов тюнераtuneFailed
илиcurrentProgramInfoChanged
должен быть вызван, когда задача настройки не удалась (например, из-за тайм-аута) или была завершена.
Аналогичным образом, startProgramListUpdates
также планирует выполнение трудоемкой задачи по обновлению списка программ, которая будет выполнена позже и быстро вернет статус или результат. Метод сначала отменяет ожидающие запросы на обновление, а затем планирует задачу обновления и быстро возвращает результат.
Состояние гонки
Из-за асинхронного поведения операций настройки (например, настройки, сканирования (в HIDL) или поиска (в AIDL) и шага), существует состояние гонки между отменой операции и операциями настройки. Если cancel
вызывается после того, как HAL завершит операцию настройки и до завершения обратного вызова, отмену можно игнорировать, а обратный вызов должен завершиться и быть получен клиентом HAL.
Аналогично, если stopProgramListUpdates
вызывается после того, как HAL завершит обновление списка программ и до завершения обратного вызова onCurrentProgramInfoChanged
, stopProgramListUpdates
можно игнорировать и обратный вызов должен завершиться.
Ограничение размера данных
Поскольку существует жесткое ограничение на буфер транзакции связывателя, ограничение данных для некоторых методов интерфейса, передающих данные потенциально большого размера, уточняется в AIDL HAL.
-
getImage
требует, чтобы возвращаемое изображение имело размер менее 1 МБ. -
onProgramListUpdate
требует, чтобы каждыйchunk
был меньше 500 КБ. Более крупные списки программ должны быть разделены реализацией HAL на несколько частей и отправлены через несколько обратных вызовов.
Изменения в структурах данных AIDL HAL
Помимо изменений в интерфейсах, эти изменения были применены к структурам данных, определенным в AIDL HAL вещания, который использует преимущества AIDL.
- Перечисление
Constant
удалено в 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
, так иfmRds
вProgramInfo
объявляются как int, результат вычисления битовых вычислений соответствующих флагов. Между тем,D50
иD75
переименованы вDEEMPHASIS_D50
иDEEMPHASIS_D75
соответственно. - Enum
ProgramInfoFlags
удаляется в AIDL и определяется как const int вProgramInfo
с добавлением префиксаFLAG_
. Соответственно,infoFlags
вProgramInfo
объявляется как int, результат вычисления битов.TUNED
также переименован вFLAG_TUNABLE
, чтобы лучше описать свое определение, на которое станция может быть настроена. - В
AmFmBandRange
scanSpacing
вseekSpacing
, так какscan
переименовано вseek
в AIDL. - Поскольку концепция союза вводится в AIDL,
MetadataKey
иMetadata
определенные в Hidl HAL, больше не используются.Metadata
AIDL Union определены в AIDL HAL. Каждое значение Enum, ранее вMetadataKey
теперь является поле вMetadata
с типом строки или Int, в зависимости от их определений.
DAB Radio Support
В этом разделе описывается поддержка DAB Radio.
Идентификаторы
Основной тип идентификатора для радио DAB и DMB в радиовещании AIDL Radio HAL IS DAB_SID_EXT
. DAB_SID_EXT
использует 32-разрядные идентификаторы услуг (SIDS), чтобы он мог представлять SID как DAB, так и DMB Radio.
В дополнение к первичным идентификаторам поддерживаются вторичные идентификаторы, такие как DAB_ENSEMBLE
и DAB_FREQUENCY_KHZ
. Это важно, потому что несколько станций DAB могут разделять DAB_SID_EXT
, имея различные значения DAB_ENSEMBLE
или DAB_FREQUENCY_KHZ
. Чтобы обеспечить точные обновления списка программ, станции с одинаковыми DAB_SID_EXT
обновляются вместе с использованием ITunerCallback#onProgramListUpdated
. Это обновление затем передается на радиовещательную радиостанцию и менеджер Radio, и, наконец, в Radio App через android.hardware.radio.ProgramList
.
Метаданные
В следующей таблице показаны поддерживаемые метаданные Speficic, чтобы DAB в AIDL Broadcast Radio HAL:
Метаданное поле | Описание |
---|---|
dabEnsembleName (сокращенная форма: dabEnsembleNameShort ) | Название ансамбля станции Dab |
dabServiceName (сокращено от dabServiceNameShort ) | Название обслуживания Dab Station |
dabComponentName (сокращено из dabComponentNameShort ) | Название компонента станции Dab |
HD Radio Rupport
В этом разделе описывается поддержка радио HD.
Идентификаторы
HD_STATION_ID_EXT
служит основным идентификатором для радиостанций HD. Для дальнейшего усиления идентификации станции также предоставляются вторичные идентификаторы, такие как HD_STATION_NAME
и HD_STATION_LOCATION
. HD_STATION_LOCATION
, которая предоставляет информацию о местоположении, была введена в Android 15.
Включить или отключить цифровое радио
Начиная с Android 15, вы можете включить или отключить цифровое радио (например, HD Radio), настраивая ConfigFlag
S. Чтобы управлять этим настройкой для FM Radio, используйте флаг FORCE_ANALOG_FM
; Для AM Radio используйте флаг FORCE_ANALOG_AM
. Установка флага на false
позволяет HD -радио, при этом устанавливая его для true
AM/FM Radio.
HD -каналы доступны
Начиная с Android 15, каналы HD, в настоящее время доступные для радиостанции HD, могут быть представлены битой 8 бит, Metadata#hdSubChannelsAvailable
, в ProgramInfo.metadata
. Например, значение бита 1 слева предполагает, доступен ли подканал HD2 для этой станции HD.
Статус сбора сигнала
В Android 15 и Highers Radio Apps могут показывать пользователям состояние получения сигнала радиостанций HD. Это полезно, потому что приобретение сильного сигнала HD иногда может занять несколько минут.
Чтобы предоставить эту информацию, система использует ProgramInfo.infoFlags
для отслеживания статуса и обновляет приложение радио через ITunerCallback#onCurrentProgramInfoChanged.
Вот как статус представлен в рамках ProgramInfo.infoFlags
:
- Бит 6: указывает, был ли получен радиосигнал HD.
- Бит 7: показывают, доступны ли данные о информационной службе станции (SIS). SIS предоставляет дополнительную информацию о станции и о том, что играет.
- Бит 8: сообщает, доступно ли HD Digital Audio.
Метаданные
В следующей таблице показаны поддерживаемые HD -метаданные для Android 15 и высших версий.
Метаданное поле | Описание |
---|---|
commentShortDescription | Краткое описание контекста комментария |
commentActualText | Текст комментариев |
commercial | Радио рекламировать |
ufids | Уникальные идентификаторы файлов (UFIDS), связанные с содержанием |
hdStationNameShort | Короткое название радиостанции HD или универсальное короткое имя |
hdStationNameLong | Длинное название радиостанции HD или сообщение с станции. |
Экстренные оповещения
В Android 15 и выше экстренные оповещения поддерживаются для HD -радиостанций, чтобы информировать пользователей Radio App о чрезвычайных оповещениях, отправленных с радиостанций. Аварийное оповещение ( Alert
) следует стандартному протоколу общего оповещения (CAP) 1.2 и поддерживает оповещения, показанные в следующей таблице:
Предупреждать информацию | Описание | Enum значения доступны |
---|---|---|
AlertStatus | Статус сообщения о предупреждении | ACTUAL , EXERCISE , TEST |
AlertMessageType | Тип сообщений о аварийной оповещении | ALERT , UPDATE , CANCEL |
AlertCategory | Категория предметного события сообщения о неотложной оповещениях | GEO , MET , SAFETY , SECURITY , RESCUE , FIRE , HEALTH , ENV , TRANSPORT , INFRA , CBRNE , OTHER |
AlertUrgency | Срочность предметного события сообщений о чрезвычайных оповещениях | IMMEDIATE , EXPECTED , FUTURE , PAST , UNKNOWN |
AlertSeverity | Серьезность предметного события сообщений о чрезвычайных оповещениях | EXTREME , SEVERE , MODERATE , MINOR , UNKNOWN |
AlertCertainty | Уверенность в том, что предмет события сообщений о неотложной помощи | OBSERVED , LIKELY , POSSIBLE , UNLIKELY , UNKNOWN |
Alert
(которая содержит информацию в таблице), предупреждение о текстовых сообщениях и AlertArea
чтобы показать информацию о текущем оповещении. Alert
- это необязательное поле в ProgramInfo
, так что его можно отправить из радиовещания Radio HAL в Radio Apps через обратные вызовы Tuner для текущей информации о программе и обновлениях списка программ. , В следующих разделах описывается, как работать со слоем аппаратной абстракции (HAL) для реализации радиовещательного радио.
Вещательный радиоподобный интерфейс HAL
Вещательное радио HAL предоставляет структуры и интерфейсы данных на уровне аппаратного обеспечения для реализации радиовещательного радио, такого как AM/FM и DAB Radio.
Интерфейсы 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 киб. | ||
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 от HAL Client). | ||
HIDL 2.0 | oneway onParametersUpdated(vec<VendorKeyValue> parameters) | |
Aidl | void onParametersUpdated(in VendorKeyValue[] parameters) | |
Описание: новое в AIDL. Вызывается, когда флаг конфигурации обновляется внутри HAL (не следует вызывать после вызова setConfigFlag от HAL Client). | ||
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 размер изображения должен составлять менее 1 МБ из -за жесткого ограничения на буфере транзакции связующего. | ||
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) | |
Описание: ищет следующую действительную программу в эфире . Чтобы избежать путаницы в 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) и шаг) может быть трудоемкой, а поток не должен быть заблокирован в течение длительного времени, операция должна планировать операции, требующие много времени, и быстро возвращать статус или результат. Подробно, каждая операция должна:
- Отменить все ожидающие операции настройки.
- Проверьте, может ли операция обрабатываться на основе входов метода и состояния тюнера.
- Запланируйте задачу настройки, а затем немедленно верните
Result
(в HIDL) илиstatus
(в AIDL). ЕслиResult
илиstatus
вOK
, Tuner CallbacktuneFailed
илиcurrentProgramInfoChanged
должен быть вызван, когда задача настройки сбой (например, из -за тайм -аута) или завершена.
Аналогичным образом, startProgramListUpdates
также планирует трудоемкую задачу об обновлении списка программ, чтобы пройти позже и быстро вернуть статус или результат. Метод сначала отменяет ожидающие запросы на обновление, а затем планирует задачу обновления и быстро возвращает результат.
Расовое состояние
Из -за асинхронного поведения операций настройки (например, настройки, сканирования (в HIDL) или поиска (в AIDL) и шаге) существует условие гонки между отменой операции и операциями настройки. Если cancel
вызывает после того, как HAL завершает операцию настройки, и до завершения обратного вызова, отмена может быть проигнорирована, а обратный вызов должен быть завершен и быть полученным клиентом HAL.
Аналогичным образом, если stopProgramListUpdates
вызывается после того, как HAL завершает обновление списка программ, и до завершения обратного вызова onCurrentProgramInfoChanged
, stopProgramListUpdates
может быть проигнорирован, а обратный вызов должен завершить.
Ограничение размера данных
Поскольку в буфере транзакции переплета существует жесткий ограничение, ограничение данных для некоторых методов интерфейса передачи данных потенциально большого размера проясняются в AIDL HAL.
-
getImage
требует, чтобы изображение было возвращено менее 1 МБ. -
onProgramListUpdate
требует, чтобы каждыйchunk
был менее 500 киб. Большие списки программ должны быть разделены на реализацию HAL на несколько кусков и отправлены через несколько обратных вызовов.
Изменения в структурах данных AIDL HAL
В дополнение к изменениям в интерфейсах эти изменения были применены к структурам данных, определенным в радиовещательном радио Aidl HAL, которые используют AIDL.
-
Constant
перевод удаляется в 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
, так иfmRds
вProgramInfo
объявляются как int, результат вычисления битовых вычислений соответствующих флагов. Между тем,D50
иD75
переименованы вDEEMPHASIS_D50
иDEEMPHASIS_D75
соответственно. - Enum
ProgramInfoFlags
удаляется в AIDL и определяется как const int вProgramInfo
с добавлением префиксаFLAG_
. Соответственно,infoFlags
вProgramInfo
объявляется как int, результат вычисления битов.TUNED
также переименован вFLAG_TUNABLE
, чтобы лучше описать свое определение, на которое станция может быть настроена. - В
AmFmBandRange
scanSpacing
вseekSpacing
, так какscan
переименовано вseek
в AIDL. - Поскольку концепция союза вводится в AIDL,
MetadataKey
иMetadata
определенные в Hidl HAL, больше не используются.Metadata
AIDL Union определены в AIDL HAL. Каждое значение Enum, ранее вMetadataKey
теперь является поле вMetadata
с типом строки или Int, в зависимости от их определений.
DAB Radio Support
В этом разделе описывается поддержка DAB Radio.
Идентификаторы
Основной тип идентификатора для радио DAB и DMB в радиовещании AIDL Radio HAL IS DAB_SID_EXT
. DAB_SID_EXT
использует 32-разрядные идентификаторы услуг (SIDS), чтобы он мог представлять SID как DAB, так и DMB Radio.
В дополнение к первичным идентификаторам поддерживаются вторичные идентификаторы, такие как DAB_ENSEMBLE
и DAB_FREQUENCY_KHZ
. Это важно, потому что несколько станций DAB могут разделять DAB_SID_EXT
, имея различные значения DAB_ENSEMBLE
или DAB_FREQUENCY_KHZ
. Чтобы обеспечить точные обновления списка программ, станции с одинаковыми DAB_SID_EXT
обновляются вместе с использованием ITunerCallback#onProgramListUpdated
. Это обновление затем передается на радиовещательную радиостанцию и менеджер Radio, и, наконец, в Radio App через android.hardware.radio.ProgramList
.
Метаданные
В следующей таблице показаны поддерживаемые метаданные Speficic, чтобы DAB в AIDL Broadcast Radio HAL:
Метаданное поле | Описание |
---|---|
dabEnsembleName (сокращенная форма: dabEnsembleNameShort ) | Название ансамбля станции Dab |
dabServiceName (сокращено от dabServiceNameShort ) | Название обслуживания Dab Station |
dabComponentName (сокращено из dabComponentNameShort ) | Название компонента станции Dab |
HD Radio Rupport
В этом разделе описывается поддержка радио HD.
Идентификаторы
HD_STATION_ID_EXT
служит основным идентификатором для радиостанций HD. Для дальнейшего усиления идентификации станции также предоставляются вторичные идентификаторы, такие как HD_STATION_NAME
и HD_STATION_LOCATION
. HD_STATION_LOCATION
, которая предоставляет информацию о местоположении, была введена в Android 15.
Включить или отключить цифровое радио
Начиная с Android 15, вы можете включить или отключить цифровое радио (например, HD Radio), настраивая ConfigFlag
S. Чтобы управлять этим настройкой для FM Radio, используйте флаг FORCE_ANALOG_FM
; Для AM Radio используйте флаг FORCE_ANALOG_AM
. Установка флага на false
позволяет HD -радио, при этом устанавливая его для true
AM/FM Radio.
HD -каналы доступны
Начиная с Android 15, каналы HD, в настоящее время доступные для радиостанции HD, могут быть представлены битой 8 бит, Metadata#hdSubChannelsAvailable
, в ProgramInfo.metadata
. Например, значение бита 1 слева предполагает, доступен ли подканал HD2 для этой станции HD.
Статус сбора сигнала
В Android 15 и Highers Radio Apps могут показывать пользователям состояние получения сигнала радиостанций HD. Это полезно, потому что приобретение сильного сигнала HD иногда может занять несколько минут.
Чтобы предоставить эту информацию, система использует ProgramInfo.infoFlags
для отслеживания статуса и обновляет приложение радио через ITunerCallback#onCurrentProgramInfoChanged.
Вот как статус представлен в рамках ProgramInfo.infoFlags
:
- Бит 6: указывает, был ли получен радиосигнал HD.
- Бит 7: показывают, доступны ли данные о информационной службе станции (SIS). SIS предоставляет дополнительную информацию о станции и о том, что играет.
- Бит 8: сообщает, доступно ли HD Digital Audio.
Метаданные
В следующей таблице показаны поддерживаемые HD -метаданные для Android 15 и высших версий.
Метаданное поле | Описание |
---|---|
commentShortDescription | Краткое описание контекста комментария |
commentActualText | Текст комментариев |
commercial | Радио рекламировать |
ufids | Уникальные идентификаторы файлов (UFIDS), связанные с содержанием |
hdStationNameShort | Короткое название радиостанции HD или универсальное короткое имя |
hdStationNameLong | Длинное название радиостанции HD или сообщение с станции. |
Экстренные оповещения
В Android 15 и выше экстренные оповещения поддерживаются для HD -радиостанций, чтобы информировать пользователей Radio App о чрезвычайных оповещениях, отправленных с радиостанций. Аварийное оповещение ( Alert
) следует стандартному протоколу общего оповещения (CAP) 1.2 и поддерживает оповещения, показанные в следующей таблице:
Предупреждать информацию | Описание | Enum значения доступны |
---|---|---|
AlertStatus | Статус сообщения о предупреждении | ACTUAL , EXERCISE , TEST |
AlertMessageType | Тип сообщений о аварийной оповещении | ALERT , UPDATE , CANCEL |
AlertCategory | Категория предметного события сообщения о неотложной оповещениях | GEO , MET , SAFETY , SECURITY , RESCUE , FIRE , HEALTH , ENV , TRANSPORT , INFRA , CBRNE , OTHER |
AlertUrgency | Срочность предметного события сообщений о чрезвычайных оповещениях | IMMEDIATE , EXPECTED , FUTURE , PAST , UNKNOWN |
AlertSeverity | Серьезность предметного события сообщений о чрезвычайных оповещениях | EXTREME , SEVERE , MODERATE , MINOR , UNKNOWN |
AlertCertainty | Уверенность в том, что предмет события сообщений о неотложной помощи | OBSERVED , LIKELY , POSSIBLE , UNLIKELY , UNKNOWN |
Alert
(которая содержит информацию в таблице), предупреждение о текстовых сообщениях и AlertArea
чтобы показать информацию о текущем оповещении. Alert
- это необязательное поле в ProgramInfo
, так что его можно отправить из радиовещания Radio HAL в Radio Apps через обратные вызовы Tuner для текущей информации о программе и обновлениях списка программ.