msm8909 Sensor HAL
代码路径:code/hardware/qcom/sensors/
核心作用:封装对 sensor的方法,不直接通过本地C库直接访问
├── Accelerometer.cpp
├── AccelSensor.h
├── AkmSensor.cpp
├── AkmSensor.h
├── algo
├── Android.mk
├── Bmp180.cpp
├── CalibrationManager.cpp
├── CalibrationManager.h
├── CalibrationModule.h
├── calmodule.cfg
├── CompassSensor.cpp
├── CompassSensor.h
├── Gyroscope.cpp
├── GyroSensor.h
├── InputEventReader.cpp
├── InputEventReader.h
├── LICENSE
├── LightSensor.cpp
├── LightSensor.h
├── NativeSensorManager.cpp
├── NativeSensorManager.h
├── PressureSensor.h
├── ProximitySensor.cpp
├── ProximitySensor.h
├── SensorBase.cpp
├── SensorBase.h
├── sensors.cpp
├── sensors_extension.h
├── sensors.h
├── sensors_XML.cpp
├── sensors_XML.h
├── SignificantMotion.cpp
├── SignificantMotion.h
├── VirtualSensor.cpp
└── VirtualSensor.h
重要文件有:
sensors.cpp
sensors.cpp 中提供数据机构架构,提供 hw_device_t 封装; 让其他层可以获得这个结构,得以使用其中的方法;
通过实现的结构可以发现,所有的操作都使用了, NativeSensorManager用来做具体的操作
NativeSensorManager.cpp
Native SensorManager 是个class,继承Singleton; 单例模式,只存在一个对象;
即被多次定义引用的对象 sm; 它的存在是统一管理sensor HAL的sensor访问;
将存在的sensor统一存在数组里,不针对sensor具体类型; 是HAL的实际操作者;
SensorBase.cpp
VirtualSensor.cpp
sensors主要设备结构
sensor_t
struct sensor_t {
const char* name;
//!< sensor名称
const char* vendor;
//!< 厂商名
int version;
int handle
int type;
//!< 类型标识
float maxRange;
float resolution;
//!< 解析度 即报告数值的最大差异范围
float power;
int32_t minDelay;
uint32_t fifoReservedEventCount;
uint32_t fifoMaxEventCount;
//!< 类型字符串
const char* stringType;
//!< 权限
const char* requiredPermission;
void* reserved[2];
};
sensor_moudule_t
struct sensors_module_t {
struct hw_module_t common;
//!< hw_module_t 基础结构 >!
int (*get_sensors_list)(struct sensors_module_t* module,
struct sensor_t const** list);
//!< 拓展接口,获取sensor 列表 >!
int (*set_operation_mode)(unsigned int mode);
//!< 操作设置sensor mode >!
};
//!< 定义 名为HMI的 hw_module_t 结构体(可以转型为包含它的具体设备类型,首地址保持相同),get_module 获取它 >! NoteBy: yujixuan
struct sensors_module_t HAL_MODULE_INFO_SYM = {
common: {
tag: HARDWARE_MODULE_TAG, //!< 固定名 >! NoteBy: yujixuan
version_major: 1,
version_minor: 0,
id: SENSORS_HARDWARE_MODULE_ID,
name: "Quic Sensor module",
author: "Quic",
methods: &sensors_module_methods, //!< hw_module_t 必要填充的方法 >!
dso: NULL,
reserved: {
0},
},
get_sensors_list: sensors__get_sensors_list, //!< sensor_module_t 拓展的方法 >!
};
static struct hw_module_methods_t sensors_module_methods = {
open: open_sensors //!< 只有一个open函数,它的作用是返回具体的 device >!
};
//!< 打开一个新的sensor 实例 填充具体的hw_device_t>!
open函数实现:open_sensors
#define HAL_MODULE_INFO_SYM HMI
#define HAL_MODULE_INFO_SYM_AS_STR "HMI"
static int open_sensors(const struct hw_module_t* module, const char*,
struct hw_device_t** device)
{
int status = -EINVAL;
sensors_poll_context_t *dev = new sensors_poll_context_t();
NativeSensorManager& sm(NativeSensorManager::getInsta