Radyo yayını HAL

Aşağıdaki bölümlerde, yayın radyosunu uygulamak için donanım soyutlama katmanıyla (HAL) nasıl çalışılacağı açıklanmaktadır.

Yayın radyosu HAL arayüzü

Yayın radyo HAL'si, AM/FM ve DAB radyo gibi yayın radyolarını uygulamak için donanım düzeyinde veri yapıları ve arayüzler sağlar.

HIDL 2.0 ve AIDL arayüzleri

Yayın radyosu HAL'si, aşağıdaki bölümlerde açıklanan arayüzleri kullanır.

IAnnouncementListener

IAnnouncementListener, duyuruları almak için yayın radyosu HAL'ına kaydedilebilen duyuru işleyicinin geri arama arayüzüdür. Arayüzde aşağıdaki yöntemler bulunur:

IAnnouncementListener
Açıklama: Duyuru listesi her değiştiğinde çağrılır.
HIDL 2.0 oneway onListUpdated(vec<Announcement> announcements)
AIDL oneway void onListUpdated(in Announcement[] announcements)

ICloseHandle

ICloseHandle, etkin bir arayüz gerektirmeyen geri çağırmayı kaldırmak için kullanılan genel kapatma işleyicisidir.

ICloseHandle
Açıklama: Kolu kapatın.
HIDL 2.0 close()
AIDL void close()

ITunerCallback

ITunerCallback, yayın radyosu HAL'ı tarafından HAL istemci hizmetine güncellemeler göndermek için çağrılan geri çağırma arayüzüdür.

ITunerCallback
Açıklama: Bir ayarlama işlemi (tune, seek (AIDL'de) veya scan (HIDL'de) ve step başarılı olduğunda) eşzamansız olarak başarısız olduğunda HAL tarafından çağrılır.
HIDL 2.0 oneway onCurrentProgramInfoChanged(ProgramInfo info)
AIDL void onCurrentProgramInfoChanged(in ProgramInfo info)
Açıklama: Tune, seek (AIDL'de) veya scan (HIDL'de) ya da step başarılı olduğunda çağrılır.
HIDL 2.0 oneway onTuneFailed(Result result, ProgramSelector selector)
AIDL void onTuneFailed(in Result result, in ProgramSelector selector)
Açıklama: Tune, seek (AIDL'de) veya scan (HIDL'de) ya da step başarılı olduğunda çağrılır.
HIDL 2.0 oneway onCurrentProgramInfoChanged(ProgramInfo info)
AIDL void onCurrentProgramInfoChanged(in ProgramInfo info)
Açıklama: Program listesi güncellendiğinde çağrılır. Her parçanın boyutu 500 KiB ile sınırlı olmalıdır.
HIDL 2.0 oneway onProgramListUpdated(ProgramListChunk chunk)
AIDL void onProgramListUpdated(ProgramListChunk chunk)
Açıklama: Anten bağlandığında veya bağlantısı kesildiğinde çağrılır.
HIDL 2.0 oneway onAntennaStateChange(bool connected)
AIDL void onCurrentProgramInfoChanged(in ProgramInfo info)
Açıklama: Tedarikçiye özel parametre değerleri HAL'de dahili olarak güncellendiğinde çağrılır (HAL istemcisi tarafından setParameters çağrıldıktan sonra çağrılmaz).
HIDL 2.0 oneway onParametersUpdated(vec<VendorKeyValue> parameters)
AIDL void onParametersUpdated(in VendorKeyValue[] parameters)
Açıklama: AIDL'de yeni. Yapılandırma işareti HAL'de dahili olarak güncellendiğinde çağrılır (HAL istemcisi tarafından setConfigFlag çağrıldıktan sonra çağrılmamalıdır).
HIDL 2.0 Geçerli değil.
AIDL void onConfigFlagUpdated(in ConfigFlag flag, in boolean value)

IBroadcastRadio

IBroadcastRadio, yayın radyosu HAL'sinin birincil arayüzüdür. HIDL 2.0 HAL'de işlemleri çağırmak için tuner'a yönelik ITunerSession arayüzünü kullanın. Ancak, her yayın radyosu HAL örneğinde yalnızca bir tuner çipi olması koşuluyla, aynı anda en fazla bir tuner etkin olabilir. ITunerSession, AIDL arayüzlerinden kaldırıldı ve arayüzleri IBroadcastRadio'ye taşındı.

