inline int Reaching::TargetReached(){ cart_vec_t& dist; float d; v_sub(target,pos_cart,dist); d = v_length(dist); return d<tol && HasStopped(); }
ActivityAttributeType Activity::QueryActivityAttribute(const std::string& attributeName) const { ActivityAttributeType result; result.startTime = 0; result.endTime = 0; result.unitSystem = UnitMgr::GetUnitSystem(); if (attributeName.compare(ACTIVITY_ATTRIBUTE_START_TIME) == 0) { result.value.intVal = m_startTimeSecs; result.valueType = TYPE_INTEGER; result.measureType = MEASURE_TIME; result.startTime = m_startTimeSecs; result.endTime = 0; result.valid = m_startTimeSecs > 0; } else if (attributeName.compare(ACTIVITY_ATTRIBUTE_END_TIME) == 0) { result.value.intVal = m_endTimeSecs; result.valueType = TYPE_INTEGER; result.measureType = MEASURE_TIME; result.startTime = m_startTimeSecs; result.endTime = m_endTimeSecs; result.valid = m_endTimeSecs > 0; } else if (attributeName.compare(ACTIVITY_ATTRIBUTE_HEART_RATE) == 0) { uint64_t timeSinceLastUpdate = 0; if (!HasStopped()) timeSinceLastUpdate = CurrentTimeInMs() - m_lastHeartRateUpdateTime; SegmentType hr = CurrentHeartRate(); result.value.doubleVal = hr.value.doubleVal; result.valueType = TYPE_DOUBLE; result.measureType = MEASURE_BPM; result.startTime = hr.startTime; result.endTime = hr.endTime; result.valid = (m_numHeartRateReadings > 0) && (timeSinceLastUpdate < 3000); } else if (attributeName.compare(ACTIVITY_ATTRIBUTE_AVG_HEART_RATE) == 0) { result.value.doubleVal = AverageHeartRate(); result.valueType = TYPE_DOUBLE; result.measureType = MEASURE_BPM; result.valid = m_numHeartRateReadings > 0; } else if (attributeName.compare(ACTIVITY_ATTRIBUTE_MAX_HEART_RATE) == 0) { SegmentType hr = MaxHeartRate(); result.value.doubleVal = hr.value.doubleVal; result.valueType = TYPE_DOUBLE; result.measureType = MEASURE_BPM; result.startTime = hr.startTime; result.endTime = hr.endTime; result.valid = m_numHeartRateReadings > 0; } else if (attributeName.compare(ACTIVITY_ATTRIBUTE_HEART_RATE_ZONE) == 0) { result.value.doubleVal = HeartRateZone(); result.valueType = TYPE_DOUBLE; result.measureType = MEASURE_PERCENTAGE; result.valid = m_numHeartRateReadings > 0; } else if (attributeName.compare(ACTIVITY_ATTRIBUTE_ELAPSED_TIME) == 0) { result.value.timeVal = ElapsedTimeInSeconds(); result.valueType = TYPE_TIME; result.measureType = MEASURE_TIME; result.valid = true; } else if (attributeName.compare(ACTIVITY_ATTRIBUTE_CALORIES_BURNED) == 0) { result.value.doubleVal = CaloriesBurned(); result.valueType = TYPE_DOUBLE; result.measureType = MEASURE_CALORIES; result.valid = true; } else if (attributeName.compare(ACTIVITY_ATTRIBUTE_X) == 0) { try { if (m_lastAccelReading.reading.count(AXIS_NAME_X) > 0) { result.value.doubleVal = m_lastAccelReading.reading.at(AXIS_NAME_X); result.valueType = TYPE_DOUBLE; result.measureType = MEASURE_G; result.valid = true; } else { result.valid = false; } } catch (...) { result.valid = false; } } else if (attributeName.compare(ACTIVITY_ATTRIBUTE_Y) == 0) { try { if (m_lastAccelReading.reading.count(AXIS_NAME_Y) > 0) { result.value.doubleVal = m_lastAccelReading.reading.at(AXIS_NAME_Y); result.valueType = TYPE_DOUBLE; result.measureType = MEASURE_G; result.valid = true; } else { result.valid = false; } } catch (...) { result.valid = false; } } else if (attributeName.compare(ACTIVITY_ATTRIBUTE_Z) == 0) { try { if (m_lastAccelReading.reading.count(AXIS_NAME_Z) > 0) { result.value.doubleVal = m_lastAccelReading.reading.at(AXIS_NAME_Z); result.valueType = TYPE_DOUBLE; result.measureType = MEASURE_G; result.valid = true; } else { result.valid = false; } } catch (...) { result.valid = false; } } else if (attributeName.compare(ACTIVITY_ATTRIBUTE_ADDITIONAL_WEIGHT) == 0) { result.value.doubleVal = AdditionalWeightUsedKg(); result.valueType = TYPE_DOUBLE; result.measureType = MEASURE_WEIGHT; result.valid = true; } else { result.valueType = TYPE_NOT_SET; result.valid = false; } return result; }