平台 MTK6573

Android 振动器系统架构

驱动层

硬件抽象层

JNI框架层

Java应用层

一、驱动层

Android修改、新增Linux内核文件

/kernel/drivers/staging/android/timed_output.h

/kernel/drivers/staging/android/timed_output.c

timed_output.h 定义了timed_output_dev 结构体

struct timed_output_dev {

constchar*name;

/* enable the output and set the timer */

void(*enable)(struct timed_output_dev *sdev,inttimeout);

/* returns the current number of milliseconds remaining on the timer */

int(*get_time)(struct timed_output_dev *sdev);

/* private data */

struct device   *dev;

intindex;

intstate;

};

timed_output.c 实现了该结构体,使用函数timed_output_dev_register实现注册,使用timed_output_dev_unregister实现注销。

inttimed_output_dev_register(struct timed_output_dev *tdev)

{

intret;

if(!tdev || !tdev->name || !tdev->enable || !tdev->get_time)

return-EINVAL;

ret = create_timed_output_class();

if(ret <0)

returnret;

tdev->index = atomic_inc_return(&device_count);

tdev->dev = device_create(timed_output_class, NULL,

MKDEV(0, tdev->index), NULL, tdev->name);

if(IS_ERR(tdev->dev))

returnPTR_ERR(tdev->dev);

ret = device_create_file(tdev->dev, &dev_attr_enable);

if(ret <0)

gotoerr_create_file;

dev_set_drvdata(tdev->dev, tdev);

tdev->state = 0;

return0;

err_create_file:

device_destroy(timed_output_class, MKDEV(0, tdev->index));

printk(KERN_ERR "timed_output: Failed to register driver %s\n",

tdev->name);

returnret;

}

EXPORT_SYMBOL_GPL(timed_output_dev_register);

voidtimed_output_dev_unregister(struct timed_output_dev *tdev)

{

device_remove_file(tdev->dev, &dev_attr_enable);

device_destroy(timed_output_class, MKDEV(0, tdev->index));

dev_set_drvdata(tdev->dev, NULL);

}

EXPORT_SYMBOL_GPL(timed_output_dev_unregister);

驱动实现移植

以MTK 6573平台为例

./mediatek/platform/mt6573/kernel/drivers/vibrator/vibrator.c

操作设备

首先打开手机调试,连接USB,执行adb shell,进入/sys/devices/timed_output/vibrator/

执行 echo "10000" enable 发现手机在震动

# echo"10000"enable

echo "10000"enable

10000enable

执行 cat enable 可以查看当前震动时间剩余数:

# cat enable

cat enable

0

二、硬件抽象层

Android 封装了对底层驱动的调用,成为硬件抽象层。

/hardware/libhardware_legacy/vibrator/vibrator.c

intvibrator_on(inttimeout_ms)

{

/* constant on, up to maximum allowed time */

returnsendit(timeout_ms);

}

intvibrator_off()

{

returnsendit(0);

}

三、 JNI框架层

Android JNI框架层是方便Java调用C/C++方法。

./frameworks/base/services/jni/com_android_server_VibratorService.cpp

namespace android

{

staticvoidvibratorOn(JNIEnv *env, jobject clazz, jlong timeout_ms)

{

// LOGI("vibratorOn\n");

vibrator_on(timeout_ms);

}

staticvoidvibratorOff(JNIEnv *env, jobject clazz)

{

// LOGI("vibratorOff\n");

vibrator_off();

}

staticJNINativeMethod method_table[] = {

{ "vibratorOn","(J)V", (void*)vibratorOn },

{ "vibratorOff","()V", (void*)vibratorOff }

};

intregister_android_server_VibratorService(JNIEnv *env)

{

returnjniRegisterNativeMethods(env,"com/android/server/VibratorService",

method_table, NELEM(method_table));

}

};

四、Java应用层

这层包括Java 应用的调用,Android系统服务Java层

./frameworks/base/services/java/com/android/server/VibratorService.java

【编辑推荐】

【责任编辑:Pockey TEL:(010)68476606】

点赞 0