IBroadcastRadio
Açıklama: Bir modülün ve özelliklerinin açıklamasını alın.
HIDL 2.0 getProperties() generates (Properties properties)
AIDL Properties getProperties()
Açıklama: Mevcut veya olası AM/FM bölge yapılandırmasını getirir.
HIDL 2.0 getAmFmRegionConfig(bool full) generates (Result result, AmFmRegionConfig config)
AIDL AmFmRegionConfig getAmFmRegionConfig(bool full)
Açıklama: Mevcut DAB bölgesi yapılandırmasını getirir.
HIDL 2.0 getDabRegionConfig() generates (Result result, vec<DabTableEntry> config)
AIDL DabTableEntry[] getDabRegionConfig()
Açıklama: Radyo modülü önbelleğinden bir resim alır. AIDL'de, bağlayıcı işlem arabelleğiyle ilgili kesin bir sınır nedeniyle resim boyutu 1 MB'tan küçük olmalıdır.
HIDL 2.0 getImage(uint32_t id) generates (vec<uint8_t> image)
AIDL byte[] getImage(in int id)
Açıklama: Duyuru işleyicisini kaydeder.
HIDL 2.0 registerAnnouncementListener(vec<AnnouncementType> enabled,IAnnouncementListener listener) generates (Result result, ICloseHandle closeHandle)
AIDL ICloseHandle registerAnnouncementListener(in IAnnouncementListener listener, in AnnouncementType[] enabled)
Açıklama:
  • HIDL HAL: Yeni bir tuner oturumu açıldığında eski oturum sonlandırılmalıdır.
  • AIDL HAL: Tuner oturumu olmadığından yalnızca tuner geri çağırma işlevinin ayarlanması gerekir. Eski geri arama varsa ayarı kaldırılmalıdır.
HIDL 2.0 openSession(ITunerCallback callback) oluşturur. (Result result, ITunerSession session)
AIDL void setTunerCallback(in ITunerCallback callback)
Açıklama:
  • HIDL HAL: Bir tuner oturumunu kapatma işlemi başarısız olmamalı ve yalnızca bir kez verilmelidir.
  • AIDL HAL: Tuner yoktur ve yalnızca tuner geri çağırmasının ayarı kaldırılmalıdır.
HIDL 2.0 close()
AIDL unsetTunerCallback()
Açıklama: Belirtilen programa geçer.
HIDL 2.0 tune(ProgramSelector program) generates (Result result)
AIDL void tune(in ProgramSelector program)
Açıklama: Yayın için bir sonraki geçerli programı arar. AIDL'de karışıklığı önlemek için, scan, seek olarak yeniden adlandırıldı.
HIDL 2.0 scan(bool directionUp, bool skipSubChannel) generates (Result result)
AIDL void seek(in boolean directionUp, in boolean skipSubChannel)
Açıklama: Bitişik kanala geçiş adımları. Bu kanal herhangi bir program tarafından kullanılmıyor olabilir.
HIDL 2.0 step(bool directionUp) generates (Result result)
AIDL void step(in boolean directionUp)
Açıklama: Beklemedeki ayarlama, tarama (HIDL'de) veya arama (AIDL'de) ya da adım işlemlerini iptal eder.
HIDL 2.0 cancel()
AIDL void cancel()
Açıklama: Program listesine filtre uygular ve onProgramListUpdated geri çağırma işlevi üzerinden program listesi güncellemeleri göndermeye başlar.
HIDL 2.0 startProgramListUpdates(ProgramFilter filter) generates (Result result)
AIDL void startProgramListUpdates(in ProgramFilter filter)
Açıklama: Program listesi güncellemelerinin gönderilmesi durdurulur.
HIDL 2.0 stopProgramListUpdates()
AIDL void stopProgramListUpdates()
Açıklama: Belirli bir yapılandırma işaretinin geçerli ayarını getirir.
HIDL 2.0 isConfigFlagSet(ConfigFlag flag) generates (Result result, bool value)
AIDL boolean isConfigFlagSet(in ConfigFlag flag)
Açıklama: Belirtilen yapılandırma işaretini ayarlar.
HIDL 2.0 setConfigFlag(ConfigFlag flag, bool value) generates (Result result)
AIDL void setConfigFlag(in ConfigFlag flag, boolean value)
Açıklama: Tedarikçiye özel parametre değerlerini ayarlar.
HIDL 2.0 setParameters(vec<VendorKeyValue> parameters)

