Radyo HAL'sini yayınla

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

Yayın radyosu HAL arayüzü

Yayın radyosu HAL'i, AM/FM ve DAB radyosu gibi yayın radyosunu 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, aşağıdaki bölümlerde açıklanan arayüzleri kullanır.

IAnnouncementListener

IAnnouncementListener, duyuru dinleyicisinin geri arama arayüzüdür. Duyuru dinleyicisi, duyuru almak için yayın radyosu HAL'e kaydedilebilir. Arayüzde aşağıdaki yöntemler bulunur:

IAnnouncementListener
Açıklama: Duyuru listesi 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üze ihtiyaç duymayan geri çağırma işlevini 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, HAL istemci hizmetine güncelleme göndermek için yayın radyosu HAL tarafından çağrılan geri çağırma arayüzüdür.

ITunerCallback
Açıklama: Bir ayarlama işlemi (ayarlama, arama (AIDL'de) veya tarama (HIDL'de) ve adım başarılı olduğunda) asenkron 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: Ayarlama, arama (AIDL'de) veya tarama (HIDL'de) yapıldığında ya da adım 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: Ayarlama, arama (AIDL'de) veya tarama (HIDL'de) yapıldığında ya da adım 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 bir parçanın boyutu 500 KB ile sınırlıdır.
HIDL 2.0 oneway onProgramListUpdated(ProgramListChunk chunk)
AIDL oneway 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 özgü 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ılmamalıdır).
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'in birincil arayüzüdür. HIDL 2.0 HAL'de, işlemleri çağırmak için tuner'ın ITunerSession arayüzünü kullanın. Ancak aynı anda en fazla bir tuner etkindir (her yayın radyosu HAL örneğinin yalnızca bir tuner çipi varsa). ITunerSession, AIDL arayüzlerinden kaldırıldı ve arayüzleri IBroadcastRadio'a taşındı.

IBroadcastRadio
Açıklama: Bir modülün açıklamasını ve özelliklerini öğrenin.
HIDL 2.0 getProperties() generates (Properties properties)
AIDL Properties getProperties()
Açıklama: Mevcut veya olası AM/FM bölge yapılandırmasını alır.
HIDL 2.0 getAmFmRegionConfig(bool full) generates (Result result, AmFmRegionConfig config)
AIDL AmFmRegionConfig getAmFmRegionConfig(bool full)
Açıklama: Mevcut DAB bölge yapılandırmasını alır.
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ğindeki katı 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 dinleyicisini 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. Varsa eski geri çağırma işlevi kaldırılmalıdır.
HIDL 2.0 openSession(ITunerCallback callback), (Result result, ITunerSession session)
AIDL void setTunerCallback(in ITunerCallback callback)
Açıklama:
  • HIDL HAL: Bir tuner oturumunun kapatılması başarısız olmamalı ve yalnızca bir kez gönderilmelidir.
  • AIDL HAL: Ayarlayıcı yoktur ve yalnızca ayarlayıcı geri çağırma işlevinin ayarının kaldırılması gerekir.
HIDL 2.0 close()
AIDL unsetTunerCallback()
Açıklama: Belirtilen bir programa geçer.
HIDL 2.0 tune(ProgramSelector program) generates (Result result)
AIDL void tune(in ProgramSelector program)
Açıklama: Yayında olan bir sonraki geçerli programı arar. AIDL'de karışıklık olmaması için scan, seek olarak yeniden adlandırılır.
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 giden adımlar. Bu kanalda herhangi bir program bulunmamalıdır.
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 bir filtre uygular ve onProgramListUpdated geri çağırma ü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önderilmesini durdurur.
HIDL 2.0 stopProgramListUpdates()
AIDL void stopProgramListUpdates()
Açıklama: Belirli bir yapılandırma işaretinin mevcut ayarını alır.
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 özgü parametre değerlerini ayarlar.
HIDL 2.0 setParameters(vec<VendorKeyValue> parameters)

oluşturur,

(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 boyunca engellenmemesi gerektiğinden, zaman alıcı işlemlerin daha sonra gerçekleşmesi için planlanması ve bir durum veya sonuç hızlıca döndürülmesi gerekir. Ayrıntılı olarak belirtmek gerekirse her işlem:

  • 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) değerini hemen döndürün. Result veya status OK ise ayarlama görevi başarısız olduğunda (ör. zaman aşımı nedeniyle) veya tamamlandığında ayarlayıcı geri çağırma işlevi tuneFailed veya currentProgramInfoChanged çağrılmalıdır.

