summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--libsensors/SensorBase.cpp40
1 files changed, 16 insertions, 24 deletions
diff --git a/libsensors/SensorBase.cpp b/libsensors/SensorBase.cpp
index 9c27184..1a25c96 100644
--- a/libsensors/SensorBase.cpp
+++ b/libsensors/SensorBase.cpp
@@ -21,6 +21,7 @@
#include <unistd.h>
#include <dirent.h>
#include <sys/select.h>
+#include <pthread.h>
#include <cutils/log.h>
@@ -30,6 +31,8 @@
/*****************************************************************************/
+static pthread_mutex_t sspEnableLock = PTHREAD_MUTEX_INITIALIZER;
+
SensorBase::SensorBase(
const char* dev_name,
const char* data_name)
@@ -141,34 +144,23 @@ int SensorBase::flush(int handle)
int SensorBase::sspEnable(const char* sensorname, int sensorvalue, int en)
{
FILE* sspfile;
- int oldvalue = 0;
- int reset = 0;
- int newvalue;
- int fd;
+ int sspValue = 0;
+
+ pthread_mutex_lock(&sspEnableLock);
sspfile = fopen(SSP_DEVICE_ENABLE, "r+");
- fscanf(sspfile, "%d", &oldvalue);
+ fscanf(sspfile, "%d", &sspValue);
fclose(sspfile);
-//Accel sensor is first on and last off, if we are disabling it
-// assume the screen is off, disable all sensors and zero everything out
-// to keep enable file in sync.
- if(sensorvalue == SSP_ACCEL && !en) {
- //ALOGD("SensorBase: Resetting sensors");
- for(int i; i < 6; i++){
- newvalue = oldvalue - ssp_sensors[i];
- //ALOGD("SensorBase: newvalue: %i ",newvalue);
- sspWrite(newvalue);
- }
- sspWrite('\0');
- return 0;
- } else if(en) {
- newvalue = oldvalue + sensorvalue;
- } else {
- newvalue = oldvalue - sensorvalue;
- }
- //ALOGI("%s: name: %s sensor: %i old value: %i new value: %i ", __func__, sensorname, sensorvalue, oldvalue, newvalue);
- sspWrite(newvalue);
+ if (en)
+ sspValue |= sensorvalue;
+ else
+ sspValue &= ~sensorvalue;
+
+ sspWrite(sspValue);
+
+ pthread_mutex_unlock(&sspEnableLock);
+
return 0;
}