android sensors(2)_hal测试程序 源码分析

hardwarelibhardwaretestsnusensorsNusensors.cpp

源码分析

  • load HAL so
  • poll所有可用的sensors数据
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71

int (int argc, char** argv)
// load对应so
hw_get_module(SENSORS_HARDWARE_MODULE_ID, (hw_module_t const**)&module);

sensors_open(&module->common, &device);
return module->methods->open(module, SENSORS_HARDWARE_POLL, (struct hw_device_t**)device);
count = module->get_sensors_list(module, &list); // get_list,放入到list中
// 0 -> 1
for (int i=0 ; i<count ; i++)
device->activate(device, list[i].handle, 0);
for (int i=0 ; i<count ; i++) {
device->activate(device, list[i].handle, 1);
device->setDelay(device, list[i].handle, ms2ns(10));
}

/*
* 1:poll获得数据
* 2:数据逐个显示
*/
do {
int n = device->poll(device, buffer, numEvents); // 数据放入buffer

for (int i=0 ; i<n ; i++) {
const sensors_event_t& data = buffer[i];

switch(data.type) {
case SENSOR_TYPE_ACCELEROMETER:
case SENSOR_TYPE_MAGNETIC_FIELD:
case SENSOR_TYPE_ORIENTATION:
case SENSOR_TYPE_GYROSCOPE:
case SENSOR_TYPE_GRAVITY:
case SENSOR_TYPE_LINEAR_ACCELERATION:
case SENSOR_TYPE_ROTATION_VECTOR:
printf("sensor=%s, time=%lld, value=<%5.1f,%5.1f,%5.1f>n",
getSensorName(data.type),
data.timestamp,
data.data[0],
data.data[1],
data.data[2]);
break;

case SENSOR_TYPE_LIGHT:
case SENSOR_TYPE_PRESSURE:
case SENSOR_TYPE_TEMPERATURE:
case SENSOR_TYPE_PROXIMITY:
case SENSOR_TYPE_RELATIVE_HUMIDITY:
case SENSOR_TYPE_AMBIENT_TEMPERATURE:
printf("sensor=%s, time=%lld, value=%fn",
getSensorName(data.type),
data.timestamp,
data.data[0]);
break;

default:
printf("sensor=%d, time=%lld, value=<%f,%f,%f, ...>n",
data.type,
data.timestamp,
data.data[0],
data.data[1],
data.data[2]);
break;
}
}
} while (1); // fix that

// close
for (int i=0 ; i<count ; i++)
device->activate(device, list[i].handle, 0);
sensors_close(device);
return device->common.close(&device->common);