Benzer şekilde startProgramListUpdates, program listesini güncelleme gibi zaman alıcı bir görevi de daha sonra gerçekleşecek şekilde planlayarak hızlı bir şekilde durum veya sonuç döndürür. 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ış durumu

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

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

Veri boyutu sınırı

Binder işlem arabelleğinde katı bir sınır olduğundan, büyük boyutlu veri aktaran 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 için 500 KB'tan küçük bir boyut gerektirir. Daha büyük program listeleri, HAL uygulaması tarafından birden fazla parçaya bölünmeli ve birden fazla geri çağırma aracılığıyla gönderilmelidir.

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

Bu değişiklikler, arayüzlerdeki değişikliklere ek olarak AIDL'den yararlanan yayın radyosu AIDL HAL'de tanımlanan veri yapılarına da uygulandı.

  • Constant enum, AIDL'den kaldırıldı ve IBroadcastRadio içinde const 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.
  • RDS ve Deemphasis enum'ları AIDL'den kaldırıldı ve AmFmRegionConfig içinde const int olarak tanımlandı. Buna karşılık, ProgramInfo içindeki hem fmDeemphasis hem de fmRds, ilgili işaretlerin bit hesaplama sonucu olan int olarak tanımlanır. Bu sırada D50 ve D75 sırasıyla DEEMPHASIS_D50 ve DEEMPHASIS_D75 olarak yeniden adlandırılır.
  • AIDL'de enum ProgramInfoFlags kaldırılır ve ProgramInfo içinde FLAG_ ön eki eklenerek const int olarak tanımlanır. Buna karşılık, ProgramInfo içindeki infoFlags, 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ı.
  • AIDL'de scan, seek olarak yeniden adlandırıldığından AmFmBandRange'te scanSpacing, seekSpacing olarak yeniden adlandırılır.
  • AIDL'de birleştirme kavramı tanıtıldığı için HIDL HAL'de tanımlanan MetadataKey ve Metadata artık kullanılmıyor. AIDL HAL'de bir AIDL birleştirme Metadata tanımlanır. Daha önce MetadataKey içinde bulunan her enum değeri artık tanımları doğrultusunda Metadata içinde string veya int türüne sahip 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'de DAB ve DMB radyo için birincil tanımlayıcı türü DAB_SID_EXT'tür. DAB_SID_EXT, hem DAB hem de DMB radyosunun SID'sini temsil edebilmek için 32 bit 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 bir DAB_SID_EXT paylaşabileceğinden bu önemlidir. Program listesi güncellemelerinin doğru olduğundan emin olmak için aynı DAB_SID_EXT değerine sahip istasyonlar, ITunerCallback#onProgramListUpdated kullanılarak birlikte güncellenir. Bu güncelleme daha sonra Yayın Radyosu Hizmeti ve Radyo Yöneticisi'ne, ardından 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 toplu adı
dabServiceName (dabServiceNameShort'ten kısaltılmıştır) DAB istasyonunun hizmet adı
dabComponentName (dabComponentNameShort'ten kısaltılmıştır) 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ı için birincil tanımlayıcı görevi görür. İstasyon tanımlamasını daha da geliştirmek için HD_STATION_NAME ve HD_STATION_LOCATION gibi ikincil tanımlayıcılar da sağlanır. Konum bilgisi sağlayan HD_STATION_LOCATION, Android 15'te kullanıma sunuldu.

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

Android 15'ten itibaren ConfigFlag'leri ayarlayarak dijital radyoyu (HD radyo gibi) 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 mevcut

Android 15'ten itibaren, HD radyo istasyonu için şu anda kullanılabilen HD kanallar ProgramInfo.metadata içinde 8 bitlik bir bit maskesi (Metadata#hdSubChannelsAvailable) ile temsil edilebilir. Örneğin, soldaki 1. bitin değeri, bu HD istasyonda HD2 alt kanalının kullanılıp kullanılamayacağını gösterir.

Sinyal edinme durumu

Android 15 ve sonraki sürümlerde radyo uygulamaları, kullanıcılara HD radyo istasyonlarının sinyal edinme 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 amacıyla ProgramInfo.infoFlags'i kullanır ve radyo uygulamasını ITunerCallback#onCurrentProgramInfoChanged. üzerinden günceller.

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

  • 6. bit: HD radyo sinyalinin alınıp alınmadığını belirtir.
  • 7. bit: İstasyon Bilgileri Hizmeti (ÖBS) verilerinin mevcut olup olmadığını gösterir. SIS, istasyon ve çalan şarkılar hakkında ek bilgiler sağlar.
  • 8. bit: HD dijital sesin kullanılıp kullanılamadığı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 bir mesaj.