Radiodiffusion HAL

Les sections suivantes décrivent comment utiliser la couche d'abstraction matérielle (HAL) pour implémenter la radiodiffusion.

Interface HAL de radiodiffusion

Le HAL Broadcast radio fournit des structures de données et des interfaces au niveau matériel pour implémenter la radio hertzienne, telle que la radio AM/FM et DAB.

Interfaces HIDL 2.0 et AIDL

La couche HAL de la radio broadcast utilise les interfaces décrites dans les sections suivantes.

Écouteur d'annonce

IAnnouncementListener est l'interface de rappel pour l'écouteur d'annonces, qui peuvent être enregistrés sur la radio hertzienne HAL pour recevoir des annonces. L'interface comporte les éléments suivants : méthodes:

Écouteur d'annonce
Description:appelée dès que la liste d'annonces comporte modifié.
HIDL 2.0 oneway onListUpdated(vec<Announcement> announcements)
AIDL oneway void onListUpdated(in Announcement[] announcements)

ICloseHandle

ICloseHandle est la poignée générique de fermeture permettant de supprimer un rappel qui n'a pas besoin d'une interface active.

ICloseHandle
Description:fermez la poignée.
HIDL 2.0 close()
AIDL void close()

Rappel ITunerCallback

ITunerCallback est l'interface de rappel appelée par la fonction HAL de la radio de diffusion pour envoyer des mises à jour au service client HAL.

