Вы можете обновить существующие модули HAL до модулей HIDL HAL, преобразовав заголовок в hardware/libhardware/include/hardware
.
Используйте c2hal
Инструмент c2hal
выполняет большую часть работы по преобразованию, сокращая количество необходимых изменений вручную. Например, чтобы создать файл HIDL .hal
для 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
Эти команды добавляют файлы в hardware/interfaces/nfc/1.0/
. Запуск hardware/interfaces/update-makefiles.sh
из каталога $ANDROID_BUILD_TOP
также добавляет необходимый make-файл в HAL. Отсюда вы можете внести изменения вручную, чтобы полностью преобразовать HAL.
деятельность c2hal
Когда вы запускаете c2hal
, все, что находится в заголовочном файле, переносится в файлы .hal
.
c2hal
идентифицирует структуры, содержащие указатели функций, в предоставленном заголовочном файле и преобразует каждую структуру в отдельный файл интерфейса. Например, alloc_device_t
преобразуется в модуль IAllocDevice
HAL (в файле IAllocDevice.hal
).
Все остальные типы данных копируются в файл types.hal
. Определения фунта перемещаются в перечисления, а элементы, не являющиеся частью HIDL или не конвертируемые (например, объявления статических функций), копируются в комментарии, помеченные текстом « NOTE
».
Ручные действия
Инструмент c2hal
не знает, что делать, когда сталкивается с определенными конструкциями. Например, в HIDL нет концепции необработанных указателей; из-за этого, когда c2hal
встречает указатель в файлах заголовков, он не знает, следует ли интерпретировать указатель как массив или как ссылку на другой объект. Пустые указатели также непрозрачны.
Поле типа int reserved[7]
необходимо удалить вручную при переходе на HIDL. Такие элементы, как имя возвращаемого значения, следует обновить до чего-то более значимого; например, преобразование возвращаемого параметра таких методов, как write
в NFC, из автоматически сгенерированного int32_t write_ret
в Status status
(где Status
— это новое перечисление, содержащее возможные статусы NFC).
Внедрить HAL
После того как вы создали файлы .hal
для представления вашего HAL, вы должны сгенерировать make-файлы (Make или Soong), которые создают языковую поддержку в C++ и Java (если только HAL не использует функцию, не поддерживаемую в Java). Скрипт ./hardware/interfaces/update-makefiles.sh
может автоматически генерировать файлы makefile для HAL, расположенных в каталоге hardware/interfaces
(для HAL в других местах просто обновите скрипт).
Когда файлы make-файлов обновлены, вы готовы создавать файлы заголовков и реализовывать методы. Подробные сведения о реализации сгенерированного интерфейса см. в разделе HIDL C++ (для реализаций C++) или HIDL Java (для реализаций Java).