üretir,

(vec<VendorKeyValue> results)
AIDL VendorKeyValue[] setParameters(in VendorKeyValue[] parameters)
Açıklama: Tedarikçiye özgü parametre değerlerini alır.
HIDL 2.0 getParameters(vec<string> keys) generates (vec<VendorKeyValue> parameters)
AIDL VendorKeyValue[] getParameters(in String[] keys)

Arayüz açıklamaları

Eşzamansız davranış

Her ayarlama işlemi (ör. ayarlama, tarama (HIDL'de) veya arama (AIDL'de) ve adım) zaman alıcı olabileceğinden ve iş parçacığı uzun süre engellenmemesi gerektiğinden, işlem zaman alıcı işlemlerin daha sonra gerçekleşmesini planlamalı ve hızlı bir şekilde durum veya sonuç döndürmelidir. Ayrıntılı olarak, her işlem şunları yapmalıdır:

  • Beklemedeki tüm ayarlama işlemlerini iptal edin.
  • İşlemin, yöntem girişlerine ve tuner'ın durumuna göre işlenip işlenemeyeceğini kontrol edin.
  • Ayarlama görevini planlayın ve ardından Result (HIDL'de) veya status (AIDL'de) öğesini hemen döndürün. Result veya status OK ise ayarlama görevi başarısız olduğunda (örneğin, zaman aşımı nedeniyle) veya tamamlandığında tuner geri çağırma tuneFailed veya currentProgramInfoChanged çağrılmalıdır.

Benzer şekilde, startProgramListUpdates de program listesini güncelleme gibi zaman alan görevin daha sonra gerçekleşmesini ve hızlı bir şekilde durum veya sonuç döndürmesini planlar. Bu yöntem, önce bekleyen güncelleme isteklerini iptal eder, ardından güncelleme görevini planlar ve sonucu hızlı bir şekilde döndürür.

Yarışma durumu

Ayarlama işlemlerinin (ör. ayarlama, tarama (HIDL'de) veya arama (AIDL'de) ve adım) eşzamansız davranışı nedeniyle, işlemi iptal etme ile ayarlama işlemleri arasında bir yarış durumu vardır. HAL bir ayarlama işlemini tamamladıktan sonra ve geri çağırma tamamlanmadan önce cancel çağrılırsa iptal işlemi yoksayılabilir, geri çağırma tamamlanmalı ve HAL istemcisi tarafından alınmalıdır.

Benzer şekilde, HAL bir program listesi güncellemesini tamamladıktan ve onCurrentProgramInfoChanged geri çağırma işlemi tamamlanmadan önce stopProgramListUpdates çağrılırsa stopProgramListUpdates yoksayılabilir ve geri çağırma işlemi tamamlanmalıdır.

Veri boyutu sınırı

Bağlayıcı işlem arabelleğinde kesin bir sınır olduğundan, büyük boyutlu olabilecek verileri ileten bazı arayüz yöntemlerinin veri sınırı AIDL HAL'de açıklanmıştır.

  • getImage, döndürülen resmin 1 MB'tan küçük olmasını gerektirir.
  • onProgramListUpdate, her chunk öğesinin 500 KiB'tan küçük olmasını gerektirir. Daha büyük program listeleri, HAL uygulaması tarafından birden fazla parçaya bölünmeli ve birden fazla geri çağırma yoluyla gönderilmelidir.

AIDL HAL veri yapılarındaki değişiklikler

