zoukankan      html  css  js  c++  java
  • android触控反馈的实现

    android触控反馈的实现

    芯片:RK2808

    1框架结构

    Android触控反馈的实现与背光的实现方法相似,分为触控驱动、硬件抽象层、框架层及API接口,应用层系统调用。其结构如下图所示:

     

    由于framework层对硬件驱动进行了封装,应用程序以API调用的方式对硬件进行控制,应用程序只需 import android.os.Vibrator即可调用frameworkf封装的API函数实现触控反馈的功能。

    API函数如下:

    1 public  void vibrate(long milliseconds)

    2 public  void vibrate(long[] pattern, int repeat)

    3 public  void cancel()

    函数1带有一个参数milliseconds,该参数控制触控触发的时间,但是是毫秒,一般设为1000;

    函数2带有2个参数,它能多次驱动马达,参数pattern以数组的方式传入每次触发时间,repeat为触发的次数,repeat=-1时,其功能与函数1相似,只驱动马达一次,当repeat不为-1时,应该满足pattern.length > repeat ;

    函数3 取消操作。

    应用程调用方式,在onClick事件触发时,在需要添加触控的相应的控件上添加:vibrate()函数即可。

    importandroid.os.Vibrator;

    private VibratormVibrator;

    privatesynchronized void vibrate() {        

            if (mVibrator == null) {

                mVibrator = new Vibrator();

            }

            mVibrator.vibrate(1000);

        }

     Framework层主要是2个文件,向上提供API调用的vibrator.java文件,以及提供服务HardwareService.java文件。

    vibrator.java位于:frameworks\base\core\java\android\os中

    HardwareService.java :frameworks\base\services\java\com\android\server中

    vibrator.java文件通过Binder 实现跨进程和跨语言的通信;ServiceMangager完成服务的注册和获取等操作,SweviceManger实际上是android的API接口,提供系统服务,在这里是完成HardwareService注册和提供该服务。 HardwareService.java 封装了触控反馈、背光等硬件操作,实现触控反馈的函数如下:

    public void vibrate(long milliseconds, IBinder token)

           publicvoid vibratePattern(long[] pattern, int repeat, IBinder token)

    public void cancelVibrate(IBinder token)    

           本地框架主要包括两个文件:vibrator.c 实现kenerl与用户态的通信;com_android_server_HardwareService对vibrator.c的函数进行封装,提供给HardwareService.java调用。

    com_android_server_HardwareService.cpp位于:frameworks\base\services\jni中

    vibrator.c 位于:hardware\libhardware_legacy\vibrator

    native static void vibratorOn(long milliseconds);

    native staticvoid vibratorOff();

    这两个函数位于com_android_server_HardwareService.cpp中,封装vibrator.c中vibrator_on(int timeout_ms)和vibrator_off()函数,提供给HardwareService.java调用。

        linux 驱动层实现触控驱动,主要文件为timed_gpio.c。采用中断方式对IO进行拉高拉低操作,实现马达驱动。由于rk2808中马达接在扩展I2C上,需要修改控制的IO口,背光sleep时会触发timed_gpio,在timed_gpio中过滤该事件。

    在linux中主要修改的文件有:

    board-rk28 :位于arch\arm\mach-rockchip  添加timed_gpio设备

    rk28_devices :位于arch\arm\mach-rockchip  添加timed_gpio设备

    timed_gpio :位于drivers\android          修改控制IO、BUG

    Kconfig    :位于drivers\android          删除timed_gpio 依赖项

    Makefile   :位于drivers\android          添加timed_gpio 模块

    2 测试代码:

           在android中提供实现触控反馈的测试代码vibratorTest.java,在TwelvekeyDialer.java中添加有触控控制代码,能够很好的实现触控反馈功能。

  • 相关阅读:
    JAVA环境安装配置
    使用apache设置绑定多个域名或网站
    C#资源释放及Dispose、Close和析构方法
    【数据库】百万级数据库SQL优化大总结
    【ABP】Abp的AspNetZero5.0版本无法使用ctrl+f5调式
    【.Net】vs2017 自带发布工具 ClickOnce发布包遇到的问题
    【Python】python 反射机制在实际的应用场景讲解
    【.Net】从字符串数组中寻找数字的元素
    【.Net】输出的字符靠右对齐
    【.Net+数据库】sqlserver的四种分页方式
  • 原文地址:https://www.cnblogs.com/rockchip/p/1732716.html
Copyright © 2011-2022 走看看