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 2.0 | openSession(ITunerCallback callback) ,
(Result result, ITunerSession session) |
|
AIDL | void setTunerCallback(in ITunerCallback callback) |
|
Açıklama:
|
||
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) veyastatus
(AIDL'de) değerini hemen döndürün.Result
veyastatus
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şlevituneFailed
veyacurrentProgramInfoChanged
ç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
, herchunk
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ı veIBroadcastRadio
içinde const int olarak tanımlandı. Bu sıradaANTENNA_DISCONNECTED_TIMEOUT_MS
,ANTENNA_STATE_CHANGE_TIMEOUT_MS
olarak yeniden adlandırılır. Yeni bir const intTUNER_TIMEOUT_MS
eklenir. Tüm ayarlama, arama ve adım işlemleri bu süre içinde tamamlanmalıdır.RDS
veDeemphasis
enum'ları AIDL'den kaldırıldı veAmFmRegionConfig
içinde const int olarak tanımlandı. Buna karşılık,ProgramInfo
içindeki hemfmDeemphasis
hem defmRds
, ilgili işaretlerin bit hesaplama sonucu olan int olarak tanımlanır. Bu sıradaD50
veD75
sırasıylaDEEMPHASIS_D50
veDEEMPHASIS_D75
olarak yeniden adlandırılır.- AIDL'de enum
ProgramInfoFlags
kaldırılır veProgramInfo
içindeFLAG_
ön eki eklenerek const int olarak tanımlanır. Buna karşılık,ProgramInfo
içindekiinfoFlags
, int olarak tanımlanır. Bu, işaretlerin bit hesaplama sonucudur.TUNED
, istasyonun ayarlanabileceği tanımını daha iyi açıklamak içinFLAG_TUNABLE
olarak da yeniden adlandırıldı. - AIDL'de
scan
,seek
olarak yeniden adlandırıldığındanAmFmBandRange
'tescanSpacing
,seekSpacing
olarak yeniden adlandırılır. - AIDL'de birleştirme kavramı tanıtıldığı için HIDL HAL'de tanımlanan
MetadataKey
veMetadata
artık kullanılmıyor. AIDL HAL'de bir AIDL birleştirmeMetadata
tanımlanır. Daha önceMetadataKey
içinde bulunan her enum değeri artık tanımları doğrultusundaMetadata
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. |