简介
该仓下主要包含Input模块HDI(Hardware Driver Interface)接口定义及其实现,对上层输入服务提供操作input设备的驱动能力接口,HDI接口主要包括如下三大类:
- InputManager:管理输入设备,包括输入设备的打开、关闭、设备列表信息获取等;
- InputReporter:负责输入事件的上报,包括注册、注销数据上报回调函数等;
- InputController:提供input设备的业务控制接口,包括获取器件信息及设备类型、设置电源状态等。
目录
该仓下源代码目录结构如下所示
/drivers/peripheral/input
├── hal # input模块的hal层代码
│ └── include # input模块hal层内部的头文件
│ └── src # input模块hal层代码的具体实现
├── interfaces # input模块对上层服务提供的驱动能力接口
│ └── include # input模块对外提供的接口定义
├── test # input模块的测试代码
│ └── unittest # input模块的单元测试代码
接口说明
Input驱动提供给系统服务Input Service可直接调用的驱动能力接口,按照属性分类三类:input设备管理模块、input数据上报模块、input业务控制模块,例如提供输入设备打开及关闭接口、注册设备监听的回调接口、设备信息查询接口、电源状态控制接口等。
提供的部分接口说明如表1 Input HDI接口列表所示:
表 1 Input HDI接口列表
头文件 | 功能描述 | |
---|---|---|
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); | ||
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); | |
int32_t (*GetPowerStatus)(uint32_t devIndex, uint32_t *status); | ||
int32_t (*GetDeviceType)(uint32_t devIndex, uint32_t *deviceType); | ||
int32_t (*GetChipInfo)(uint32_t devIndex, char *chipInfo, uint32_t length); | ||
int32_t (*GetVendorName)(uint32_t devIndex, char *vendorName, uint32_t length); | ||
int32_t (*GetChipName)(uint32_t devIndex, char *chipName, uint32_t length); | ||
int32_t (*SetGestureMode)(uint32_t devIndex, uint32_t gestureMode); | ||
int32_t (*RunCapacitanceTest)(uint32_t devIndex, uint32_t testType, char *result, uint32_t length); | ||
int32_t (*RunExtraCommand)(uint32_t devIndex, InputExtraCmd *cmd); |
使用说明
该仓核心功能是提供Input驱动能力接口供上层输入系统服务调用,提供的驱动能力接口统一归属为HDI接口层。
通过如下简要示例代码说明Input HDI接口的使用:
#include "input_manager.h"
#define DEV_INDEX 1
IInputInterface *g_inputInterface;
InputReportEventCb g_callback;
/* 定义数据上报的回调函数 */
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;
/* 获取Input驱动能力接口 */
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);
/* 打开特定的input设备 */
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);
/* 获取对应input设备的类型 */
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);
/* 给特定的input设备注册数据上报回调函数 */
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);
/* 注销特定input设备上的回调函数 */
ret = g_inputInterface->iInputReporter->UnregisterReportCallback(DEV_INDEX);
if (ret) {
HDF_LOGE("%s: unregister callback failed, ret: %d", __FUNCTION__, ret);
return ret;
}
/* 关闭特定的input设备 */
ret = g_inputInterface->iInputManager->CloseInputDevice(DEV_INDEX);
if (ret) {
HDF_LOGE("%s: close device failed, ret: %d", __FUNCTION__, ret);
return ret;
}
return 0;
}