Rappel ITunerCallback
Description:appelée par le HAL lors d'une opération de réglage (réglage, recherche (dans AIDL) ou analyse (en HIDL) et l'étape réussit) échoue de manière asynchrone.
HIDL 2.0 oneway onCurrentProgramInfoChanged(ProgramInfo info)
AIDL void onCurrentProgramInfoChanged(in ProgramInfo info)
Description:appelée lors du réglage, de la recherche (dans AIDL) ou de la recherche (en HIDL) ou si l'étape réussit.
HIDL 2.0 oneway onTuneFailed(Result result, ProgramSelector selector)
AIDL void onTuneFailed(in Result result, in ProgramSelector selector)
Description:appelée lors du réglage, de la recherche (dans AIDL) ou de la recherche (en HIDL) ou si l'étape réussit.
HIDL 2.0 oneway onCurrentProgramInfoChanged(ProgramInfo info)
AIDL void onCurrentProgramInfoChanged(in ProgramInfo info)
Description:appelée lorsque la liste des programmes est mise à jour. la la taille de chaque fragment doit être limitée à 500 Kio.
HIDL 2.0 oneway onProgramListUpdated(ProgramListChunk chunk)
AIDL oneway onProgramListUpdated(ProgramListChunk chunk)
Description:appelée lorsque l'antenne est connectée ou déconnectés.
HIDL 2.0 oneway onAntennaStateChange(bool connected)
AIDL void onCurrentProgramInfoChanged(in ProgramInfo info)
Description:appelée lorsque le paramètre spécifique au fournisseur est utilisé. les valeurs sont mises à jour en interne dans HAL (n'invoquez pas après avoir appelé setParameters par le client HAL).
HIDL 2.0 oneway onParametersUpdated(vec<VendorKeyValue> parameters)
AIDL void onParametersUpdated(in VendorKeyValue[] parameters)
Description:nouveautés d'AIDL. Appelée lorsque l'option "config" est mis à jour en interne dans le HAL (ne doit pas être appelé après avoir appelé setConfigFlag par le client HAL).
HIDL 2.0 Non applicable.
AIDL void onConfigFlagUpdated(in ConfigFlag flag, in boolean value)

iBroadcastRadio

IBroadcastRadio est l'interface principale de la HAL de radiodiffusion. Dans le HIDL 2.0 HAL, utilisez l'interface ITunerSession avec le tuner pour appeler des opérations. Toutefois, un tuner au maximum est actif à la fois (à condition que chaque instance HAL de la radio broadcast ne dispose que d'un seul tuner) . ITunerSession a été supprimé des interfaces AIDL et ses interfaces ont été déplacées vers IBroadcastRadio

iBroadcastRadio
Description:obtenez la description d'un module et de ses des fonctionnalités.
HIDL 2.0 getProperties() generates (Properties properties)
AIDL Properties getProperties()
Description:récupère les valeurs AM/FM actuelles ou possibles de la région.
HIDL 2.0 getAmFmRegionConfig(bool full) generates (Result result, AmFmRegionConfig config)
AIDL AmFmRegionConfig getAmFmRegionConfig(bool full)
Description:récupère la région DAB actuelle configuration.
HIDL 2.0 getDabRegionConfig() generates (Result result, vec<DabTableEntry> config)
AIDL DabTableEntry[] getDabRegionConfig()
Description:récupère une image à partir du cache du module radio. Dans AIDL, la taille de l'image doit être inférieure à 1 Mo en raison d'une limite stricte sur le tampon de transaction de liaison.
HIDL 2.0 getImage(uint32_t id) generates (vec<uint8_t> image)
AIDL byte[] getImage(in int id)
Description:enregistre l'écouteur d'annonces.
HIDL 2.0 registerAnnouncementListener(vec<AnnouncementType> enabled,IAnnouncementListener listener) generates (Result result, ICloseHandle closeHandle)
AIDL ICloseHandle registerAnnouncementListener(in IAnnouncementListener listener, in AnnouncementType[] enabled)
Description:
  • HIDL HAL: lorsqu'une nouvelle session de tuner est ouverte, l'ancienne session doit être arrêtée.
  • AIDL HAL: aucune session de tuner n'étant disponible, seul le rappel de tuner doit être défini. Le cas échéant, l'ancien rappel ne doit pas être défini.
HIDL 2.0 openSession(ITunerCallback callback) génère (Result result, ITunerSession session)
AIDL void setTunerCallback(in ITunerCallback callback)
Description:
  • HIDL HAL: la fermeture d'une session de tuner ne doit pas échouer et ne doit être émise qu'une seule fois.
  • AIDL HAL: il n'y a pas de tuner, et seul le rappel de tuner doit être désactivé.
HIDL 2.0 close()
AIDL unsetTunerCallback()
Description:s'adapte à un programme spécifié.
HIDL 2.0 tune(ProgramSelector program) generates (Result result)
AIDL void tune(in ProgramSelector program)
Description:recherche le prochain programme valide sur le air. Pour éviter toute confusion dans AIDL, Changement de nom : scan devient seek.
HIDL 2.0 scan(bool directionUp, bool skipSubChannel) generates (Result result)
AIDL void seek(in boolean directionUp, in boolean skipSubChannel)
Description:procédure à suivre pour la chaîne adjacente, qui peut ne pas être être occupé par un programme.
HIDL 2.0 step(bool directionUp) generates (Result result)
AIDL void step(in boolean directionUp)
Description:annule le réglage, la recherche (en HIDL) ou la recherche en attente (dans AIDL) ou des opérations par étapes.
HIDL 2.0 cancel()
AIDL void cancel()
Description:applique un filtre à la liste des programmes et commence à envoyer des mises à jour de la liste des programmes sur onProgramListUpdated.
HIDL 2.0 startProgramListUpdates(ProgramFilter filter) generates (Result result)
AIDL void startProgramListUpdates(in ProgramFilter filter)
Description:arrête d'envoyer des mises à jour de la liste des programmes.
HIDL 2.0 stopProgramListUpdates()
AIDL void stopProgramListUpdates()
Description:récupère le paramètre actuel d'un objet "config".
HIDL 2.0 isConfigFlagSet(ConfigFlag flag) generates (Result result, bool value)
AIDL boolean isConfigFlagSet(in ConfigFlag flag)
Description:définit l'indicateur de configuration donné.
HIDL 2.0 setConfigFlag(ConfigFlag flag, bool value) generates (Result result)
AIDL void setConfigFlag(in ConfigFlag flag, boolean value)
Description:définit les valeurs des paramètres spécifiques au fournisseur.
HIDL 2.0 setParameters(vec<VendorKeyValue> parameters)

génère,

(vec<VendorKeyValue> results)
AIDL VendorKeyValue[] setParameters(in VendorKeyValue[] parameters)
Description:récupère les valeurs des paramètres spécifiques au fournisseur.
HIDL 2.0 getParameters(vec<string> keys) generates (vec<VendorKeyValue> parameters)
AIDL VendorKeyValue[] getParameters(in String[] keys)

Précisions concernant l'interface

Comportement asynchrone

Étant donné que chaque opération de réglage (par exemple, réglage, recherche (en HIDL) ou recherche (dans AIDL) et pas, peut être chronophage et le thread ne doit pas être bloqué pendant longtemps, l'opération doit planifier des opérations chronophages pour qu'elles s'exécutent plus tard et renvoyer rapidement un état ou un résultat. Plus précisément, chaque opération doit:

  • Annulez toutes les opérations de réglage en attente.
  • Vérifiez si l'opération peut être traitée en fonction des entrées de la méthode et de l'état de la un tuner d'applications.
  • Planifiez la tâche de réglage, puis renvoyez le Result (en HIDL) ou status (dans AIDL) immédiatement. Si Result ou status est OK, le rappel du tuner tuneFailed ou currentProgramInfoChanged doit être appelé lorsque le réglage la tâche a échoué (en raison d'un délai d'inactivité, par exemple) ou est terminée.

De même, startProgramListUpdates planifie aussi la tâche chronophage mettre à jour la liste du programme pour qu’elle ait lieu plus tard et pour renvoyer rapidement un état ou un résultat. La méthode annule d'abord les demandes de mise à jour en attente, puis planifie la tâche de mise à jour et renvoie rapidement le résultat.

Condition de concurrence

En raison du comportement asynchrone des opérations de réglage (par exemple, réglage, analyse (en HIDL) ou recherche (dans AIDL) et de l'étape), il existe une condition de concurrence entre l'annulation de l'opération et le réglage opérations. Si cancel est appelé après que le HAL a terminé une opération de réglage et avant le rappel est terminé, l'annulation peut être ignorée, et le rappel doit être terminé et reçu. par le client HAL.

De même, si stopProgramListUpdates est appelé après que le HAL a terminé un programme mise à jour de la liste et avant la fin du rappel onCurrentProgramInfoChanged, stopProgramListUpdates peut être ignoré, et le rappel devrait se terminer.

Taille maximale des données

Puisqu'il existe une limite stricte sur le tampon de transaction de liaison, la limite de données d'une interface qui transmettent des données d'une taille potentiellement importante sont clarifiées dans le HAL AIDL.

  • getImage nécessite que l'image renvoyée soit inférieure à 1 Mo.
  • onProgramListUpdate exige que chaque chunk soit inférieur à 500 Kio. Les listes de programme plus volumineuses doivent être divisées en plusieurs fragments et envoyées via l'implémentation HAL plusieurs rappels.

Modifications apportées aux structures de données HAL d'AIDL

Outre les modifications apportées aux interfaces, ces modifications ont été appliquées aux structures de données défini dans la radiodiffusion AIDL HAL, qui exploite AIDL.

  • L'énumération Constant est supprimée dans AIDL et définie comme const int dans IBroadcastRadio Pendant ce temps, ANTENNA_DISCONNECTED_TIMEOUT_MS est renommé à ANTENNA_STATE_CHANGE_TIMEOUT_MS. La nouvelle valeur "const int" TUNER_TIMEOUT_MS est ajouté. Toutes les opérations de réglage, de recherche et de pas doivent être effectuées dans ce laps de temps.
  • Les énumérations RDS et Deemphasis sont supprimées dans AIDL et définies comme const int. dans le pays suivant : AmFmRegionConfig. Par conséquent, fmDeemphasis et fmRds dans ProgramInfo sont déclarées en tant qu'int, un résultat de calcul de bits de les options correspondantes. Pendant ce temps, D50 et D75 sont renommés DEEMPHASIS_D50 et DEEMPHASIS_D75, respectivement.
  • Les énumérations ProgramInfoFlags sont supprimées dans AIDL et définies comme const int dans ProgramInfo avec le préfixe FLAG_ ajouté. Par conséquent, infoFlags dans ProgramInfo est déclaré en tant qu'int. Il s'agit d'un résultat de calcul de bits. d'indicateurs. TUNED est également renommé FLAG_TUNABLE, pour mieux décrire sa définition sur laquelle la station peut être écoutée.
  • Dans AmFmBandRange, scanSpacing est renommé en seekSpacing, car scan est renommé seek dans AIDL.
  • Comme le concept d'union est introduit dans AIDL, MetadataKey et Les Metadata définis dans HIDL HAL ne sont plus utilisés. Une union AIDL Metadata est défini dans AIDL HAL. Chaque valeur d'énumération qui existait auparavant dans MetadataKey est désormais un champ dans Metadata par le type de chaîne ou d'int, en fonction de leur définition.