vibrator振荡器调试
一、问题:软键振动太小
1)改变振动时间和频率:
如下网址所示http://blog.sina.com.cn/s/blog_60ffec970100ejow.html
程序起动后等待3秒后,振动1秒,再等待2秒后,振动5秒,再等待3秒后,振动1秒
(路径:\packages\apps\Phone\src\com\android\phone\HapticFeedback.java)
long[] pattern = {3000, 1000, 2000, 5000, 3000, 1000}; // OFF/ON/OFF/ON…
这个时间所决定,为上层控制。
2) 改变振动强度为vibrator.c下的
#define VIBRATOR_STABLE_LEVEL (2)//此处改为8
二、trace(\kernel\arch\arm\mach-sc8810\vibrator.c):
<4>[ 91.643000] DO_DEBUG-------------->func=vibrator_timer_func
<4>[ 91.643000] DO_DEBUG-------------->func=update_vibrator
<4>[ 91.643000] DO_DEBUG-------------->func=set_vibrator,on=0
<4>[ 92.257000] eic_handler
<4>[ 92.257000] eic_handler
<4>[ 92.350000] DO_DEBUG-------------->func=vibrator_enable
<4>[ 92.351000] DO_DEBUG-------------->func=update_vibrator
<4>[ 92.351000] DO_DEBUG-------------->func=set_vibrator,on=0
以上分为两种调用,前者定时器时间到了调用vibrator_timer_func
后者为上层通过
static struct timed_output_dev sprd_vibrator = {
.name = "vibrator",
.get_time = vibrator_get_time,
.enable = vibrator_enable,
};
调用vibrator_enable
三、分析:
1)void __init sprd_init_vibrator(void)
{
INIT_WORK(&vibrator_work, update_vibrator);//初始化队伍,后期通过INIT_WORK()
//调用update_vibrator
hrtimer_init(&vibe_timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);//初始化高精度定时器
vibe_timer.function = vibrator_timer_func; //时间到了会调用此函数
}
2)上层通过struct timed_output_dev sprd_vibrator接口调用vibrator_enable时初始化定时器,
结果就如上面trace时两种结果。
其中两者都通过schedule_work(&vibrator_work);使工作队列中的函数update_vibrator()工作。
按键LED亮度调节