summaryrefslogtreecommitdiffstats
path: root/libsensors
diff options
context:
space:
mode:
authorKyle Repinski <repinski23@gmail.com>2014-07-04 16:03:02 -0500
committerZiyan <jaraidaniel@gmail.com>2014-12-13 00:39:24 +0100
commitca2bb8fc30fc6e4b5765d4da01e8c3cafc3b0095 (patch)
tree9a71c5a06c4688c99a80fdbc11908ed365340f26 /libsensors
parentccf65b4db704992acd3f2dca771a2cb2c2500410 (diff)
downloaddevice_samsung_tuna-ca2bb8fc30fc6e4b5765d4da01e8c3cafc3b0095.tar.gz
device_samsung_tuna-ca2bb8fc30fc6e4b5765d4da01e8c3cafc3b0095.tar.bz2
device_samsung_tuna-ca2bb8fc30fc6e4b5765d4da01e8c3cafc3b0095.zip
tuna: Add ambient temperature sensor.
This leverages the BMP180's ability to sense the temperature. Requires kernel change, but there are no adverse side-effects without the kernel change. Change-Id: Ibe2228d0ab30775556acb0a034f7f0904ed1b0b7 Signed-off-by: Kyle Repinski <repinski23@gmail.com> Conflicts: libsensors/sensors.cpp
Diffstat (limited to 'libsensors')
-rw-r--r--libsensors/Android.mk3
-rw-r--r--libsensors/TemperatureSensor.cpp41
-rw-r--r--libsensors/TemperatureSensor.h42
-rw-r--r--libsensors/sensors.cpp19
-rw-r--r--libsensors/sensors.h1
5 files changed, 104 insertions, 2 deletions
diff --git a/libsensors/Android.mk b/libsensors/Android.mk
index 8be82f2..fe65a91 100644
--- a/libsensors/Android.mk
+++ b/libsensors/Android.mk
@@ -33,7 +33,8 @@ LOCAL_SRC_FILES := \
LightSensor.cpp \
ProximitySensor.cpp \
PressureSensor.cpp \
- SamsungSensorBase.cpp
+ SamsungSensorBase.cpp \
+ TemperatureSensor.cpp
LOCAL_SHARED_LIBRARIES := libinvensense_hal liblog libcutils libutils libdl
diff --git a/libsensors/TemperatureSensor.cpp b/libsensors/TemperatureSensor.cpp
new file mode 100644
index 0000000..74a6cd5
--- /dev/null
+++ b/libsensors/TemperatureSensor.cpp
@@ -0,0 +1,41 @@
+/*
+ * Copyright (C) 2011 Samsung
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <fcntl.h>
+#include <errno.h>
+#include <math.h>
+#include <poll.h>
+#include <unistd.h>
+#include <dirent.h>
+#include <sys/select.h>
+#include <cutils/log.h>
+#include <pthread.h>
+
+#include "TemperatureSensor.h"
+
+#define TEMPERATURE_CELCIUS (1.0f/10.0f)
+
+TemperatureSensor::TemperatureSensor()
+ : SamsungSensorBase(NULL, "barometer", ABS_MISC)
+{
+ mPendingEvent.sensor = ID_T;
+ mPendingEvent.type = SENSOR_TYPE_AMBIENT_TEMPERATURE;
+}
+
+bool TemperatureSensor::handleEvent(input_event const *event) {
+ mPendingEvent.temperature = event->value * TEMPERATURE_CELCIUS;
+ return true;
+}
diff --git a/libsensors/TemperatureSensor.h b/libsensors/TemperatureSensor.h
new file mode 100644
index 0000000..2fe23e1
--- /dev/null
+++ b/libsensors/TemperatureSensor.h
@@ -0,0 +1,42 @@
+/*
+ * Copyright (C) 2011 Samsung
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef ANDROID_TEMPERATURE_SENSOR_H
+#define ANDROID_TEMPERATURE_SENSOR_H
+
+#include <stdint.h>
+#include <errno.h>
+#include <sys/cdefs.h>
+#include <sys/types.h>
+
+#include "sensors.h"
+#include "SamsungSensorBase.h"
+#include "InputEventReader.h"
+
+/*****************************************************************************/
+
+struct input_event;
+
+class TemperatureSensor:public SamsungSensorBase {
+ virtual bool handleEvent(input_event const * event);
+
+public:
+ TemperatureSensor();
+};
+
+/*****************************************************************************/
+
+#endif /* ANDROID_TEMPERATURE_SENSOR_H */
diff --git a/libsensors/sensors.cpp b/libsensors/sensors.cpp
index c0ad385..0065653 100644
--- a/libsensors/sensors.cpp
+++ b/libsensors/sensors.cpp
@@ -39,6 +39,7 @@
#include "LightSensor.h"
#include "ProximitySensor.h"
#include "PressureSensor.h"
+#include "TemperatureSensor.h"
/*****************************************************************************/
@@ -57,6 +58,7 @@
#define SENSORS_LIGHT (1<<ID_L)
#define SENSORS_PROXIMITY (1<<ID_P)
#define SENSORS_PRESSURE (1<<ID_PR)
+#define SENSORS_TEMPERATURE (1<<ID_T)
#define SENSORS_ROTATION_VECTOR_HANDLE (ID_RV)
#define SENSORS_LINEAR_ACCEL_HANDLE (ID_LA)
@@ -68,6 +70,7 @@
#define SENSORS_LIGHT_HANDLE (ID_L)
#define SENSORS_PROXIMITY_HANDLE (ID_P)
#define SENSORS_PRESSURE_HANDLE (ID_PR)
+#define SENSORS_TEMPERATURE_HANDLE (ID_T)
#define AKM_FTRACE 0
#define AKM_DEBUG 0
#define AKM_DATA 0
@@ -75,7 +78,7 @@
/*****************************************************************************/
/* The SENSORS Module */
-#define LOCAL_SENSORS (3)
+#define LOCAL_SENSORS (4)
static struct sensor_t sSensorList[LOCAL_SENSORS + MPLSensor::numSensors] = {
{ "GP2A Light sensor",
"Sharp",
@@ -95,6 +98,12 @@ static struct sensor_t sSensorList[LOCAL_SENSORS + MPLSensor::numSensors] = {
SENSOR_TYPE_PRESSURE, 1100.0f, 0.01f, 0.67f, 20000, 0, 0, 0, 0, 20000,
SENSOR_FLAG_CONTINUOUS_MODE,
{ } },
+ { "BMP180 Temperature sensor",
+ "Bosch",
+ 1, SENSORS_TEMPERATURE_HANDLE,
+ SENSOR_TYPE_AMBIENT_TEMPERATURE, 850.0f, 0.1f, 0.67f, 20000, 0, 0, 0, 0, 20000,
+ SENSOR_FLAG_CONTINUOUS_MODE,
+ { } }
};
static int numSensors = LOCAL_SENSORS;
@@ -145,6 +154,7 @@ private:
light,
proximity,
pressure,
+ temperature,
numSensorDrivers, // wake pipe goes here
mpl_power, //special handle for MPL pm interaction
numFds,
@@ -172,6 +182,8 @@ private:
return proximity;
case ID_PR:
return pressure;
+ case ID_T:
+ return temperature;
}
return -EINVAL;
}
@@ -219,6 +231,11 @@ sensors_poll_context_t::sensors_poll_context_t()
mPollFds[pressure].events = POLLIN;
mPollFds[pressure].revents = 0;
+ mSensors[temperature] = new TemperatureSensor();
+ mPollFds[temperature].fd = mSensors[temperature]->getFd();
+ mPollFds[temperature].events = POLLIN;
+ mPollFds[temperature].revents = 0;
+
int wakeFds[2];
int result = pipe(wakeFds);
ALOGE_IF(result<0, "error creating wake pipe (%s)", strerror(errno));
diff --git a/libsensors/sensors.h b/libsensors/sensors.h
index a7e077d..18517f9 100644
--- a/libsensors/sensors.h
+++ b/libsensors/sensors.h
@@ -37,6 +37,7 @@ __BEGIN_DECLS
#define ID_L (ID_SAMSUNG_BASE)
#define ID_P (ID_L + 1)
#define ID_PR (ID_P + 1)
+#define ID_T (ID_PR + 1)
/*****************************************************************************/