Введение
Этот репозиторий в основном определяет и реализует следующие типы аппаратных интерфейсов драйверов (HDI) входного модуля, позволяя сервисам верхнего уровня выполнять операции с устройствами ввода:
Рисунок 1. Архитектура HDI входного модуля.
Структура каталогов
Структура каталога исходного кода выглядит следующим образом:
/drivers/peripheral/input
├── hal # HAL код
│ └── include # Заголовочные файлы HAL
│ └── src # Реализация кода HAL
├── interfaces # Код драйвера, предоставляющий API-интерфейсы для служб верхнего уровня
│ └── include # Экспонированные извне API
├── test # Тестовый код
│ └── unittest # Код модульного теста
Драйвер ввода предоставляет сервисы ввода с помощью API-интерфейсов возможностей драйвера, которые можно вызывать напрямую. Эти API включают модуль Input Manager, модуль Input Reporter и модуль Input Controller. Например, вы можете вызвать API для включения или отключения устройства ввода, регистрации прослушивателя обратного вызова, запроса информации об устройстве и управления статусом питания. Таблица 1 описывает основные API HDI, предоставляемые входным модулем.
Таблица 1. Основные API HDI входного модуля
Заголовок файла | API | Описание |
---|---|---|
input_manager.h | int32_t (*OpenInputDevice)(uint32_t devIndex); | Открывает файл указанного устройства ввода. |
int32_t (*CloseInputDevice)(uint32_t devIndex); | Закрывает устройство ввода. |
int32_t (*GetInputDevice)(uint32_t devIndex, DeviceInfo **devInfo); Получает информацию об устройстве ввода с указанным индексом.
int32_t (*GetInputDeviceList)(uint32_t *devNum, DeviceInfo **devList, uint32_t size); Получает список всех устройств ввода.
input_reporter.h
int32_t (*RegisterReportCallback)(uint32_t devIndex, InputReportEventCb *callback); Регистрирует функцию обратного вызова для получения данных от указанного устройства ввода.
int32_t (*UnregisterReportCallback)(uint32_t devIndex); Отменяет регистрацию функции обратного вызова для указанного устройства ввода.
void (*ReportEventPkgCallback)(const EventPackage **pkgs, uint32_t count); Отправляет данные о событии ввода через зарегистрированную функцию обратного вызова.
input_controller.h
int32_t (*SetPowerStatus)(uint32_t devIndex, uint32_t status); Устанавливает состояние питания для устройства ввода с указанным индексом в указанное состояние. Репозиторий предназначен для предоставления HDI (High-level Driver Interface) для сервисов системы ввода верхнего уровня с целью реализации возможностей драйвера ввода.
Следующий пример кода показывает, как использовать HDI ввода:
#include "input_manager.h"
#define DEV_INDEX 1
IInputInterface *g_inputInterface;
InputReportEventCb g_callback;
/* Define the callback for data reporting. */
static void ReportEventPkgCallback(const EventPackage **pkgs, uint32_t count)
{
if (pkgs == NULL || count > MAX_PKG_NUM) {
return;
}
for (uint32_t i = 0; i < count; i++) {
HDF_LOGI("%s: pkgs[%d] = 0x%x, 0x%x, %d", __func__, i, pkgs[i]->type, pkgs[i]->code, pkgs[i]->value);
}
}
int InputServiceSample(void)
{
uint32_t devType = INIT_DEFAULT_VALUE;
/* Get interfaces of input driver capabilities. */
int ret = GetInputInterface(&g_inputInterface);
if (ret != INPUT_SUCCESS) {
HDF_LOGE("%s: get input interfaces failed, ret = %d", __func__, ret);
return ret;
}
INPUT_CHECK_NULL_POINTER(g_inputInterface, INPUT_NULL_PTR);
INPUT_CHECK_NULL_POINTER(g_inputInterface->iInputManager, INPUT_NULL_PTR);
/* Open a specified input device file. */
ret = g_inputInterface->iInputManager->OpenInputDevice(DEV_INDEX);
if (ret) {
HDF_LOGE("%s: open input device failed, ret = %d", __func__, ret);
return ret;
}
INPUT_CHECK_NULL_POINTER(g_inputInterface->iInputController, INPUT_NULL_PTR);
/* Get the type of the input device. */
ret = g_inputInterface->iInputController->GetDeviceType(DEV_INDEX, &devType);
if (ret) {
HDF_LOGE("%s: get device type failed, ret: %d", __FUNCTION__, ret);
return ret;
}
HDF_LOGI("%s: device1's type is %u\n", __FUNCTION__, devType);
/* Register the data reporting callback for a specified input device. */
g_callback.ReportEventPkgCallback = ReportEventPkgCallback;
INPUT_CHECK_NULL_POINTER(g_inputInterface->iInputReporter, INPUT_NULL_PTR);
ret = g_inputInterface->iInputReporter->RegisterReportCallback(DEV_INDEX, &g_callback);
if (ret) {
HDF_LOGE("%s: register callback failed, ret: %d", __FUNCTION__, ret);
return ret;
}
HDF_LOGI("%s: wait 10s for testing, pls touch the panel now", __FUNCTION__);
OsalMSleep(KEEP_ALIVE_TIME_MS);
/* Unregister the callback of the specified input device. */
ret = g_inputInterface->iInputReporter->UnregisterReportCallback(DEV_INDEX);
if (ret) {
HDF_LOGE("%s: unregister callback failed, ret: %d", __FUNCTION__, ret);
return ret;
}
/* Close a specified input device file. */
ret = g_inputInterface->iInputManager->CloseInputDevice(DEV_INDEX);
if (ret) {
HDF_LOGE("%s: close device failed, ret: %d", __FUNCTION__, ret);
return ret;
}
return 0;
}
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )