OSDN Git Service

STPK-1429 Initial version of iio-sensors-hal component
[android-x86/hardware-intel-libsensors.git] / description.c
1 /*
2  * Copyright (C) 2014 Intel Corporation.
3  */
4
5 #include <utils/Log.h>
6 #include <hardware/sensors.h>
7 #include "enumeration.h"
8
9 /*
10  * This information should be provided on a sensor basis through a configuration
11  * file, or we should build a catalog of known sensors.
12  */
13
14 #define IIO_SENSOR_HAL_VERSION  1
15
16
17 char* sensor_get_name (int s)
18 {
19         if (sensor_info[s].friendly_name[0] == '\0') {
20
21                 /* If we got a iio device name from sysfs, use it */
22                 if (sensor_info[s].internal_name[0])
23                         sprintf(sensor_info[s].friendly_name, "S%d-%s", s,
24                                 sensor_info[s].internal_name);
25                 else
26                         sprintf(sensor_info[s].friendly_name, "S%d", s);
27         }
28
29         return sensor_info[s].friendly_name;
30 }
31
32
33 char* sensor_get_vendor (int s)
34 {
35         if (sensor_info[s].vendor_name[0])
36                 return sensor_info[s].vendor_name;
37
38         return "<unknown>";
39 }
40
41
42 int sensor_get_version (int handle)
43 {
44         return IIO_SENSOR_HAL_VERSION;
45 }
46
47
48 float sensor_get_max_range (int s)
49 {
50         int catalog_index;
51         int sensor_type;
52
53         if (sensor_info[s].max_range != 0.0)
54                 return sensor_info[s].max_range;
55
56         /* Try returning a sensible value given the sensor type */
57
58         /* We should cap returned samples accordingly... */
59
60         catalog_index = sensor_info[s].catalog_index;
61         sensor_type = sensor_catalog[catalog_index].type;
62
63         switch (sensor_type) {
64                 case SENSOR_TYPE_ACCELEROMETER:         /* m/s^2        */
65                         return 50;
66
67                 case SENSOR_TYPE_MAGNETIC_FIELD:        /* micro-tesla  */
68                         return 500;
69
70                 case SENSOR_TYPE_ORIENTATION:           /* degrees      */
71                         return 360;
72
73                 case SENSOR_TYPE_GYROSCOPE:             /* radians/s    */
74                         return 10;
75
76                 case SENSOR_TYPE_LIGHT:                 /* SI lux units */
77                         return 50000;
78
79                 case SENSOR_TYPE_AMBIENT_TEMPERATURE:   /* °C          */
80                 case SENSOR_TYPE_TEMPERATURE:           /* °C          */
81                 case SENSOR_TYPE_PROXIMITY:             /* centimeters  */
82                 case SENSOR_TYPE_PRESSURE:              /* hecto-pascal */
83                 case SENSOR_TYPE_RELATIVE_HUMIDITY:     /* percent */
84                         return 100;
85
86                 default:
87                         return 0.0;
88                 }
89 }
90
91
92 float sensor_get_resolution (int s)
93 {
94         return sensor_info[s].resolution;
95 }
96
97
98 float sensor_get_power (int s)
99 {
100         /* mA used while sensor is in use ; not sure about volts :) */
101         return sensor_info[s].power;
102 }