Radyo HAL'sini yayınla

Aşağıdaki bölümlerde, donanım soyutlama katmanı (HAL) ile nasıl çalışabileceğiniz ve uygulanmasına yardımcı olabilir.

Yayın radyo HAL arayüzü

Broadcast radyo HAL'si, aşağıdakileri yapabilmek için donanım düzeyinde veri yapıları ve arayüzleri sağlar: AM/FM ve DAB radyosu gibi radyo anonslarını uygulama.

HIDL 2.0 ve AIDL arayüzleri

Radyo HAL yayınında, aşağıdaki bölümlerde açıklanan arayüzler kullanılır.

DuyuruDinleyici

IAnnouncementListener, duyuru dinleyicisi için geri arama arayüzüdür. Duyuru almak için radyo HAL yayınında kaydedilebilir. Arayüz şu özelliklere sahiptir: yöntemleri:

DuyuruDinleyici
Açıklama: Duyuru listesinde her seferinde çağrılır değiştirildi.
HIDL 2.0 oneway onListUpdated(vec<Announcement> announcements)
AIDL oneway void onListUpdated(in Announcement[] announcements)

Kapanış tanıtıcısı

ICloseHandle, etkin bir arayüze sahip.

Kapanış tanıtıcısı
Açıklama: Herkese açık kullanıcı adını kapatın.
HIDL 2.0 close()
AIDL void close()

ITunerCallback

ITunerCallback, yayın radyosu HAL'si tarafından şuna çağrılan geri çağırma arayüzüdür: HAL istemci hizmetlerine güncelleme gönderebilirsiniz.

ITunerCallback
Açıklama: Ayarlama işlemi sırasında HAL tarafından çağrıldı (hassas ayar yapma, arama (AIDL'de) veya tarama (HIDL'de) ve adım başarılı olduğunda), eşzamansız olarak başarısız olur.
HIDL 2.0 oneway onCurrentProgramInfoChanged(ProgramInfo info)
AIDL void onCurrentProgramInfoChanged(in ProgramInfo info)
Açıklama: Ayarlayın, arayın (AIDL'de) veya tarayın (HIDL'de) veya adım başarılı olur.
HIDL 2.0 oneway onTuneFailed(Result result, ProgramSelector selector)
AIDL void onTuneFailed(in Result result, in ProgramSelector selector)
Açıklama: Ayarlayın, arayın (AIDL'de) veya tarayın (HIDL'de) veya adım başarılı olur.
HIDL 2.0 oneway onCurrentProgramInfoChanged(ProgramInfo info)
AIDL void onCurrentProgramInfoChanged(in ProgramInfo info)
Açıklama: Program listesi güncellendiğinde çağrılır; "the" her parçanın boyutu 500 kiB ile sınırlı olmalıdır.
HIDL 2.0 oneway onProgramListUpdated(ProgramListChunk chunk)
AIDL oneway onProgramListUpdated(ProgramListChunk chunk)
Açıklama: Anten bağlandığında veya bağlantı kesildi.
HIDL 2.0 oneway onAntennaStateChange(bool connected)
AIDL void onCurrentProgramInfoChanged(in ProgramInfo info)
Açıklama: Tedarikçi firmaya özel parametre aşağıdaki durumlarda çağrılır: değerler HAL'de dahili olarak güncellenir (çağrıdan sonra çağırmayın) setParameters) ekleyebilirsiniz.
HIDL 2.0 oneway onParametersUpdated(vec<VendorKeyValue> parameters)
AIDL void onParametersUpdated(in VendorKeyValue[] parameters)
Açıklama: AIDL'deki yenilikler. Yapılandırma işareti şu olduğunda çağrılır: HAL içinde dahili olarak güncellenir ( setConfigFlag, HAL istemcisi tarafından arandıktan sonra çağrıldı).
HIDL 2.0 Geçerli değil.
AIDL void onConfigFlagUpdated(in ConfigFlag flag, in boolean value)

IYayınRadyosu

