1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/openharmony-drivers_peripheral

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
README.md 7.4 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 26.11.2024 07:36 80e6969

Введение

Этот репозиторий в основном определяет и реализует следующие типы аппаратных интерфейсов драйверов (HDI) входного модуля, позволяя сервисам верхнего уровня выполнять операции с устройствами ввода:

  • Input Manager: управляет устройствами ввода, включая включение и отключение устройств ввода и получение списка устройств.
  • Input Reporter: сообщает о событиях ввода, включая регистрацию и отмену регистрации обратных вызовов для передачи данных.
  • Input Controller: контролирует устройства ввода, включая получение информации об устройстве и типе устройства, а также установку статуса питания.

Рисунок 1. Архитектура HDI входного модуля.

Структура каталогов

Структура каталога исходного кода выглядит следующим образом:

/drivers/peripheral/input
├── hal                # HAL код
│   └── include       # Заголовочные файлы HAL
│   └── src           # Реализация кода HAL
├── interfaces         # Код драйвера, предоставляющий API-интерфейсы для служб верхнего уровня
│   └── include       # Экспонированные извне API
├── test               # Тестовый код
│   └── unittest      # Код модульного теста

Доступные API

Драйвер ввода предоставляет сервисы ввода с помощью 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 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/openharmony-drivers_peripheral.git
git@api.gitlife.ru:oschina-mirror/openharmony-drivers_peripheral.git
oschina-mirror
openharmony-drivers_peripheral
openharmony-drivers_peripheral
master