android系统之sensor学习
来源:互联网 发布:自动化控制软件图片 编辑:程序博客网 时间:2024/05/16 05:51
Sensor作为Android系统的一个输入设备,对Android设备来说是必不可少的。Sensor主要包括G-Sensor、LightsSensor、ProximitySensor、TemperatureSensor等。这里主要对G-Sensor模块进行解析。
tristate "KXTJ2 accelerometer sensor driver"
depends on I2C
help
Say yes here to support Kionix's KXTJ2 accelerometer sensor
{
I2C_BOARD_INFO("kionix_accel", KIONIX_ACCEL_I2C_ADDR),
//.irq = INT_GPIO_1,
.platform_data = (void *) &kionix_accel_pdata,
},
#endif
.name = KIONIX_ACCEL_NAME,
.owner = THIS_MODULE,
},
.probe = kionix_accel_probe,
.remove = __devexit_p(kionix_accel_remove),
.id_table = kionix_accel_id,
};
capabilities
device
event4
id
modalias
name
phys
power
properties
subsystem
uevent
uniq
上报数据的过程:static void report_abs(void)
{
short x,y,z,tilt;
if(read_data(&x,&y,&z,&tilt) != 0) {
/* report the absulate sensor data to input device */
input_report_abs(idev, ABS_X, y);
input_report_abs(idev, ABS_Y, x);
input_report_abs(idev, ABS_Z, z);
input_sync(idev);
}
* Sensor types
*/
#define SENSOR_TYPE_ACCELEROMETER 1
#define SENSOR_TYPE_MAGNETIC_FIELD 2
#define SENSOR_TYPE_ORIENTATION 3
#define SENSOR_TYPE_GYROSCOPE 4
#define SENSOR_TYPE_LIGHT 5
#define SENSOR_TYPE_PRESSURE 6
#define SENSOR_TYPE_TEMPERATURE 7 // deprecated
#define SENSOR_TYPE_PROXIMITY 8
#define SENSOR_TYPE_GRAVITY 9
#define SENSOR_TYPE_LINEAR_ACCELERATION 10
#define SENSOR_TYPE_ROTATION_VECTOR 11
#define SENSOR_TYPE_RELATIVE_HUMIDITY 12
#define SENSOR_TYPE_AMBIENT_TEMPERATURE 13
common: {
tag: HARDWARE_MODULE_TAG,
version_major: 1,
version_minor: 0,
id: SENSORS_HARDWARE_MODULE_ID,
name: "Sensors module",
author: "Amlogic",
methods: &sensors_module_methods,
},
get_sensors_list: sensors__get_sensors_list,
};
struct sensor_t const** list)
{
*list = sSensorList;
return ARRAY_SIZE(sSensorList);
}
static const struct sensor_t sSensorList[] = {
{ "BMA250 3-axis Accelerometer",
"Bosch",
1, SENSORS_ACCELERATION_HANDLE,
SENSOR_TYPE_ACCELEROMETER,
4.0f*9.81f,
(4.0f*9.81f)/1024.0f,
0.2f,
0,
{ }
},
#ifdef ENABLE_LIGHT_SENSOR
{ "Light sensor",
"(none)",
1, SENSORS_LIGHT_HANDLE,
SENSOR_TYPE_LIGHT, 5000.0f, 1.0f, 1.0f, 20000,{ } },
#endif
};
mSensors[aml_accel] = new GSensor();
mPollFds[aml_accel].fd = mSensors[aml_accel]->getFd();
mPollFds[aml_accel].events = POLLIN;
mPollFds[aml_accel].revents = 0;
#ifdef ENABLE_LIGHT_SENSOR
mSensors[aml_light] = new LightSensor();
mPollFds[aml_light].fd = mSensors[aml_light]->getFd();
mPollFds[aml_light].events = POLLIN;
mPollFds[aml_light].revents = 0;
#endif
}
{
public:
DECLARE_META_INTERFACE(SensorServer);
virtual Vector<Sensor> getSensorList() = 0;
virtual sp<ISensorEventConnection> createSensorEventConnection() = 0;
};
{"nativeClassInit", "()V", (void*)nativeClassInit },
{"sensors_module_init","()I", (void*)sensors_module_init },
{"sensors_module_get_next_sensor","(Landroid/hardware/Sensor;I)I", (void*)sensors_module_get_next_sensor },
{"sensors_create_queue", "()I", (void*)sensors_create_queue },
{"sensors_destroy_queue", "(I)V", (void*)sensors_destroy_queue },
{"sensors_enable_sensor", "(ILjava/lang/String;II)Z", (void*)sensors_enable_sensor },
{"sensors_data_poll", "(I[F[I[J)I", (void*)sensors_data_poll },
};
{
sp<SensorEventQueue> queue;
Mutex::Autolock _l(mLock);
while (assertStateLocked() == NO_ERROR) {
sp<ISensorEventConnection> connection =
mSensorServer->createSensorEventConnection();
if (connection == NULL) {
// SensorService just died.
LOGE("createEventQueue: connection is NULL. SensorService died.");
continue;
}
queue = new SensorEventQueue(connection);
break;
}
return queue;
}
2、实现SensorEvenetListener。
private SensorEventListener mListener = new SensorEventListener() {
public void onSensorChanged(SensorEvent event) {
... ...
... ...
}
}
public void onAccuracyChanged(Sensor sensor, int accuracy) {
// TODO Auto-generated method stub
}
};
3、向系统注册SensorEventListener。一般在resume中进行注册。
sensormanager= (SensorManager) getSystemService(Context.SENSOR_SERVICE);
mSensor = (sensormanager.getSensorList(sensor)).get(0);
sensormanager.registerListener(mListener, mSensor,SensorManager.SENSOR_DELAY_NORMAL);
用完之后,记得注销,一般在onStop的时候注销。
sensormanager.unregisterListener(mListener);
这样就可以用Sensor了,当sensor的数据发生变化时,就会传过来。
- android系统之sensor学习
- android系统之sensor学习
- android系统之sensor学习
- android系统之sensor学习
- Android学习之Sensor
- Android系统之G-sensor
- Android之Sensor 简介
- Android之Sensor 简介
- Android之sensor 传感器
- Android之Sensor 简介
- Android之Sensor 使用方法
- Android之Sensor 简介
- android系统sensor代码路径
- Android Sensor传感器系统架构
- Android系统移植与调试之------->深入理解Android Sensor系统 (4.0)
- Android系统移植与调试之------->Android Sensor传感器系统架构初探
- Android之G-sensor驱动
- android sensor之重力小球
- 光线投射算法与光线跟踪算法
- C语言 文件操作 结构体与文件 fgetc fputc fread fwrite
- 性能测试书评综合帖
- 教五年内买车买房——理财篇
- OPENCV 从RGB空间转换到HSI空间
- android系统之sensor学习
- Android 中的 ContentResolver
- 批量安装windows
- 杭电Hd 2037 今年暑假不AC
- soj 1305. Who’s Winner?
- OPENCV 读取摄像头文件,转换到不同空间中
- UITableView self-study
- 谈ui文件的用法
- [qtree4]坑爹啊!!!!(Update)