diff options
-rw-r--r-- | libsensors/SensorBase.cpp | 40 |
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; } |