summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordragonprevost <dragon@dkp.io>2018-10-23 13:38:54 -0700
committerdragonprevost <dragon@dkp.io>2018-10-23 13:38:54 -0700
commit7dbefb9120799d9530be69072175ad4a4ac16ed3 (patch)
treefaad5bd1a4f4837abde05fbca343a333dfa5e7c2
parent2266c66716429ce6012577609ae601f8a8101308 (diff)
Added check for array length when returning impact arrays.
-rw-r--r--motionMonitor/motionMonitor.c36
1 files changed, 25 insertions, 11 deletions
diff --git a/motionMonitor/motionMonitor.c b/motionMonitor/motionMonitor.c
index 9344c35..59f26e6 100644
--- a/motionMonitor/motionMonitor.c
+++ b/motionMonitor/motionMonitor.c
@@ -76,14 +76,22 @@ done:
return r;
}
-void recordImpact(double* xAcc, double* yAcc, double* zAcc){
+le_result_t recordImpact(double* xAcc, double* yAcc, double* zAcc){
+ if(
+ totalImpacts > sizeof(xAccImpact) ||
+ totalImpacts > sizeof(yAccImpact) ||
+ totalImpacts > sizeof(zAccImpact)
+ )
+ return LE_OUT_OF_RANGE;
+
timestamps[totalImpacts] = GetCurrentTimestamp();
xAccImpact[totalImpacts] = *xAcc;
yAccImpact[totalImpacts] = *yAcc;
zAccImpact[totalImpacts] = *zAcc;
totalImpacts++;
-
LE_INFO("New Impact, totalImpacts: %d", totalImpacts);
+
+ return LE_OK;
}
le_result_t brnkl_motion_getSuddenImpact(double* xAcc, size_t *xSize,
@@ -94,14 +102,13 @@ le_result_t brnkl_motion_getSuddenImpact(double* xAcc, size_t *xSize,
LE_INFO("No Sudden Impacts to Report");
//check
- if(
- totalImpacts > sizeof(xAccImpact) ||
- totalImpacts > sizeof(yAccImpact) ||
- totalImpacts > sizeof(zAccImpact)
- )
- return LE_OUT_OF_RANGE;
-
- *xSize = *ySize = *zSize = totalImpacts;
+
+ if(
+ totalImpacts < *xSize ||
+ totalImpacts < *ySize ||
+ totalImpacts < *zSize
+ )
+ return LE_OUT_OF_RANGE;
for(int i = 0; i < totalImpacts; i++){
xAcc[i] = xAccImpact[i];
@@ -109,6 +116,9 @@ le_result_t brnkl_motion_getSuddenImpact(double* xAcc, size_t *xSize,
zAcc[i] = zAccImpact[i];
}
+ *xSize = *ySize = *zSize = totalImpacts;
+
+
totalImpacts = 0;
return LE_OK;
@@ -120,6 +130,7 @@ le_result_t brnkl_motion_getSuddenImpact(double* xAcc, size_t *xSize,
*/
void *impactMonitor(void * ptr){
double x, y, z;
+ le_result_t r = LE_OK;
for(;;){
brnkl_motion_getCurrentAcceleration(&x, &y, &z);
@@ -128,9 +139,12 @@ void *impactMonitor(void * ptr){
if(impactMagnitude > impactThreshold){
//3. add x, y, z to impact array
pthread_mutex_lock(&impactMutex);
- recordImpact(&x, &y, &z);
+ r = recordImpact(&x, &y, &z);
pthread_mutex_unlock(&impactMutex);
}
+ if(r != LE_OK)
+ LE_ERROR("Impact Not Recorded");
+
usleep(100*1000);
}