android mtk 系统架构,Android振动器(Vibrator)系统详解相关推荐

  1. 大型网站系统架构系列:负载均衡详解(一)

    大型网站系统架构系列:负载均衡详解(一) 2016-03-20 架构说 面对大量用户访问.高并发请求,海量数据,可以使用高性能的服务器.大型数据库,存储设备,高性能Web服务器,采用高效率的编程语言比 ...

  2. Android系统架构-[Android取经之路]

    摘要:本节主要来讲解Android的系统架构 阅读本文大约需要花费10分钟. 文章首发微信公众号:IngresGe 专注于Android系统级源码分析,Android的平台设计,欢迎关注我,谢谢! 欢 ...

  3. android系统的手机文件夹目录详解

    android系统的手机文件夹目录详解 一.文件夹 1./acct/     系统回收站,删除的系统文件. 2./cache/     缓存 3. /data/      用户的所有程序相关数据   ...

  4. linux如何查看系统架构?(查看系统架构命令)(armv7l)

    文章目录 命令 1. uname 命令 2. dpkg 命令 3. getconf 命令 4. arch 命令 5. file 命令 瑞芯微摄像头arm-linux(很多命令都没有...) 命令 以下 ...

  5. 系统架构系列(一):系统架构概念、分类和特性

    一.推导系统架构的公式 1.1 系统架构概念拆分 在学习一门技术的时候,一定要知道是什么.为什么.怎么做.系统架构这个概念本身就非常大,而且有各种各样的定义,初学者会遇到这样的困境:到底什么是系统架构 ...

  6. 如何构建一个ERP系统(需求分析、系统架构、系统设计、系统编码、测试、交付程序及文文件)。

    如何构建一个ERP系统(需求分析.系统架构.系统设计.系统编码.测试.交付程序及相关文件).  ERP 系统 _ 需求分析: 一般 ERP 系统的功能是非常繁多的,既包括财务会计. OA .进销存等几 ...

  7. [免费专栏] Android安全之数据存储与数据安全「详解」

    也许每个人出生的时候都以为这世界都是为他一个人而存在的,当他发现自己错的时候,他便开始长大 少走了弯路,也就错过了风景,无论如何,感谢经历 Android安全付费专栏长期更新,本篇最新内容请前往: [ ...

  8. Android四大组件之bindService源码实现详解

        Android四大组件之bindService源码实现详解 Android四大组件源码实现详解系列博客目录: Android应用进程创建流程大揭秘 Android四大组件之bindServic ...

  9. Android 事件分发机制分析及源码详解

    Android 事件分发机制分析及源码详解 文章目录 Android 事件分发机制分析及源码详解 事件的定义 事件分发序列模型 分发序列 分发模型 事件分发对象及相关方法 源码分析 事件分发总结 一般 ...

  10. android应用市场点击下载APK安装详解

    Android系统启动篇 1,<android系统启动流程简介> 2,<android init进程启动流程> 3,<android zygote进程启动流程> 4 ...

最新文章

  1. sudo spctl --master-disable_Φ560加长哈夫节--南宫哈夫节定做厂家
  2. [转]设计模式(22)-Strategy Pattern
  3. iOS轻量分组日志工具 Log4OC
  4. 弱电机房保温棉知识汇总,它的种类及使用你懂多少?
  5. DNA Sorting
  6. 分享WCF聊天程序--WCFChat
  7. C# MVC的博客开发(二)登录
  8. python网络爬虫系列(十一)——JS的解析
  9. KubeEdge 初测
  10. 安装sw时出现sldim停止工作_脉冲滤筒除尘器的安装有哪些小常识
  11. flash Android 11.5,增强稳定性 Flash Player 11.5已发布
  12. killer网卡服务器未运行,外星人killer control center服务未运行怎么解决?
  13. MySQL日期计算函数
  14. 计算机小高考VB程序的选择题,2011江苏小高考物理试卷
  15. 用计算机亩换算成平方,平方换算亩计算器(农村土地面积计算公式)
  16. net-java-php-python-班级信息管理系统计算机毕业设计程序
  17. 文件系统之重新安装系统、如何新增一块盘
  18. AT91SAM9X5EK移植linux4sam6.1包,buildroot制作ubifs挂载成功,执行/sbin/init时提示init (1): undefined instruction
  19. 委以重用的意思_刘表为什么不对刘备委以重用?
  20. 10-222 在员工表中查询每年入职的员工人数

热门文章

  1. 手把手教您使用第三方登录
  2. 计算机网络基础—WEB服务器的配置和管理
  3. OpenGL超级宝典 5e 环境配置
  4. MYCCL特征码定位器详细使用之内存定位
  5. Emotion英语——Point
  6. python项目实战:酒店需求分析(hotel demand booking)
  7. 1、EVPN(Ethernet VPN)技术
  8. 解决 The run destination 设备 is not valid for Testing the Xcode doesn’t support iPhone4s’s iOS 15.1
  9. virtualBox下配置已经安装好的ubuntu内存大小
  10. 【转雷哥】FastDFS安装教程直接复制实测【最新安装包】