手机都是有震动的效果的,前天飞刀从手机里拆了一个振动器,然后让我下周把这个调一下,昨天来公司小试了一把,就搞定了。下面把过程讲一下吧。

其实android中已经做好了底层的驱动,那便是timed_gpio,就是把定时功能和gpio的功能结合在一起了,振动就是一个小直流电机了,当gpio口是高电平的时候,电机就转动了,当gpio口为低电平的时候,电机就不转了,而time是控制转的时间,也就是gpio口处于高电平的时间。

具体的代码就在/drivers/staging/android/timed_gpio.c

在相关平台的platform.c中加入platform device就可以了。

static struct timed_gpio vibrator =
{
.name = “vibrator”,
.gpio = 61, //对应自己平台的gpio号
.max_timeout = 100000,
.active_low = 0;
};
static  struct timed_gpio_platform_data timed_gpio_data =
{
.num_gpios = 1,
.gpios = &vibrator,
};
static struct platform_device my_timed_gpio =
{
.name = “timed-gpio”,
.id = -1,
.dev =
{
.platform_data = &timed_gpio_data,
},
};

然后在make menuconfig中选上device下的staging下的android中的相关选项

然后就可以跑一下内核来了,当内核跑起来后,就可以测试了。

因为timed gpio驱动程序为每个设备在/sys/class/timed_output/目录下建立一个子

录,设备子目录的enable文件就是控制设备的时间的。因为在platform中名称为vibrator,

所以,用以下命令可以测试:

echo 10000 > /sys/class/timed_output/vibrator/enable

然后可以看下振动器在转了,也可以用示波器或者万用表来验证

接着可以

cat /sys/class/timed_output/vibrator/enable

发现enable的值一直在变小,直到为0的时候停止了转动了。

OK,底层驱动好了,那么android上层就好办多了,因为android上层几乎和平台关系不大,要改的东西很少很少。

至于android硬件抽象层,在hardware/libhardware_legacy/include/hardware_legacy/ vibrator目录下。

#include <hardware_legacy/vibrator.h>
#include "qemu.h"
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <errno.h>
#define THE_DEVICE "/sys/class/timed_output/vibrator/enable"
int vibrator_exists()
{
int fd;
#ifdef QEMU_HARDWARE
if (qemu_check()) {
return 1;
}
#endif
fd = open(THE_DEVICE, O_RDWR);
if(fd < 0)
return 0;
close(fd);
return 1;
}
static int sendit(int timeout_ms)
{
int nwr, ret, fd;
char value[20];
#ifdef QEMU_HARDWARE
if (qemu_check()) {
return qemu_control_command( "vibrator:%d", timeout_ms );
}
#endif
fd = open(THE_DEVICE, O_RDWR);
if(fd < 0)
return errno;
nwr = sprintf(value, "%d\n", timeout_ms);
ret = write(fd, value, nwr);
close(fd);
return (ret == nwr) ? 0 : -1;
}
int vibrator_on(int timeout_ms)
{
/* constant on, up to maximum allowed time */
return sendit(timeout_ms);
}
int vibrator_off()
{
return sendit(0);
}

看到了吧

#define THE_DEVICE "/sys/class/timed_output/vibrator/enable"

就是我们要操作的底层驱动的地方,只要这个和驱动配上,那么剩下的事情就木有了,直接搞定了。

其实她也是往这里写数据,android的java层就不关心她了。好了,然后可以在android启动后设置一个闹钟来测试下了,发现可以,至此android的vibrator移植成功。

突然发现了,其实以前觉得很难得东西,很不好理解的东西,在过一段时间后再回过头去看的时候才会恍然大悟。学习是个漫长的过程,是一个知识慢慢积累的过程,一口气是吃不成胖子的。

