android mtk 系统架构,Android振动器(Vibrator)系统详解
平台 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)系统详解相关推荐
- 大型网站系统架构系列:负载均衡详解(一)
大型网站系统架构系列:负载均衡详解(一) 2016-03-20 架构说 面对大量用户访问.高并发请求,海量数据,可以使用高性能的服务器.大型数据库,存储设备,高性能Web服务器,采用高效率的编程语言比 ...
- Android系统架构-[Android取经之路]
摘要:本节主要来讲解Android的系统架构 阅读本文大约需要花费10分钟. 文章首发微信公众号:IngresGe 专注于Android系统级源码分析,Android的平台设计,欢迎关注我,谢谢! 欢 ...
- android系统的手机文件夹目录详解
android系统的手机文件夹目录详解 一.文件夹 1./acct/ 系统回收站,删除的系统文件. 2./cache/ 缓存 3. /data/ 用户的所有程序相关数据 ...
- linux如何查看系统架构?(查看系统架构命令)(armv7l)
文章目录 命令 1. uname 命令 2. dpkg 命令 3. getconf 命令 4. arch 命令 5. file 命令 瑞芯微摄像头arm-linux(很多命令都没有...) 命令 以下 ...
- 系统架构系列(一):系统架构概念、分类和特性
一.推导系统架构的公式 1.1 系统架构概念拆分 在学习一门技术的时候,一定要知道是什么.为什么.怎么做.系统架构这个概念本身就非常大,而且有各种各样的定义,初学者会遇到这样的困境:到底什么是系统架构 ...
- 如何构建一个ERP系统(需求分析、系统架构、系统设计、系统编码、测试、交付程序及文文件)。
如何构建一个ERP系统(需求分析.系统架构.系统设计.系统编码.测试.交付程序及相关文件). ERP 系统 _ 需求分析: 一般 ERP 系统的功能是非常繁多的,既包括财务会计. OA .进销存等几 ...
- [免费专栏] Android安全之数据存储与数据安全「详解」
也许每个人出生的时候都以为这世界都是为他一个人而存在的,当他发现自己错的时候,他便开始长大 少走了弯路,也就错过了风景,无论如何,感谢经历 Android安全付费专栏长期更新,本篇最新内容请前往: [ ...
- Android四大组件之bindService源码实现详解
Android四大组件之bindService源码实现详解 Android四大组件源码实现详解系列博客目录: Android应用进程创建流程大揭秘 Android四大组件之bindServic ...
- Android 事件分发机制分析及源码详解
Android 事件分发机制分析及源码详解 文章目录 Android 事件分发机制分析及源码详解 事件的定义 事件分发序列模型 分发序列 分发模型 事件分发对象及相关方法 源码分析 事件分发总结 一般 ...
- android应用市场点击下载APK安装详解
Android系统启动篇 1,<android系统启动流程简介> 2,<android init进程启动流程> 3,<android zygote进程启动流程> 4 ...
最新文章
- sudo spctl --master-disable_Φ560加长哈夫节--南宫哈夫节定做厂家
- [转]设计模式(22)-Strategy Pattern
- iOS轻量分组日志工具 Log4OC
- 弱电机房保温棉知识汇总,它的种类及使用你懂多少?
- DNA Sorting
- 分享WCF聊天程序--WCFChat
- C# MVC的博客开发(二)登录
- python网络爬虫系列(十一)——JS的解析
- KubeEdge 初测
- 安装sw时出现sldim停止工作_脉冲滤筒除尘器的安装有哪些小常识
- flash Android 11.5,增强稳定性 Flash Player 11.5已发布
- killer网卡服务器未运行,外星人killer control center服务未运行怎么解决?
- MySQL日期计算函数
- 计算机小高考VB程序的选择题,2011江苏小高考物理试卷
- 用计算机亩换算成平方,平方换算亩计算器(农村土地面积计算公式)
- net-java-php-python-班级信息管理系统计算机毕业设计程序
- 文件系统之重新安装系统、如何新增一块盘
- AT91SAM9X5EK移植linux4sam6.1包,buildroot制作ubifs挂载成功,执行/sbin/init时提示init (1): undefined instruction
- 委以重用的意思_刘表为什么不对刘备委以重用?
- 10-222 在员工表中查询每年入职的员工人数
热门文章
- 手把手教您使用第三方登录
- 计算机网络基础—WEB服务器的配置和管理
- OpenGL超级宝典 5e 环境配置
- MYCCL特征码定位器详细使用之内存定位
- Emotion英语——Point
- python项目实战:酒店需求分析(hotel demand booking)
- 1、EVPN(Ethernet VPN)技术
- 解决 The run destination 设备 is not valid for Testing the Xcode doesn’t support iPhone4s’s iOS 15.1
- virtualBox下配置已经安装好的ubuntu内存大小
- 【转雷哥】FastDFS安装教程直接复制实测【最新安装包】