Andriod Sensor HAL实现
来源:互联网 发布:联通淘宝旗舰店 编辑:程序博客网 时间:2024/06/05 18:59
Android4.1系统内置对传感器的支持达13种,他们分别是:加速度传感器(accelerometer)、磁力传感器(magnetic field)、方向传感器(orientation)、陀螺仪(gyroscope)、环境光照传感器(light)、压力传感器(pressure)、温度传感器(temperature)和距离传感器(proximity)等。Android实现传感器系统包括以下几个部分:
n
n
n
n
各部分之间架构图如下:
2 Sensor HAL层接口
Google为Sensor提供了统一的HAL接口,不同的硬件厂商需要根据该接口来实现并完成具体的硬件抽象层,Android中Sensor的HAL接口定义在:
hardware/libhardware/include/hardware/sensors.h
n
#define SENSOR_TYPE_ACCELEROMETER
#define SENSOR_TYPE_MAGNETIC_FIELD
#define SENSOR_TYPE_ORIENTATION
#define SENSOR_TYPE_GYROSCOPE
#define SENSOR_TYPE_LIGHT
#define SENSOR_TYPE_PRESSURE
#define SENSOR_TYPE_TEMPERATURE
#define SENSOR_TYPE_PROXIMITY
#define SENSOR_TYPE_GRAVITY
#define SENSOR_TYPE_LINEAR_ACCELERATION 10
#define SENSOR_TYPE_ROTATION_VECTOR
#define SENSOR_TYPE_RELATIVE_HUMIDITY
#define SENSOR_TYPE_AMBIENT_TEMPERATURE 13
n
struct sensors_module_t {
};
该接口的定义实际上是对标准的硬件模块hw_module_t的一个扩展,增加了一个get_sensors_list函数,用于获取传感器的列表。
n
struct sensor_t {
};
n
typedef struct sensors_event_t {
} sensors_event_t;
其中,sensor为传感器的标志符,而不同的传感器则采用union方式来表示,sensors_vec_t结构体用来表示不同传感器的数据,
n
typedef struct {
} sensors_vec_t;
n
struct sensors_poll_device_t {
struct hw_device_t common;
//Activate/deactivate one sensor
};
n
static inline int sensors_open(const struct hw_module_t* module,
}
static inline int sensors_close(struct sensors_poll_device_t* device) {
}
3 Sensor HAL实现(以bma250为例子)
3.1打开设备流程图
SensorDevice属于JNI层,与HAL进行通信的接口,在JNI层调用了HAL层的open_sensors()方法打开设备模块,再调用poll__activate()对设备使能,然后调用poll__poll读取数据。
3.2实现代码分析
在bma250传感器中,只有加速度传感器,所以在sensor.cpp中,首先需要定义传感器数组sSensorList,其实就是初始化struct sensor_t结构体,只有加速传感器,初始化如下:
static const struct sensor_t sSensorList[] = {
};
static const struct sensor_t sSensorList[] = {
};
static const struct sensor_t sSensorList[] = {
};
static const struct sensor_t sSensorList[] = {
};
static const struct sensor_t sSensorList[] = {
};
n
static struct hw_module_methods_t sensors_module_methods = {
};
static int open_sensors(const struct hw_module_t* module, const char* name,
{
}
在这个方法中,首先需要为hw_device_t分配内存空间,并对其初始化,设置重要方法的实现,然后调用open_input_device打开设备节点,返回文件描述符。
n
static int poll__activate(struct sensors_poll_device_t *device,
}
static int set_sysfs_input_attr(char *class_path,
{
}
代码很简单,通过系统调用open方法打开设备,然后调用write()方法写指令使能。
n
static int poll__poll(struct sensors_poll_device_t *device,
- Andriod Sensor HAL实现
- Andriod Sensor HAL实现
- Andriod Sensor HAL实现
- Andriod Sensor HAL 分析
- sensor hal 实现
- Andriod Sensor
- [sensor] sensor service & hal
- Android sensor hal 详解
- Sensor -- HAL 分析
- sensor----HAL分析
- android study ------ HAL ---> light sensor
- android study ------ HAL ---> light sensor
- Sensor HAL框架分析之一
- Sensor HAL框架分析之一
- Sensor HAL框架分析之一
- Android Sensor HAL层分析
- Sensor HAL框架分析之二
- Sensor HAL框架分析之三 .
- JSP Request.getParameter中文乱码的误区
- 我系统用win8 64 英文版
- Java 组拆报文
- servlet与jsp间传递 xml 数据
- 使用XlmWrite把一个xml文件写入输出流中。在(demo2.aspx运行时显示xml文档)
- Andriod Sensor HAL实现
- 使用XmlDocument 读取books.xml中的书名到DropDownList中。(4-2选作使用XmlReader读取books.xml中的书名到DropDownList中)
- 每周一荐:时间日志应用aTimeLogger2
- 奇数因子
- 浏览器用360浏览器
- 派生类的构造函数的编写
- 使用XmlDocument将dropdownlist中显示的书名的其它信息读入到相应的文本框中。
- 我喜欢听的歌
- 关于工作,关于加班,关于发展