summaryrefslogtreecommitdiffstats
path: root/libsensors/sensors.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'libsensors/sensors.cpp')
-rw-r--r--libsensors/sensors.cpp49
1 files changed, 46 insertions, 3 deletions
diff --git a/libsensors/sensors.cpp b/libsensors/sensors.cpp
index f9dd0ef..ab2c571 100644
--- a/libsensors/sensors.cpp
+++ b/libsensors/sensors.cpp
@@ -35,6 +35,10 @@
#include "sensors.h"
#include "MPLSensor.h"
+#include "LightSensor.h"
+#include "ProximitySensor.h"
+#include "PressureSensor.h"
+
/*****************************************************************************/
@@ -49,6 +53,9 @@
#define SENSORS_ACCELERATION (1<<ID_A)
#define SENSORS_MAGNETIC_FIELD (1<<ID_M)
#define SENSORS_ORIENTATION (1<<ID_O)
+#define SENSORS_LIGHT (1<<ID_L)
+#define SENSORS_PROXIMITY (1<<ID_P)
+#define SENSORS_PRESSURE (1<<ID_PR)
#define SENSORS_ROTATION_VECTOR_HANDLE (ID_RV)
#define SENSORS_LINEAR_ACCEL_HANDLE (ID_LA)
@@ -57,7 +64,9 @@
#define SENSORS_ACCELERATION_HANDLE (ID_A)
#define SENSORS_MAGNETIC_FIELD_HANDLE (ID_M)
#define SENSORS_ORIENTATION_HANDLE (ID_O)
-
+#define SENSORS_LIGHT_HANDLE (ID_L)
+#define SENSORS_PROXIMITY_HANDLE (ID_P)
+#define SENSORS_PRESSURE_HANDLE (ID_PR)
#define AKM_FTRACE 0
#define AKM_DEBUG 0
#define AKM_DATA 0
@@ -94,8 +103,18 @@ static const struct sensor_t sSensorList[] = {
"Invensense",
1, SENSORS_ORIENTATION_HANDLE,
SENSOR_TYPE_ORIENTATION, 360.0f, 1.0f, 9.7f, 20000,{ } },
-
-
+ { "GP2A Light sensor",
+ "Sharp",
+ 1, SENSORS_LIGHT_HANDLE,
+ SENSOR_TYPE_LIGHT, 3000.0f, 1.0f, 0.75f, 0, { } },
+ { "GP2A Proximity sensor",
+ "Sharp",
+ 1, SENSORS_PROXIMITY_HANDLE,
+ SENSOR_TYPE_PROXIMITY, 5.0f, 5.0f, 0.75f, 0, { } },
+ { "BMP180 Pressure sensor",
+ "Bosch",
+ 1, SENSORS_PRESSURE_HANDLE,
+ SENSOR_TYPE_PRESSURE, 1100.0f, 0.01f, 0.67f, 20000, { } },
};
@@ -143,6 +162,9 @@ private:
mpl = 0, //all mpl entries must be consecutive and in this order
mpl_accel,
mpl_timer,
+ light,
+ proximity,
+ pressure,
numSensorDrivers, // wake pipe goes here
mpl_power, //special handle for MPL pm interaction
numFds,
@@ -164,6 +186,12 @@ private:
case ID_M:
case ID_O:
return mpl;
+ case ID_L:
+ return light;
+ case ID_P:
+ return proximity;
+ case ID_PR:
+ return pressure;
}
return -EINVAL;
}
@@ -192,6 +220,21 @@ sensors_poll_context_t::sensors_poll_context_t()
mPollFds[mpl_timer].events = POLLIN;
mPollFds[mpl_timer].revents = 0;
+ mSensors[light] = new LightSensor();
+ mPollFds[light].fd = mSensors[light]->getFd();
+ mPollFds[light].events = POLLIN;
+ mPollFds[light].revents = 0;
+
+ mSensors[proximity] = new ProximitySensor();
+ mPollFds[proximity].fd = mSensors[proximity]->getFd();
+ mPollFds[proximity].events = POLLIN;
+ mPollFds[proximity].revents = 0;
+
+ mSensors[pressure] = new PressureSensor();
+ mPollFds[pressure].fd = mSensors[pressure]->getFd();
+ mPollFds[pressure].events = POLLIN;
+ mPollFds[pressure].revents = 0;
+
int wakeFds[2];
int result = pipe(wakeFds);
LOGE_IF(result<0, "error creating wake pipe (%s)", strerror(errno));