Bu değişiklikler, arayüzlerdeki değişikliklerin yanı sıra AIDL'den yararlanan yayın radyosu AIDL HAL'de tanımlanan veri yapılarına da uygulanmıştır.

  • Constant numaralandırması AIDL'de kaldırıldı ve IBroadcastRadio içinde sabit int olarak tanımlandı. Bu sırada ANTENNA_DISCONNECTED_TIMEOUT_MS, ANTENNA_STATE_CHANGE_TIMEOUT_MS olarak yeniden adlandırılır. Yeni bir const int TUNER_TIMEOUT_MS eklenir. Tüm ayarlama, arama ve adım işlemleri bu süre içinde tamamlanmalıdır.
  • Enum RDS ve Deemphasis, AIDL'de kaldırıldı ve AmFmRegionConfig içinde const int olarak tanımlandı. Buna göre, ProgramInfo içindeki hem fmDeemphasis hem de fmRds, ilgili işaretlerin bit hesaplama sonucu olan int olarak bildirilir. Bu sırada D50 ve D75 sırasıyla DEEMPHASIS_D50 ve DEEMPHASIS_D75 olarak yeniden adlandırılır.
  • Enum ProgramInfoFlags, AIDL'de kaldırılır ve ProgramInfo içinde FLAG_ ön eki eklenerek sabit tam sayı olarak tanımlanır. Buna göre, infoFlags in ProgramInfo, int olarak tanımlanır. Bu, işaretlerin bit hesaplama sonucudur. TUNED, istasyonun ayarlanabileceği tanımını daha iyi açıklamak için FLAG_TUNABLE olarak da yeniden adlandırıldı.
  • AmFmBandRange içinde scanSpacing, seekSpacing olarak yeniden adlandırılır. Bunun nedeni, scan ifadesinin AIDL'de seek olarak yeniden adlandırılmasıdır.
  • AIDL'de birleşim kavramı tanıtıldığından HIDL HAL'de tanımlanan MetadataKey ve Metadata artık kullanılmıyor. AIDL birliği Metadata AIDL HAL'de tanımlanır. Daha önce MetadataKey içinde bulunan her enum değeri, artık tanımlarına bağlı olarak dize veya tam sayı türünde Metadata içinde bir alandır.

DAB radyo desteği

Bu bölümde, DAB radyo desteği açıklanmaktadır.

Tanımlayıcılar

AIDL Broadcast Radio HAL'deki DAB ve DMB radyosu için birincil tanımlayıcı türü DAB_SID_EXT'dır. DAB_SID_EXT, hem DAB hem de DMB radyonun SID'sini temsil edebilmesi için 32 bitlik hizmet tanımlayıcıları (SID'ler) kullanır.

Birincil tanımlayıcılara ek olarak DAB_ENSEMBLE ve DAB_FREQUENCY_KHZ gibi ikincil tanımlayıcılar da desteklenir. Birden fazla DAB istasyonu farklı DAB_ENSEMBLE veya DAB_FREQUENCY_KHZ değerlerine sahipken DAB_SID_EXT paylaşabildiğinden bu önemlidir. Program listesinin doğru şekilde güncellenmesi için aynı DAB_SID_EXT olan istasyonlar, ITunerCallback#onProgramListUpdated kullanılarak birlikte güncellenir. Bu güncelleme daha sonra Broadcast Radio Service ve Radio Manager'a, son olarak da android.hardware.radio.ProgramList üzerinden radyo uygulamasına iletilir.

Meta veri

Aşağıdaki tabloda, AIDL Broadcast Radio HAL'de DAB'ye özgü desteklenen meta veriler gösterilmektedir:

Meta veri alanı Açıklama
dabEnsembleName (kısaltılmış biçim: dabEnsembleNameShort) DAB istasyonunun topluluk adı
dabServiceName (dabServiceNameShort kısaltması) DAB istasyonunun hizmet adı
dabComponentName (dabComponentNameShort kısaltması) DAB istasyonunun bileşen adı

HD radyo desteği

Bu bölümde, HD radyo desteği açıklanmaktadır.

Tanımlayıcılar

HD_STATION_ID_EXT, HD radyo istasyonlarının birincil tanımlayıcısıdır. İstasyon tanımlamayı daha da geliştirmek için HD_STATION_NAME ve HD_STATION_LOCATION gibi ikincil tanımlayıcılar da sağlanır. HD_STATION_LOCATION, Android 15'te kullanıma sunuldu.

Dijital radyoyu etkinleştirme veya devre dışı bırakma

Android 15'ten itibaren, ConfigFlag ayarlarını yaparak dijital radyoyu (ör. HD radyo) etkinleştirebilir veya devre dışı bırakabilirsiniz. FM radyo için bu ayarı kontrol etmek üzere FORCE_ANALOG_FM işaretini, AM radyo için ise FORCE_ANALOG_AM işaretini kullanın. İşareti false olarak ayarlamak HD radyoyu etkinleştirirken true olarak ayarlamak analog AM/FM radyoyu zorunlu kılar.

