RAM:1G
FLASH:8G 板载
这次开发用的代码都是 google 和飞思卡尔提供的具体的就不再说明了,因为每个平台代码都有所不同,
而且买开发板时候都会带相应的资料。
2.
震动系统是 android
里面比较简单的一个系统,
我采用的是从高层到底层的学习方式。因为我们的
驱
动最终是给应用程序用的,从 application 的需求分析 JNI,然后分析 HAL 最后在我们写 linux kernel驱
动时候,很容易理解为什么要这么写。好了开始正式分析。
3. Application 层:通过 google 我找到关于 APK 访问震动的如下说明:
A、通过系统服务获得手机震动服务,Vibrator vibrator =
(Vibrator)getSystemService(VIBRATOR_SERVICE);
B、得到震动服务后检测 vibrator 是否存在:
vibrator.hasVibrator();
检测当前硬件是否有 vibrator,如果有返回 true,如果没有返回 false。
C、根据实际需要进行适当的调用,
vibrator.vibrate(long milliseconds);
开始启动 vibrator 持续 milliseconds 毫秒。
vibrator.vibrate(long[] pattern, int repeat);
以 pattern 方式重复 repeat 次启动 vibrator。
(pattern 的形式为 new long[]{arg1,arg2,arg3,arg4......},其中以两个一组的如 arg1 和 arg2 为一
组、arg3 和 arg4 为一组,每一组的前一个代表等待多少毫秒启动vibrator,后一个代表vibrator
持续多少毫秒停止,之后往复即可。Repeat 表示重复次数,当其为-1 时,表示不重复只以
pattern 的方式运行一次)。
D、vibrator.cancel();
Vibrator 停止。
从上面的说明,可以看出应用程序调用震动系统,是调用一个叫 VIBRATOR_SERVICE 的服务,这个服
务有 3 个函数,分别是 hasVibrator(),r.vibrate,.cancel();当然这个三个函数可能在 framework 层进行
的另一层的封装,我没有去深究。但可以推测出 JNI 层要做的是与注册 VIBRATOR_SERVICE 服务和实
现这三个函数相关的.
4. HAL 层:这一层我找到了具体的代码我们会好分析很多,其代码是:
#define LOG_TAG "VibratorService"
#include "jni.h"
#include "JNIHelp.h"
#include "android_runtime/AndroidRuntime.h"
#include <utils/misc.h>
#include <utils/Log.h>
#include <hardware_legacy/vibrator.h>
#include <stdio.h>
namespace android
android\frameworks\base\services\jni\com_android_server_VibratorService.cpp
评论0
最新资源