Harmony鸿蒙南向外设驱动开发-Touchscreen

功能简介

Touchscreen驱动用于驱动触摸屏使其正常工作,该驱动主要完成如下工作:对触摸屏驱动IC进行上电、配置硬件管脚并初始化其状态、注册中断、配置通信接口(I2C或SPI)、设定Input相关配置、下载及更新固件等操作。

在HDF(Hardware Driver Foundation)驱动管理框架的基础上,Input驱动模型通过调用OSAL接口层和Platform接口层提供的基础接口进行开发,涉及的接口包括bus通信接口、操作系统原生接口(memory、lock、thread、timer等)。由于OSAL接口和Platform接口屏蔽了芯片平台的差异,所以基于Input驱动模型实现的Touchscreen驱动可以进行跨平台、跨OS迁移,从而实现驱动的一次开发、多端部署。

运作机制

Input模型整体的框架如图1所示。Input驱动模型基于HDF驱动框架、Platform接口、OSAL接口进行开发,向上对接规范化的驱动接口HDI(Hardware Device Interface)层,通过Input-HDI层对外提供硬件能力,即上层Input Service可以通过HDI接口层获取相应的驱动能力,进而操控Touchscreen等输入设备。

图1 基于HDF驱动框架的Input驱动模型

image

Input驱动模型核心部分由设备管理层、公共驱动层、器件驱动层组成。器件产生的数据借助平台数据通道能力从内核传递到用户态,驱动模型通过配置文件适配不同器件及硬件平台,提高开发者对器件驱动的开发效率。如下为模型各部分的说明:

  • Input设备管理:为各类输入设备驱动提供Input设备的注册、注销接口,同时对Input设备列表进行统一管理。
  • Input平台驱动:指各类Input设备的公共抽象驱动(例如触摸屏的公共驱动),该部分主要负责对板级硬件进行初始化、硬件中断处理、向manager注册Input设备等。
  • Input器件驱动:指各器件厂家的差异化驱动,开发者可以通过适配平台驱动预留的差异化接口进行器件驱动开发,实现器件驱动开发量最小化。
  • Input数据通道:提供一套通用的数据上报通道,各类别的Input设备驱动均可用此通道上报Input事件。
  • Input配置解析:负责对Input设备的板级配置及器件私有配置进行解析及管理。

开发指导

场景介绍

Input模块主要完成如下工作:对触摸屏驱动IC进行上电、配置硬件管脚并初始化其状态、注册中断、配置通信接口(I2C或SPI)、设定Input相关配置、下载及更新固件等操作。

接口说明

硬件接口

Touchscreen器件的硬件接口相对简单,根据PIN脚的属性,可以简单分为如下三类:

  • 电源接口

  • IO控制接口

  • 通信接口

图2 Touchscreen器件常用管脚

image

对于上图所示的三类接口,简要说明如下:

  1. 电源接口

    • LDO_1P8:1.8V数字电路

    • LDO_3P3:3.3V模拟电路

      通常情况下,Touchscreen驱动IC和LCD驱动IC是相互分离的,这种情况下,Touchscreen驱动IC一般同时需要1.8V和3.3V两路供电。随着芯片的演进,业内已有将Touchscreen驱动IC和LCD驱动IC集成在一颗IC中的案例,对Touchscreen而言,只需要关注1.8V供电即可,其内部需要的3.3V电源,会在驱动IC内部从LCD的VSP电源(典型值5.5V)中分出来。

  2. IO控制接口

    • Reset:reset管脚,用于在系统休眠、唤醒时,由主机侧对驱动IC进行复位操作。
    • INT:中断管脚,需要在驱动初始化时,配置为输入上拉状态。在驱动IC检测到外部触摸信号后,通过操作中断管脚来触发中断,器件驱动则会在中断处理函数中进行报点数据读取等操作。
  3. 通信接口

    • I2C:由于Touchscreen的报点数据量相对较少,所以一般选用I2C方式传输数据。I2C的具体协议及对应操作接口,可以参考Platform接口层中的I2C使用指南
    • SPI:在需要传递的数据不止包含报点坐标,还包含基础容值的情况下,由于需要传递的数据量较大,所以部分厂商会选用SPI通信方式。SPI的具体协议及对应操作接口,可以参考Platform接口层中的SPI使用指南
软件接口

Input HDF驱动提供给系统服务Input Service调用的HDI驱动能力接口,按照业务范围可以分为三大模块:Input设备管理模块、Input数据上报模块、Input业务控制模块,具体的接口如下表所示,包括:输入设备打开及关闭接口、注册设备监听的回调接口、设备信息查询接口、电源状态控制接口等。

  • 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 *vendorNa
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值