HD kanallar kullanılabilir

Android 15'ten itibaren, şu anda HD radyo istasyonu için kullanılabilen HD kanallar, Metadata#hdSubChannelsAvailable bit maskesiyle ProgramInfo.metadata içinde 8 bit olarak gösterilebilir. Örneğin, soldan 1. bitin değeri, bu HD istasyonu için HD2 alt kanalının kullanılabilir olup olmadığını gösterir.

Sinyal edinme durumu

Android 15 ve sonraki sürümlerde radyo uygulamaları, kullanıcılara HD radyo istasyonlarının sinyal alma durumunu gösterebilir. Güçlü bir HD sinyali almak bazen birkaç dakika sürebileceğinden bu özellik faydalıdır.

Sistem, bu bilgileri sağlamak için durumu izlemek üzere ProgramInfo.infoFlags uygulamasını kullanır ve radyo uygulamasını ITunerCallback#onCurrentProgramInfoChanged. üzerinden günceller.

Durum, ProgramInfo.infoFlags içinde şu şekilde gösterilir:

  • Bit 6: HD radyo sinyalinin alınıp alınmadığını gösterir.
  • Bit 7: İstasyon Bilgisi Hizmeti (SIS) verilerinin kullanılabilir olup olmadığını gösterir. SIS, istasyon ve çalınan içerik hakkında ek bilgiler sağlar.
  • Bit 8: HD dijital sesin kullanılabilir olup olmadığını belirtir.

Meta veri

Aşağıdaki tabloda, Android 15 ve sonraki sürümlerde desteklenen HD radyo meta verileri gösterilmektedir.

Meta veri alanı Açıklama
commentShortDescription Yorumun kısa bağlam açıklaması
commentActualText Yorum metni
commercial Radyo reklamı
ufids İçerikle ilişkili benzersiz dosya tanımlayıcıları (UFID'ler)
hdStationNameShort HD radyo istasyonunun kısa adı veya evrensel kısa adı
hdStationNameLong HD radyo istasyonunun uzun adı, sloganı veya istasyondan gelen bir mesaj.

Acil durum uyarıları

Android 15 ve sonraki sürümlerde, radyo uygulaması kullanıcılarını radyo istasyonlarından gönderilen acil durum uyarıları hakkında bilgilendirmek için HD radyo istasyonlarında acil durum uyarıları desteklenir. Acil durum uyarısı (Alert), Common Alerting Protocol (CAP) 1.2 Standardı'na uygun olarak çalışır ve aşağıdaki tabloda gösterilen uyarıları destekler:

Uyarı bilgileri Açıklama Kullanılabilir enum değerleri
AlertStatus Uyarı mesajının durumu ACTUAL, EXERCISE, TEST
AlertMessageType Acil durum uyarısı mesaj türü ALERT, UPDATE, CANCEL
AlertCategory Acil durum uyarı mesajının konu etkinliğinin kategorisi GEO, MET, SAFETY, SECURITY, RESCUE, FIRE, HEALTH, ENV, TRANSPORT, INFRA, CBRNE, OTHER
AlertUrgency Acil durum uyarı mesajının konusunu oluşturan etkinliğin aciliyeti IMMEDIATE, EXPECTED, FUTURE, PAST, UNKNOWN
AlertSeverity Acil durum uyarı mesajının konusunu oluşturan olayın ciddiyeti EXTREME, SEVERE, MODERATE, MINOR, UNKNOWN
AlertCertainty Acil durum uyarı mesajının konu etkinliğinin kesinliği OBSERVED, LIKELY, POSSIBLE, UNLIKELY, UNKNOWN
Mevcut uyarı hakkında bilgi göstermek için Alert (tablodaki bilgileri içerir), uyarı metin mesajları ve AlertArea öğelerini kullanabilirsiniz. Alert, ProgramInfo içinde isteğe bağlı bir alandır. Bu sayede, mevcut program bilgileri ve program listesi güncellemeleri için tuner geri aramaları aracılığıyla Broadcast Radio HAL'den radyo uygulamalarına gönderilebilir.