Преобразование модулей HAL

Вы можете обновить существующие модули 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 преобразуется в модуль HAL IAllocDevice (в файле IAllocDevice.hal ).

Все остальные типы данных копируются в файл types.hal . Определения со знаком "решётка" переносятся в перечисления, а элементы, не являющиеся частью HIDL или не подлежащие преобразованию (например, объявления статических функций), копируются в комментарии, помеченные текстом " NOTE ".

Ручная деятельность

Инструмент c2hal не знает, что делать при обнаружении определённых конструкций. Например, в HIDL нет концепции «сырых» указателей; поэтому, когда c2hal встречает указатель в заголовочных файлах, он не знает, следует ли интерпретировать его как массив или как ссылку на другой объект. Указатели типа «пустой» также непрозрачны.

При переходе на HIDL необходимо вручную удалить поле, например, int reserved[7] . Такие элементы, как имя возвращаемого значения, следует обновить, сделав их более осмысленными. Например, можно преобразовать возвращаемый параметр методов, таких как 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 может автоматически генерировать make-файлы для HAL, расположенных в каталоге hardware/interfaces (для HAL в других местах просто обновите скрипт).

После обновления make-файлов вы готовы к генерации заголовочных файлов и реализации методов. Подробнее о реализации сгенерированного интерфейса см. в разделах HIDL C++ (для реализаций на C++) и HIDL Java (для реализаций на Java).