首先看下sensor的hal层头文件:hardware\libhardware\include\hardware
- typedef struct {
- union {
- float v[3];
- struct {
- float x;
- float y;
- float z;
- };
- struct {
- float azimuth;
- float pitch;
- float roll;
- };
- };
- int8_t status;
- uint8_t reserved[3];
- } sensors_vec_t;
-
- /**
- * Union of the various types of sensor data
- * that can be returned.
- */
- typedef struct sensors_event_t {
- /* must be sizeof(struct sensors_event_t) */
- int32_t version;
-
- /* sensor identifier */
- int32_t sensor;
-
- /* sensor type */
- int32_t type;
-
- /* reserved */
- int32_t reserved0;
-
- /* time is in nanosecond */
- int64_t timestamp;
-
- union {
- float data[16];
-
- /* acceleration values are in meter per second per second (m/s^2) */
- sensors_vec_t acceleration;
-
- /* magnetic vector values are in micro-Tesla (uT) */
- sensors_vec_t magnetic;
-
- /* orientation values are in degrees */
- sensors_vec_t orientation;
-
- /* gyroscope values are in rad/s */
- sensors_vec_t gyro;
-
- /* temperature is in degrees centigrade (Celsius) */
- float temperature;
-
- /* distance in centimeters */
- float distance;
-
- /* light in SI lux units */
- float light;
-
- /* pressure in hectopascal (hPa) */
- float pressure;
-
- /* relative humidity in percent */
- float relative_humidity;
- };
- uint32_t reserved1[4];
- } sensors_event_t;
-
-
-
- struct sensor_t;
-
- /**
- * Every hardware module must have a data structure named HAL_MODULE_INFO_SYM
- * and the fields of this data structure must begin with hw_module_t
- * followed by module specific information.
- */
- struct sensors_module_t {
- struct hw_module_t common;
-
- /**
- * Enumerate all available sensors. The list is returned in "list".
- * @return number of sensors in the list
- */
- int (*get_sensors_list)(struct sensors_module_t* module,
- struct sensor_t const** list);
- };
-
- struct sensor_t {
- /* name of this sensors */
- const char* name;
- /* vendor of the hardware part */
- const char* vendor;
- /* version of the hardware part + driver. The value of this field
- * must increase when the driver is updated in a way that changes the
- * output of this sensor. This is important for fused sensors when the
- * fusion algorithm is updated.
- */
- int version;
- /* handle that identifies this sensors. This handle is used to activate
- * and deactivate this sensor. The value of the handle must be 8 bits
- * in this version of the API.
- */
- int handle;
- /* this sensor's type. */
- int type;
- /* maximaum range of this sensor's value in SI units */
- float maxRange;
- /* smallest difference between two values reported by this sensor */
- float resolution;
- /* rough estimate of this sensor's power consumption in mA */
- float power;
- /* minimum delay allowed between events in microseconds. A value of zero
- * means that this sensor doesn't report events at a constant rate, but
- * rather only when a new data is available */
- int32_t minDelay;
- /* reserved fields, must be zero */
- void* reserved[8];
- };
-
-
- /**
- * Every device data structure must begin with hw_device_t
- * followed by module specific public methods and attributes.
- */
- struct sensors_poll_device_t {
- struct hw_device_t common;
-
- /** Activate/deactivate one sensor.
- *
- * @param handle is the handle of the sensor to change.
- * @param enabled set to 1 to enable, or 0 to disable the sensor.
- *
- * @return 0 on success, negative errno code otherwise
- */
- int (*activate)(struct sensors_poll_device_t *dev,
- int handle, int enabled);
-
- /**
- * Set the delay between sensor events in nanoseconds for a given sensor.
- *
- * If the requested value is less than sensor_t::minDelay, then it's
- * silently clamped to sensor_t::minDelay unless sensor_t::minDelay is
- * 0, in which case it is clamped to >= 1ms.
- *
- * @return 0 if successful, < 0 on error
- */
- int (*setDelay)(struct sensors_poll_device_t *dev,
- int handle, int64_t ns);
-
- /**
- * Returns an array of sensor data.
- * This function must block until events are available.
- *
- * @return the number of events read on success, or -errno in case of an error.
- * This function should never return 0 (no event).
- *
- */
- int (*poll)(struct sensors_poll_device_t *dev,
- sensors_event_t* data, int count);
- };
-
- /** convenience API for opening and closing a device */
-
- static inline int sensors_open(const struct hw_module_t* module,
- struct sensors_poll_device_t** device) {
- return module->methods->open(module,
- SENSORS_HARDWARE_POLL, (struct hw_device_t**)device);
- }
-
- static inline int sensors_close(struct sensors_poll_device_t* device) {
- return device->common.close(&device->common);
- }
-
- __END_DECLS
主要包括sensors_vec_t、sensors_event_t、sensors_module_t、sensor_t、sensors_poll_device_t几个结构
sensors_vec_t主要是上传的数据,里面包括一个union结构,包含各种上传数据的一个数据封装,都是三个float
sensors_event_t主要是以一个事件的形式上传从sensor获取的数据,里面也有一个union,包含的是各种各样的传感器的数据,其中type是sensor的类型,sensor是一个标识
sensors_module_t是hw_module_t的一个封装,提供一个get_sensors_list获取该平台可提供的所有sensor
sensor_t用来描述一个sensor
sensors_poll_device_t是hw_device_t的一个封装。提供了3个方法activate、setDelay、poll
activate用来启动和停止sensor
setDelay用来设置延时
poll用来监听sensor上是否有数据
|