OSDN Git Service

STPK-1429 Remove obsolete comment
[android-x86/hardware-intel-libsensors.git] / description.c
1 /*
2  * Copyright (C) 2014 Intel Corporation.
3  */
4
5 #include <stdlib.h>
6 #include <utils/Log.h>
7 #include <cutils/properties.h>
8 #include <hardware/sensors.h>
9 #include "enumeration.h"
10
11 #define IIO_SENSOR_HAL_VERSION  1
12
13
14 static int sensor_get_st_prop (int s, const char* sel, char val[MAX_NAME_SIZE])
15 {
16         char prop_name[PROP_NAME_MAX];
17         char prop_val[PROP_VALUE_MAX];
18         int i                   = sensor_info[s].catalog_index;
19         const char *prefix      = sensor_catalog[i].tag;
20
21         sprintf(prop_name, PROP_BASE, prefix, sel);
22
23         if (property_get(prop_name, prop_val, "")) {
24                 strncpy(val, prop_val, MAX_NAME_SIZE-1);
25                 val[MAX_NAME_SIZE-1] = '\0';
26                 return 0;
27         }
28
29         return -1;
30 }
31
32
33 static int sensor_get_fl_prop (int s, const char* sel, float* val)
34 {
35         char buf[MAX_NAME_SIZE];
36
37         if (sensor_get_st_prop(s, sel, buf))
38                 return -1;
39
40         *val = (float) strtod(buf, NULL);
41         return 0;
42 }
43
44
45 char* sensor_get_name (int s)
46 {
47         if (sensor_info[s].friendly_name[0] != '\0' ||
48                 !sensor_get_st_prop(s, "name", sensor_info[s].friendly_name))
49                         return sensor_info[s].friendly_name;
50
51         /* If we got a iio device name from sysfs, use it */
52         if (sensor_info[s].internal_name[0]) {
53                 snprintf(sensor_info[s].friendly_name, MAX_NAME_SIZE, "S%d-%s",
54                          s, sensor_info[s].internal_name);
55                 sensor_info[s].friendly_name[MAX_NAME_SIZE-1] = '\0';
56         } else {
57                 sprintf(sensor_info[s].friendly_name, "S%d", s);
58         }
59
60         return sensor_info[s].friendly_name;
61 }
62
63
64 char* sensor_get_vendor (int s)
65 {
66         if (sensor_info[s].vendor_name[0] ||
67                 !sensor_get_st_prop(s, "vendor", sensor_info[s].vendor_name))
68                         return sensor_info[s].vendor_name;
69
70         return "";
71 }
72
73
74 int sensor_get_version (int s)
75 {
76         return IIO_SENSOR_HAL_VERSION;
77 }
78
79
80 float sensor_get_max_range (int s)
81 {
82         int catalog_index;
83         int sensor_type;
84
85         if (sensor_info[s].max_range != 0.0 ||
86                 !sensor_get_fl_prop(s, "max_range", &sensor_info[s].max_range))
87                         return sensor_info[s].max_range;
88
89         /* Try returning a sensible value given the sensor type */
90
91         /* We should cap returned samples accordingly... */
92
93         catalog_index = sensor_info[s].catalog_index;
94         sensor_type = sensor_catalog[catalog_index].type;
95
96         switch (sensor_type) {
97                 case SENSOR_TYPE_ACCELEROMETER:         /* m/s^2        */
98                         return 50;
99
100                 case SENSOR_TYPE_MAGNETIC_FIELD:        /* micro-tesla  */
101                         return 500;
102
103                 case SENSOR_TYPE_ORIENTATION:           /* degrees      */
104                         return 360;
105
106                 case SENSOR_TYPE_GYROSCOPE:             /* radians/s    */
107                         return 10;
108
109                 case SENSOR_TYPE_LIGHT:                 /* SI lux units */
110                         return 50000;
111
112                 case SENSOR_TYPE_AMBIENT_TEMPERATURE:   /* °C          */
113                 case SENSOR_TYPE_TEMPERATURE:           /* °C          */
114                 case SENSOR_TYPE_PROXIMITY:             /* centimeters  */
115                 case SENSOR_TYPE_PRESSURE:              /* hecto-pascal */
116                 case SENSOR_TYPE_RELATIVE_HUMIDITY:     /* percent */
117                         return 100;
118
119                 default:
120                         return 0.0;
121                 }
122 }
123
124
125 float sensor_get_resolution (int s)
126 {
127         if (sensor_info[s].resolution != 0.0 ||
128                 !sensor_get_fl_prop(s, "resolution", &sensor_info[s].resolution))
129                         return sensor_info[s].resolution;
130
131         return 0;
132 }
133
134
135 float sensor_get_power (int s)
136 {
137         /* mA used while sensor is in use ; not sure about volts :) */
138         if (sensor_info[s].power != 0.0 ||
139                 !sensor_get_fl_prop(s, "power", &sensor_info[s].power))
140                         return sensor_info[s].power;
141
142         return 0;
143 }