summaryrefslogtreecommitdiff
path: root/sensors-service/src/acceleration.c
diff options
context:
space:
mode:
Diffstat (limited to 'sensors-service/src/acceleration.c')
-rw-r--r--sensors-service/src/acceleration.c108
1 files changed, 58 insertions, 50 deletions
diff --git a/sensors-service/src/acceleration.c b/sensors-service/src/acceleration.c
index 6e501e0..1ecc7b2 100644
--- a/sensors-service/src/acceleration.c
+++ b/sensors-service/src/acceleration.c
@@ -20,11 +20,14 @@
#include "acceleration.h"
#include "sns-meta-data.h"
-AccelerationCallback cbAcceleration = 0;
-TAccelerationData gAccelerationData;
+static pthread_mutex_t mutexCb = PTHREAD_MUTEX_INITIALIZER; //protects the callbacks
+static pthread_mutex_t mutexData = PTHREAD_MUTEX_INITIALIZER; //protects the data
+
+static volatile AccelerationCallback cbAcceleration = 0;
+static TAccelerationData gAccelerationData;
TAccelerationConfiguration gAccelerationConfiguration;
-bool snsAccelerationInit()
+bool iAccelerationInit()
{
pthread_mutex_lock(&mutexCb);
cbAcceleration = 0;
@@ -55,7 +58,7 @@ bool snsAccelerationInit()
return true;
}
-bool snsAccelerationDestroy()
+bool iAccelerationDestroy()
{
pthread_mutex_lock(&mutexCb);
cbAcceleration = 0;
@@ -66,85 +69,90 @@ bool snsAccelerationDestroy()
bool snsAccelerationGetAccelerationData(TAccelerationData * accelerationData)
{
- if(!accelerationData)
+ bool retval = false;
+ if(accelerationData)
{
- return false;
+ pthread_mutex_lock(&mutexData);
+ *accelerationData = gAccelerationData;
+ pthread_mutex_unlock(&mutexData);
+ retval = true;
}
-
- pthread_mutex_lock(&mutexData);
- *accelerationData = gAccelerationData;
- pthread_mutex_unlock(&mutexData);
-
- return true;
+ return retval;
}
bool snsAccelerationRegisterCallback(AccelerationCallback callback)
{
- if(!callback)
- {
- return false;
- }
+ bool retval = false;
- //printf("snsAccelerationRegisterCallback\n");
- pthread_mutex_lock(&mutexCb);
- if(cbAcceleration != 0)
- {
- //already registered
+ //only if valid callback and not already registered
+ if(callback && !cbAcceleration)
+ {
+ pthread_mutex_lock(&mutexCb);
+ cbAcceleration = callback;
pthread_mutex_unlock(&mutexCb);
- return false;
+ retval = true;
}
- cbAcceleration = callback;
- pthread_mutex_unlock(&mutexCb);
-
- return true;
+ return retval;
}
bool snsAccelerationDeregisterCallback(AccelerationCallback callback)
{
- if(!callback)
- {
- return false;
- }
+ bool retval = false;
- //printf("snsAccelerationDeregisterCallback\n");
- pthread_mutex_lock(&mutexCb);
- if(cbAcceleration == callback)
+ if((cbAcceleration == callback) && callback)
{
+ pthread_mutex_lock(&mutexCb);
cbAcceleration = 0;
+ pthread_mutex_unlock(&mutexCb);
+ retval = true;
}
- pthread_mutex_unlock(&mutexCb);
- return true;
+ return retval;
}
bool snsAccelerationGetMetaData(TSensorMetaData *data)
{
- if(!data)
+ bool retval = false;
+
+ if(data)
{
- return false;
+ pthread_mutex_lock(&mutexData);
+ *data = gSensorsMetaData[3];
+ pthread_mutex_unlock(&mutexData);
+ retval = true;
}
-
- pthread_mutex_lock(&mutexData);
- *data = gSensorsMetaData[3];
- pthread_mutex_unlock(&mutexData);
- return true;
+ return retval;
}
bool snsAccelerationGetAccelerationConfiguration(TAccelerationConfiguration* config)
{
- if(!config)
+ bool retval = false;
+ if(config)
{
- return false;
+ pthread_mutex_lock(&mutexData);
+ *config = gAccelerationConfiguration;
+ pthread_mutex_unlock(&mutexData);
+ retval = true;
}
- pthread_mutex_lock(&mutexData);
- *config = gAccelerationConfiguration;
- pthread_mutex_unlock(&mutexData);
-
- return true;
+ return retval;
}
-
+void updateAccelerationData(const TAccelerationData accelerationData[], uint16_t numElements)
+{
+ if (accelerationData != NULL && numElements > 0)
+ {
+ pthread_mutex_lock(&mutexData);
+ gAccelerationData = accelerationData[numElements-1];
+ pthread_mutex_unlock(&mutexData);
+ pthread_mutex_lock(&mutexCb);
+ if (cbAcceleration)
+ {
+ cbAcceleration(accelerationData, numElements);
+ }
+ pthread_mutex_unlock(&mutexCb);
+ }
+}