• 在 4.1上,gsensor架构和原理分析 -- 从上倒下


    本文主要描述了在android4.1平台G-sensor相关软硬件的体系架构和实现原理,按照Applications、Framework、HAL、Driver和Hardware五大层次分别介绍。

    1.系统架构 (Architecture)

    1.1 Android体系架构图



    1.2 Sensor子系统架构图


     · Application Framework

           Sensor应用程序通过Sensor应用框架来获取sensor数据,应用框架层的Sensor Manager通过JNIC++层进行通信。

     · Sensor Libraries

           Sensor中间层主要由Sensor ManagerSensor serviceSensor硬件抽象层组成。

     · Input Subsystem

           通用的Linux输入框架专为与键盘、鼠标和触摸屏等输入设备而设计,并定义了一套标准事件集合。Sensor输入子系统采用采用了通用的Linux输入框架,它通过/sys/class/input节点和用户空间进行交互。

     · Event Dev

           Evdev提供了一种访问/dev/input/eventX输入设备事件的通用方法。

     · AccelerometerDriver

           此驱动通过I2C总线与MMA7660模组进行通信。

    2 应用 (Applications)

    2.1 应用开发五步曲

    (1)   获取传感器管理器对象;

    mSensorManager =(SensorManager) getSystemService(SENSOR_SERVICE);

    (2)   获取传感器对象;

    mSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);

    (3)  定义事件监听器;

    mEventListener =new SensorEventListener() {

    1. @Override  
    2. publicvoid onSensorChanged(SensorEvent event) {  
    3.    float[] values = event.values;  
    4.    mTextView.setText("Accelerometer:" + values[0] +", "  
    5.           + values[1] +", " + values[2]);  
    6. }  
    7.   
    8. @Override  
    9. publicvoidonAccuracyChanged(Sensor sensor,int accuracy) {  
    10. }  

    (4)   注册事件监听器;

    protectedvoid onResume() {

    1. super.onResume();  
    2.   
    3. mSensorManager.registerListener(mEventListener, mSensor,  
    4.        SensorManager.SENSOR_DELAY_NORMAL);  

    (5)   卸载事件监听器;

    protectedvoid onPause() {

    1.    super.onPause();  
    2.     
    3.    mSensorManager.unregisterListener(mEventListener);  
    4. }  

    3 框架 (Framework)

    3.1 工作模型



    3.1.1 SensorManager的创建



    nativeClassInit(): 初始化Native类信息;
    sensors_module_init(): 创建Native SensorManager实例,从SensorService读取Sensor设备列表;
    sensors_module_get_next_sensor(): 从SensorService读取下一个Sensor设备;

    3.1.2 SensorThread数据接收处理



    sensors_create_queue(): 创建和SensorService共享的消息队列;
    sensors_data_poll(): 从消息队列中读取SensorService发过来的消息;

    3.1.3 SensorService的工作原理



    SensorDevice::poll(): 调用HAL接口读取数据
    SensorEventConnection::sendEvents(): 往消息队列中写入消息,SensorThread后续会读取该消息;

    3.1.4 SensorDevice对HAL的访问



    http://blog.csdn.net/silingsong/article/details/7513157









  • 相关阅读:
    工程模式--基于Java多态性实现
    使用IDEA导入打开Web项目
    基于字典树实现的O(n)排序
    牛客挑战赛39 E 牛牛与序列题解
    牛客练习赛61 F苹果树题解
    Treepath 题解
    Running Median 题解
    Xorto 题解
    NC201400 树学题解
    [Accumulation Degree]题解
  • 原文地址:https://www.cnblogs.com/liulaolaiu/p/11744618.html
Copyright © 2020-2023  润新知