IBroadcastRadio, radyo HAL yayını için birincil arayüzdür. HIDL'de 2.0 HAL, arama işlemleri için tarayıcının ITunerSession arayüzünü kullanın. Ancak, aynı anda en fazla bir kanal ayarlayıcı etkin olmalıdır (her yayın radyo HAL örneğinin yalnızca bir tarayıcısı olması koşuluyla) çipi). ITunerSession, AIDL arayüzlerinden kaldırıldı ve arayüzleri şuraya taşındı: IBroadcastRadio.

IYayınRadyosu
Açıklama: Bir modülün açıklamasını ve özellikler.
HIDL 2.0 getProperties() generates (Properties properties)
AIDL Properties getProperties()
Açıklama: Mevcut veya olası ÖÖ/FM'yi getirir Bölge yapılandırması.
HIDL 2.0 getAmFmRegionConfig(bool full) generates (Result result, AmFmRegionConfig config)
AIDL AmFmRegionConfig getAmFmRegionConfig(bool full)
Açıklama: Geçerli DAB bölgesini getirir yapılandırma.
HIDL 2.0 getDabRegionConfig() generates (Result result, vec<DabTableEntry> config)
AIDL DabTableEntry[] getDabRegionConfig()
Açıklama: Radyo modülü önbelleğinden bir görüntü alır. AIDL'de resim boyutu 1 MB'tan küçük olmalıdır (bağlayıcı işlem tamponu üzerindeki sabit sınır nedeniyle)
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 tarayıcı oturumu açıldığında, eski oturum sonlandırılmalıdır.
  • AIDL HAL: Tarayıcı oturumu kullanılamadığından, yalnızca tarayıcı geri çağırmasının ayarlanması gerekir. Varsa eski geri çağırma ayarlanmamış olmalıdır.
HIDL 2.0 openSession(ITunerCallback callback) oluşturur (Result result, ITunerSession session)
AIDL void setTunerCallback(in ITunerCallback callback)
Açıklama:
  • HIDL HAL: Tarayıcı oturumu kapatılamaz ve yalnızca bir kez gerçekleştirilmelidir.
  • AIDL HAL: Tarayıcı yoktur ve yalnızca kanal geri arama işlevinin kaldırılması gerekir.
HIDL 2.0 close()
AIDL unsetTunerCallback()
Açıklama: Belirli bir programa ayarlar.
HIDL 2.0 tune(ProgramSelector program) generates (Result result)
AIDL void tune(in ProgramSelector program)
Açıklama: Bir sonraki geçerli programı air. AIDL'de karışıklık olmaması 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 giden adımlar görevli olabilir.
HIDL 2.0 step(bool directionUp) generates (Result result)
AIDL void step(in boolean directionUp)
Açıklama: Beklemedeki ayar, tarama (HIDL'de) veya sarma işlemlerini iptal eder (AIDL'de) veya adım işlemleri.
HIDL 2.0 cancel()
AIDL void cancel()
Açıklama: Program listesine bir filtre uygular ve program listesi güncellemelerini göndermeye başladığında onProgramListUpdated geri arama.
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 öğenin geçerli ayarını getirir yapılandırma işaretini kullanın.
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çi firmaya özel 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çi firmaya özel 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 (örneğin ince ayar yapma, tarama (HIDL'de) veya arama (AIDL'de) ve adım) çok zaman alabilir ve iş parçacığının uzun süre engellenmemesi gerekiyorsa, işlem Zaman alan işlemleri daha sonra gerçekleşecek şekilde planlamak ve hızlı bir şekilde durum veya sonuç döndürmek için kullanılır. Ayrıntılı olarak her işlemde şunları yapmalıdır:

  • Bekleyen tüm ayarlama işlemlerini iptal et.
  • Yöntem girişlerine ve akort aracı.
  • Ayarlama görevini planlayın ve Result cihazını (HIDL'de) iade edin veya status (AIDL'de) hemen. Result veya status OK ise kanal ayarlayıcı geri çağırması İnce ayar sırasında tuneFailed veya currentProgramInfoChanged çağrılmalıdır görev başarısız olduysa (örneğin, zaman aşımı nedeniyle) veya tamamlandıysa.