和菜鸟一起学android4.0.3源码之vibrator振动器移植心得相关推荐

  1. 和菜鸟一起学android4.0.3源码之USB wifi移植心得

    转载地址:http://blog.csdn.net/eastmoon502136/article/details/7850157 一天又过去了,台风也走了有些时候了.想了想,自己还是冲动了一把,不该发 ...

  2. 我和菜鸟一起学android4.0.3源码之硬件gps简单移植

    关于android定位方式 android 定位一般有四种方法,这四种方式分别是GPS定位.WIFI定位.基站定位.AGPS定位. 1. Android GPS 需要GPS硬件支持直接和卫星交互来获取 ...

  3. 和菜鸟一起学android4.0.3源码之lcd屏幕背光调节

    周六的中午还是依旧来了公司,本来也没有打算来的,既然来了,那就把上次遗留下来的一些问题给解决吧,把android下的pwm调lcd背光给总结下吧.关于android的背光,是用pwm波来控制的,通过占 ...

  4. android4.0.3源码之硬件gps简单移植

    [转]我和菜鸟一起学android4.0.3源码之硬件gps简单移植 2013-7-5阅读94 评论0 关于android定位方式 android 定位一般有四种方法,这四种方式分别是GPS定位.WI ...

  5. Ubuntu12.04编译Android4.0.1源码全过程-----附wubi安装ubuntu编译android源码硬盘空间不够的问题解决

    Ubuntu12.04编译Android4.0.1源码全过程-----附wubi安装ubuntu编译android源码硬盘空间不够的问题解决 参考文章: (1)Ubuntu12.04编译Android ...

  6. Ubuntu12.04下Android4.0.4源码的下载及其编译过程

    Ubuntu12.04下Android4.0.4源码的下载及其编译过程 http://www.jizhuomi.com/android/environment/427.html

  7. 菜鸟读jQuery 2.0.3 源码分析系列(1)

    原文链接在这里,作为一个菜鸟,我就一边读一边写 jQuery 2.0.3 源码分析系列 前面看着差不多了,看到下面一条(我是真菜鸟),推荐木有入门或者刚刚JS入门摸不着边的看看,大大们手下留情,想一起 ...

  8. android4.0.3源码之鼠标光标绘制简略版

    搞定了android4.0.3的触摸屏的适配后(其实只要驱动没有什么问题,加个配置文件就很容易搞定了),新的任务就下来了,就是要寻找android4.0.3中的鼠标是如何绘画的,哪里createSur ...

  9. Ubuntu11.10下载android4.0.1源码

    好记不如料笔头,学习新奇的东东就是要多记一下,今天用虚拟机安装了一个Ubunut11.10的系统. 目的就是为了深入android底层方向研究,顺便做一下笔记 目前使用的是XP系统内安装VM8+Ubu ...

最新文章

  1. 线程池中使用条件变量和信号量的性能比较
  2. 【kafka】confluent_kafka重置offset
  3. delete指针之后应该赋值NULL
  4. (第十一周)考试系统测试报告
  5. @EnableAspectAutoJAutoProxy_exposeProxy属性
  6. NumPy之:标量scalars
  7. VMware Fusion配置CentOS系统
  8. 如何指南:Apache Drill入门
  9. FreeSql (三十三)CodeFirst 类型映射
  10. JavaWeb笔记:JDBC总结
  11. python classmethod static_python @classmethod 和 @staticmethod
  12. 廖雪峰--python教程:笔记四-函数式编程
  13. mac上的mongodb安装与使用的踩坑记
  14. 【语音去噪】基于matlab GUI软阈值+硬阈值+软硬折中阈值语音去噪【含Matlab源码 1810期】
  15. 手机上最好用的五笔输入法_远程输入法,用电脑键盘给手机打字,省蓝牙键盘钱了...
  16. Axure RP 10 10.0.0.3818 中文版 专业的快速原型设计工具
  17. 献给1986,1987年出生的人
  18. html5出生年月日,出生年月日五行查询表
  19. MySQL主从不一致的修复过程(r10笔记第96天)
  20. redis:redis-cli使用

热门文章

  1. 二维码解码器Zbar+VS2010开发环境配置
  2. 判断Checkbox选中两种方法
  3. PyCharm 快速批量注释及取消注释
  4. 【高项】- 采购管理论文
  5. lamda函数的简介
  6. 什么叫幂等?如何实现幂等性?
  7. 安全架构-HTTP协议幂等性
  8. PYTHON对接国际验证码接口
  9. 进入BeOS的花花世界 系列八
  10. 服务器取证——服务器基础知识