diff options
author | dragonprevost <dragon@dkp.io> | 2018-10-23 13:38:54 -0700 |
---|---|---|
committer | dragonprevost <dragon@dkp.io> | 2018-10-23 13:38:54 -0700 |
commit | 7dbefb9120799d9530be69072175ad4a4ac16ed3 (patch) | |
tree | faad5bd1a4f4837abde05fbca343a333dfa5e7c2 /motionMonitor/motionMonitor.c | |
parent | 2266c66716429ce6012577609ae601f8a8101308 (diff) |
Added check for array length when returning impact arrays.
Diffstat (limited to 'motionMonitor/motionMonitor.c')
-rw-r--r-- | motionMonitor/motionMonitor.c | 36 |
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); } |