如何理解Sensor架构 - 华清远见 - 图文

1) Framework

SensorService作为系统守护进程运行,其类的一个公有成员ParcelFileDescriptor通过实现_sensors_control_open()得到设备的文件描述符。 2) JNI

为_sensors_control_open()提供接口android_open(),并执行回调函数sSensorDevice->open_data_source(); 3) 硬件抽象层

具体实现(*open_data_source),该函数通过打开G-sensor的设备节点得到文件描述符fd = open (\4) 设备驱动层

通过misc_register()对G-sensor设备进行注册,建立设备节点。 3.3 sSensorDevice->data_open()

1) Framework

SensorManager作为系统守护进程运行,其子类SensorThreadRunnable的行为函数run()实现sensors_data_open()。 2) JNI

为sensors_data_open()提供接口sensors_data_open(),并执行回调函数sSensorDevice->data_open(); 3) 硬件抽象层

具体实现(*data_open),该函数的功能就是将已经得到的文件描述符fd复制一份到sensors_data_context结构体中的dev->fd,以便为处理数据的回调函数如(*poll)使用。 3.4 sSensorDevice->poll()

1) Framework

SensorManager作为系统守护进程运行,其子类SensorThreadRunnable的行为函数run()实现

sensors_data_poll(values, status, timestamp),其目的是通过此函数得到从底层传上来的有关G-sensor的数据values, status和timestamp,再通过此类的一个行为函数

listener.onSensorChangedLocked(sensorObject, values, timestamp, accuracy);为上层应用程序提供了得到G-sensor设备数据的接口函数。 2) JNI

为sensors_data_poll()提供接口sensors_data_poll(),并执行回调函数

sSensorDevice->poll(sSensorDevice, &data);其中,得到的data就是从底层传上来的G-sensor数据,然后通过下图的方式将data中对应的数据分别赋给values, status和timestamp。

3) 硬件抽象层

具体实现(*poll),该函数通过ioctl()实现与底层驱动程序的交互。

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4