OpenHarmony南向驱动开发实战-Input

简介

该仓下主要包含Input模块HDI(Hardware Driver Interface)接口定义及其实现,对上层输入服务提供操作input设备的驱动能力接口,HDI接口主要包括如下三大类:

  • InputManager:管理输入设备,包括输入设备的打开、关闭、设备列表信息获取等;
  • InputReporter:负责输入事件的上报,包括注册、注销数据上报回调函数等;
  • InputController:提供input设备的业务控制接口,包括获取器件信息及设备类型、设置电源状态等。

图 1 INPUT模块HDI接口层框架图

目录

该仓下源代码目录结构如下所示

/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);

打开input设备

int32_t (*CloseInputDevice)(uint32_t devIndex);

关闭input设备

int32_t (*GetInputDevice)(uint32_t devIndex, DeviceInfo **devInfo);

获取指定ID的设备信息

int32_t (*GetInputDeviceList)(uint32_t *devNum, DeviceInfo **devList, uint32_t size);

获取所有设备列表信息

input_reporter.h

int32_t (*RegisterReportCallback)(uint32_t devIndex, InputReportEventCb *callback);

注册input设备的回调

int32_t (*UnregisterReportCallback)(uint32_t devIndex);

注销input设备的回调

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 1IInputInterface *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;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/36960.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据库系统概论(超详解!!!) 第十四节 数据库恢复技术

1.事务的基本概念 1.事务 事务(Transaction)是用户定义的一个数据库操作序列&#xff0c;这些操作要么全做&#xff0c;要么全不做&#xff0c;是一个不可分割的工作单位。 事务和程序是两个概念&#xff0c; 在关系数据库中&#xff0c;一个事务可以是一条SQL语句&#xff…

rockey linux rpm安装mysql 8.4.0

背景介绍&#xff1a; 系统 rockey linux 9.4 mysql 8.4.0 我一开始想在系统上安装5.7的着&#xff0c;因为我有这个包&#xff0c;但是通过rpm安装的时候&#xff0c;到最后一步提示我没有/usbin/chkconfig 这个目录&#xff0c;怀疑是系统的问题&#xff0c;然后想安装chk…

未来先行!MWC 2024 世界移动通信大会盛大开幕!!!

2024MWC上海世界移动通信大会&#xff0c;在上海新国际博览中心&#xff08;SNIEC&#xff09;盛大开幕。 今年&#xff0c;MWC的主办方GSMA&#xff08;全球移动通信系统协会&#xff09;为这届MWC定下了一个主题——“Future First&#xff08;未来先行&#xff09;”。各大…

内网穿透技术

内网穿透&#xff08;NAT traversal&#xff09;是一种技术&#xff0c;用于实现公网与内网之间的通信连接。当内网中的设备无法直接从公网访问时&#xff0c;内网穿透技术可以通过一些手段&#xff0c;让公网上的设备能够穿透到内网中的设备&#xff0c;建立起通信连接。 说白…

盘点7款适合团队使用的知识库工具

作为一名技术爱好者和企业管理者&#xff0c;我深知知识库工具在日常工作中的重要性。 无论是个人笔记管理还是企业知识共享&#xff0c;知识库工具都能极大地提升我们的工作效率和信息管理水平。 根据麦肯锡全球研究院报告显示&#xff0c;使用知识库工具可以帮助个人或者企…

windows11 OneDrive禁止开机自启动。

1、先上个图&#xff1a; 开机默认自启&#xff0c;然后设置中&#xff0c;也没有找到可以设置的。 2、然后我们通过任务管理器来处理&#xff0c;右键任务栏&#xff1a; 打开任务管理器&#xff1a; 选中OneDrive&#xff0c;然后点击【禁 用】按钮即可。 或者鼠标右键&…

【C++:list】

list概念 list是一个带头的双向循环链表&#xff0c;双向循环链表的特色&#xff1a;每一个节点拥有两 个指针进行维护&#xff0c;俩指针分别为prev和next,prev指该节点的前一个节点&#xff0c;next为该节点的后一个节点 list的底层实现中为什么对迭代器单独写一个结构体进行…

视频均衡驱动器,SDI产品PIN LMH0387

视频均衡驱动器,功能仿制 TI公司 LMH0387产品。本期间支持 DVB-ASI,作为驱动器能够选择输出速率,作为均衡接收器能支持100m 以上传输距离(线缆类型 Belden1694A)。 工作温度范围:-40℃~85℃:a) 电源电压:3.14V~3.46V: 驱动器输出信号:单端 CML 信号: 均衡器输出信号:LVDS 电平…

【C++/STL】:优先级队列的使用及底层剖析仿函数

