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 2.0 | openSession(ITunerCallback callback) oluşturur.
(Result result, ITunerSession session) |
|
AIDL | void setTunerCallback(in ITunerCallback callback) |
|
Açıklama:
|
||
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) veyastatus
(AIDL'de) öğesini hemen döndürün.Result
veyastatus
OK
ise ayarlama görevi başarısız olduğunda (örneğin, zaman aşımı nedeniyle) veya tamamlandığında tuner geri çağırmatuneFailed
veyacurrentProgramInfoChanged
ç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
, herchunk
öğ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ı veIBroadcastRadio
içinde sabit 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.- Enum
RDS
veDeemphasis
, AIDL'de kaldırıldı veAmFmRegionConfig
içinde const int olarak tanımlandı. Buna göre,ProgramInfo
içindeki hemfmDeemphasis
hem defmRds
, ilgili işaretlerin bit hesaplama sonucu olan int olarak bildirilir. Bu sıradaD50
veD75
sırasıylaDEEMPHASIS_D50
veDEEMPHASIS_D75
olarak yeniden adlandırılır. - Enum
ProgramInfoFlags
, AIDL'de kaldırılır veProgramInfo
içindeFLAG_
ön eki eklenerek sabit tam sayı olarak tanımlanır. Buna göre,infoFlags
inProgramInfo
, 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ı. AmFmBandRange
içindescanSpacing
,seekSpacing
olarak yeniden adlandırılır. Bunun nedeni,scan
ifadesinin AIDL'deseek
olarak yeniden adlandırılmasıdır.- AIDL'de birleşim kavramı tanıtıldığından HIDL HAL'de tanımlanan
MetadataKey
veMetadata
artık kullanılmıyor. AIDL birliğiMetadata
AIDL HAL'de tanımlanır. Daha önceMetadataKey
içinde bulunan her enum değeri, artık tanımlarına bağlı olarak dize veya tam sayı türündeMetadata
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 |
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.