前言:
振动器是Android智能手机操作系统中比较常见的功能之一,在实际应用中可以将来电显示设置为振动模式作为提醒。在Android系统中,通过振动系统米快可以实现俩点铃声和来电的振动功能。。本篇blog主要是向大家介绍在高通平台上移植振动器驱动框架以及代码实现的过程。
一、振动器系统框架
振动器系统自下而上包含了驱动程序、振动器系统硬件抽象层、振动器系统Java框架类、Java框架中振动器系统使用等几部分,其结构如下图所示
Android振动器系统的框架结构 振动器系统结构元素
结构说明:
1)驱动程序:某个特定硬件凭条振动其的驱动程序。通常是基于Android的timed output 驱动框架来实现的。
2)硬件抽象层:振动器系统的硬件抽象层的接口路径是hardware/libhardware_legacy/include/hardware_legacy/vibrator.h
其默认代码路径是:hardware/libhardware_legacy/vibrator/vibrator.c
因为Android振动器的硬件抽象层是libhardware_legacy.so的一部分。所以通常并不需要重新实现。
3)JNI框架部分:代码路径是frameworks/base/services/jni/com_andriod_server_vibrarorservice.cpp
此文件定义了振动器的JNI部分,通过调用硬件抽象层向上层提供接口。
4)Java应用部分:振动器系统的Java不封的代码路径是frameworks/base/services/java/com/android/server/vibratorservice.java和frameworks/base/vore/java/android/ps/vibrator.java
文件vibaratorservice.java通过调用vibratorService JNI来实现包com.android.server中的类VibratorService。
类Vibtator.java中实现Android.os包中的Vibrator类。这是想Java层提供的API。
二、代码分析
1)在hardware/libhardware_legacy/include/hardware_legacy/vibrator.h中主要实现功能分析:
2)在hardware/libhardware_legacy/vibrator/vibrator.c中主要函数分析:
3)在frameworks/base/services/jni/com_andriod_server_vibrarorservice.cpp中主要函数分析:
frameworks/base/services/java/com/android/server/目录中的VibratorService.java通过调用VibratorService JNI来实现com.android.server包中的VibratorService类。
frameworks/base/core/java/android/os/目录中的Vibrator.java文件实现了android.os包中的Vibrator类。它通过调用vibrator的Java服务来实现(获得名称为vibrator的服务),配合同目录中的IVibratorService.aidl文件向应用程序层提供Vibrator的相关API。
4)在内核驱动代码kernel/arch/arm/mach-msm/msm_vibrator.c中的实现: