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 2.0 | openSession(ITunerCallback callback) génère
(Result result, ITunerSession session) |
|
AIDL | void setTunerCallback(in ITunerCallback callback) |
|
Description:
|
||
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) oustatus
(dans AIDL) immédiatement. SiResult
oustatus
estOK
, le rappel du tunertuneFailed
oucurrentProgramInfoChanged
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 chaquechunk
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 dansIBroadcastRadio
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
etDeemphasis
sont supprimées dans AIDL et définies comme const int. dans le pays suivant :AmFmRegionConfig
. Par conséquent,fmDeemphasis
etfmRds
dansProgramInfo
sont déclarées en tant qu'int, un résultat de calcul de bits de les options correspondantes. Pendant ce temps,D50
etD75
sont renommésDEEMPHASIS_D50
etDEEMPHASIS_D75
, respectivement. - Les énumérations
ProgramInfoFlags
sont supprimées dans AIDL et définies comme const int dansProgramInfo
avec le préfixeFLAG_
ajouté. Par conséquent,infoFlags
dansProgramInfo
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é enseekSpacing
, carscan
est renomméseek
dans AIDL. - Comme le concept d'union est introduit dans AIDL,
MetadataKey
et LesMetadata
définis dans HIDL HAL ne sont plus utilisés. Une union AIDLMetadata
est défini dans AIDL HAL. Chaque valeur d'énumération qui existait auparavant dansMetadataKey
est désormais un champ dansMetadata
par le type de chaîne ou d'int, en fonction de leur définition.