Vous pouvez convertir des modules HAL préexistants en modules HIDL HAL en convertissant le
en-tête dans hardware/libhardware/include/hardware
.
Utiliser c2hal
La
c2hal
gère la majeure partie du travail de conversion, ce qui réduit le nombre d'opérations
des modifications. Par exemple, pour générer un fichier .hal
HIDL pour le protocole NFC,
HAL:
make c2hal
c2hal -r android.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport -p android.hardware.nfc@1.0 hardware/libhardware/include/hardware/nfc.h
Ces commandes ajoutent des fichiers dans hardware/interfaces/nfc/1.0/
. En cours d'exécution
hardware/interfaces/update-makefiles.sh
dans $ANDROID_BUILD_TOP
ajoute également le fichier makefile requis au HAL. Vous pouvez alors
effectuer des modifications manuelles
pour convertir complètement le HAL.
Activités c2hal
Lorsque vous exécutez c2hal
, tout le contenu du fichier d'en-tête est transféré.
à .hal
fichiers.
c2hal
identifie les structs contenant des pointeurs de fonction dans
fichier d'en-tête fourni et convertit chaque struct en un fichier d'interface distinct.
Par exemple, alloc_device_t
est converti au format
Module HAL IAllocDevice
(dans le fichier
IAllocDevice.hal
).
Tous les autres types de données sont copiés dans un fichier types.hal
.
Les définitions en livre sont déplacées dans des énumérations, et les éléments qui ne font pas ou non partie de HIDL
les éléments convertibles (comme les déclarations de fonction statique) sont copiés dans les commentaires.
comportant le texte "NOTE
".
Activités manuelles
L'outil c2hal
ne sait pas quoi faire lorsqu'il rencontre
certaines constructions. Par exemple, HIDL n'a pas de concept de pointeur bruts. pour la raison suivante :
Ainsi, lorsque c2hal
rencontre un pointeur dans les fichiers d'en-tête, il ne
savoir si le pointeur doit être interprété comme un tableau ou comme une référence
un autre objet. Les pointeurs Void sont également opaques.
Un champ tel que int reserved[7]
doit être supprimé manuellement
la transition vers HIDL. Des éléments tels que le nom de la valeur renvoyée doivent être
mis à jour vers quelque
chose de plus significatif ; par exemple, convertir le retour
de méthodes telles que write
dans NFC à partir du flux généré automatiquement
int32_t write_ret
à Status status
(où
Status
est une nouvelle énumération contenant les états NFC possibles).
Implémenter le HAL
Après avoir créé des fichiers .hal
pour représenter votre HAL, vous
générer les fichiers makefile (Make ou Soong) qui créent la prise en charge de la langue
C++ et Java (sauf si le HAL utilise une fonctionnalité non compatible avec Java). La
Le script ./hardware/interfaces/update-makefiles.sh
peut automatiquement
générer des fichiers makefile pour les HAL situés dans le hardware/interfaces
(pour les HAL situés dans d'autres emplacements, il vous suffit de mettre à jour le script).
Lorsque les fichiers makefile sont à jour, vous êtes prêt à générer des fichiers d'en-tête et mettre en œuvre des méthodes. Pour savoir comment implémenter l'interface générée, consultez HIDL C++ (pour C++ implémentations) ou HIDL Java (pour les implémentations Java).