目录 &#x1f4a1;前言一&#xff0c;优先级队列的使用二&#xff0c;仿函数1&#xff0c;什么是仿函数2&#xff0c;仿函数的简单示例 三&#xff0c;优先级队列的底层剖析 &#x1f4a1;前言 优先队列(priority_queue)是一种容器适配器&#xff0c;默认使用vector作为其底层…

Pbootcms留言“提交成功”的提示语怎么修改

我们在用到pbootcms建站时候&#xff0c;其中有个留言功能&#xff0c;提交成功后会提示&#xff1a;提交成功&#xff08;如下图所示&#xff09;&#xff0c;那么我们要修改这个提示语要怎么操作呢&#xff1f; 如果需要修改的话&#xff0c;直接找到文件/apps/home/control…

【Android】【Compose】Compose里面的Row和Column的简单使用

内容 Row和Column的简单使用方式和常用属性含义 Row 在 Jetpack Compose 中&#xff0c;Row 是一种用于在水平方向排列子元素的布局组件。它类似于传统 Android 中的 LinearLayout&#xff0c;但更加灵活和强大。 Row的代码 Composable inline fun Row(modifier: Modifier…

最新扣子(Coze)实战案例:图像流工具之空间风格化,完全免费教程

&#x1f9d9;‍♂️ 大家好&#xff0c;我是斜杠君&#xff0c;手把手教你搭建扣子AI应用。 &#x1f4dc; 本教程是《AI应用开发系列教程之扣子(Coze)实战教程》&#xff0c;完全免费学习。 &#x1f440; 关注斜杠君&#xff0c;可获取完整版教程。&#x1f44d;&#x1f3f…

Python的Django部署uwsgi后自签名实现的HTTPS

通过SSL/TLS来加密和客户端的通信内容。提高网络安全性&#xff0c;但是会损耗部分的服务器资源。 HTTPS 的原理图。 web.key 是打死也不能给其他人的。一定要保存好。里面主要是私钥。是各种认证的根基。本地测试的话生成1024的即可&#xff0c;如果是生产环境推荐使用2048。…

高级运维工程师讲述银河麒麟V10SP1服务器加固收回权限/tmp命令引起生产mysql数据库事故实战

高级运维工程师讲述银河麒麟V10SP1服务器加固收回权限/tmp命令引起生产MySql数据库事故实战 一、前言 作为运维工程师经常会对生产服务器进行安全漏洞加固&#xff0c;一般服务厂商、或者甲方信息安全中心提供一些安全的shell脚本&#xff0c;一般这种shell脚本都是收回权限&…

查看当前服务器Kafka是否已启动

# 查看当前系统中的java进程 # -ml 详细内容 jps -ml | grep Kafka

《人人都是产品经理》:项目坎坷的一生(下)

《人人都是产品经理》&#xff1a;项目坎坷的一生&#xff08;下&#xff09; 文档只是手段模板的作用多人协作与版本管理 流程只不过是手段这么多评审&#xff0c;可以省嘛&#xff1f; 敏捷更是手段有计划、更拥抱变化迭代周期内尽量不增加任务 集中工作、小步快跑持续细化需…

开放式耳机哪个牌子好?2024热门红榜开放式耳机测评真实篇!

当你跟朋友们聊天时&#xff0c;他们经常抱怨说长时间戴耳机会令耳朵感到不适,后台也有很多人来滴滴我&#xff0c;作为一位致力于开放式耳机的测评博主&#xff0c;在对比了多款开放式耳机之后&#xff0c;你开放式耳机在保护听力方面确实有用。开放式的设计有助于减轻耳道内的…

【EXCEL技巧】Excel如何将数字前面的0去掉

Excel文件中经常会遇到数据是0001345这种&#xff0c;那么&#xff0c;如何将数字前面的0去掉呢&#xff1f;今天和大家分享方法。 首先&#xff0c;选中一列空的单元格&#xff0c;然后在单元格中输入公式TEXT(D3,0)&#xff0c;这里的D3指的是前面带有0的数据的位置 回车之后…

DAMA学习笔记(三)-数据架构

1.引言 架构是构建一个系统&#xff08;如可居住型建筑&#xff09;的艺术和科学&#xff0c;以及在此过程中形成的成果——系统本身。用通俗的话说&#xff0c;架构是对组件要素有组织的设计&#xff0c;旨在优化整个结构或系统的功能、性能、可行性、成本和用户体验。 对于架…

如何在SOLIDWORKS中高效管理文件属性?

当我们完成零件设计&#xff0c;出工程图后&#xff0c;发现零件中部分属性值需修改&#xff0c;或漏掉一些属性值需要添加&#xff0c;也可能老旧的设计图纸需要统一规范。 这时我们用SOLIDWORKS自带的属性标签工具就可以快速完成文件的属性编辑。 1打开工程图纸&#xff0c;…