Benzer şekilde, startProgramListUpdates zaman alan bir görevin de ve kısa sürede bir durum ya da sonuç döndürmek için program listesini güncellemektir. Yöntem önce beklemedeki güncelleme isteklerini iptal eder, ardından güncelleme görevini planlar ve yardımcı olur.

Yarış durumu

İnce ayar işlemlerinin (ör. ince ayar yapma, tarama (HIDL'de) veya sarma) işleminin eşzamansız davranışı nedeniyle (AIDL'de) ve adım) içeriyorsa işlemi iptal etme ve ayarlama arasında bir yarış koşulu vardır anlamına gelir. cancel, HAL bir ayarlama işlemini tamamladıktan sonra ve önce geri arama tamamlanır, iptal göz ardı edilebilir ve geri arama tamamlanıp alınır gerçekleştirebilirsiniz.

Benzer şekilde, stopProgramListUpdates HAL bir programı tamamladıktan sonra çağrılırsa onCurrentProgramInfoChanged geri çağırması tamamlanmadan önce stopProgramListUpdates yoksayılabilir ve geri arama tamamlanır.

Veri boyutu sınırı

Bağlayıcı işlem tamponu üzerinde kesin bir sınır olduğundan bazı arayüzler için veri limiti kullanılabilecek tüm yöntemlere ek olarak AIDL HAL'de açıklığa kavuşturulmuştur.

  • getImage, görüntünün 1 MB'tan az döndürülmesini gerektiriyor.
  • onProgramListUpdate, her bir chunk değerinin 500 kiB'tan küçük olmasını gerektirir. Daha büyük program listeleri, HAL uygulamasına göre birden fazla parçaya bölünüp birden fazla geri arama.

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

Arayüzlerdeki değişikliklere ek olarak, bu değişiklikler veri yapılarına da uygulandı AIDL'den yararlanan radyo AIDL HAL yayınında tanımlanmıştır.

  • Constant sıralaması AIDL'den kaldırılır ve IBroadcastRadio. Bu arada, ANTENNA_DISCONNECTED_TIMEOUT_MS yeniden adlandırıldı Hedef: ANTENNA_STATE_CHANGE_TIMEOUT_MS. Yeni değer TUNER_TIMEOUT_MS eklendi. Tüm ayarlama, sarma ve adım işlemleri bu süre içinde tamamlanmalıdır.
  • Enum RDS ve Deemphasis, AIDL'de kaldırılır ve const int olarak tanımlanır AmFmRegionConfig içinde. Buna karşılık olarak hem fmDeemphasis hem de ProgramInfo içindeki fmRds, int olarak bildirildi. Bu, şunun küçük bir hesaplama sonucudur: tıklayın. Bu sırada D50 ve D75 şu şekilde yeniden adlandırıldı: Sırasıyla DEEMPHASIS_D50 ve DEEMPHASIS_D75.
  • Enum ProgramInfoFlags, AIDL'den kaldırılır ve şurada const int olarak tanımlanır: FLAG_ ön ekine sahip ProgramInfo eklendi. Bunun üzerine, ProgramInfo içindeki infoFlags öğesi, int olarak tanımlandı. Bu, biraz hesaplama sonucudur. görebilirsiniz. TUNED, daha iyi tanımlamak için FLAG_TUNABLE olarak yeniden adlandırıldı istasyonun ayarlanabildiği tanımıdır.
  • AmFmBandRange bölgesinde scanSpacing şu şekilde yeniden adlandırıldı: scan, AIDL'de seek olarak yeniden adlandırıldığı için seekSpacing.
  • AIDL'de birlik kavramı ortaya çıktığı için, MetadataKey ve HIDL HAL'de tanımlanan Metadata artık kullanılmıyor. Bir AIDL birliği Metadata AIDL HAL'de tanımlanmıştır. Daha önce MetadataKey içinde yer alan her numaralandırma değeri artık Tanımlarına bağlı olarak dize veya int türünü içeren Metadata.