From 0e4560d021cfcfb4bb4477a40740c1a424a2750b Mon Sep 17 00:00:00 2001 From: Adelin Dobre Date: Thu, 1 Nov 2018 18:47:39 +0200 Subject: [PATCH] EHR: Add string based constructor Signed-off-by: Adelin Dobre --- src/ehr/ehr.cxx | 27 ++++++++++++++++++++++----- src/ehr/ehr.hpp | 15 ++++++++++++--- 2 files changed, 34 insertions(+), 8 deletions(-) diff --git a/src/ehr/ehr.cxx b/src/ehr/ehr.cxx index bdab8a98..a6256909 100644 --- a/src/ehr/ehr.cxx +++ b/src/ehr/ehr.cxx @@ -46,6 +46,23 @@ EHR::EHR(int pin) m_beatCounter = 0; } +EHR::EHR(std::string initStr) : mraaIo(initStr) +{ + mraa_io_descriptor* descs = mraaIo.getMraaDescriptors(); + + if(!descs->gpios) { + throw std::invalid_argument(std::string(__FUNCTION__) + + ": mraa_gpio_init() failed, invalid pin?"); + } else { + m_gpio = descs->gpios[0]; + } + + mraa_gpio_dir(m_gpio, MRAA_GPIO_IN); + + initClock(); + m_beatCounter = 0; +} + EHR::~EHR() { mraa_gpio_close(m_gpio); @@ -65,12 +82,12 @@ uint32_t EHR::getMillis() gettimeofday(&now, NULL); // compute the delta since m_startTime - if( (elapsed.tv_usec = now.tv_usec - m_startTime.tv_usec) < 0 ) + if( (elapsed.tv_usec = now.tv_usec - m_startTime.tv_usec) < 0 ) { elapsed.tv_usec += 1000000; elapsed.tv_sec = now.tv_sec - m_startTime.tv_sec - 1; - } - else + } + else { elapsed.tv_sec = now.tv_sec - m_startTime.tv_sec; } @@ -92,7 +109,7 @@ void EHR::clearBeatCounter() void EHR::startBeatCounter() { // install our interrupt handler - mraa_gpio_isr(m_gpio, MRAA_GPIO_EDGE_RISING, + mraa_gpio_isr(m_gpio, MRAA_GPIO_EDGE_RISING, &beatISR, this); } @@ -117,7 +134,7 @@ int EHR::heartRate() { uint32_t millis = getMillis(); uint32_t beats = beatCounter(); - + float heartRate = 0; // wait at least 5 seconds before attempting to compute the // heart rate diff --git a/src/ehr/ehr.hpp b/src/ehr/ehr.hpp index e83cded9..9987e64e 100644 --- a/src/ehr/ehr.hpp +++ b/src/ehr/ehr.hpp @@ -27,6 +27,7 @@ #include #include #include +#include namespace upm { /** @@ -46,9 +47,9 @@ namespace upm { * @brief API for the Ear-clip Heart Rate Sensor * * UPM module for the ear-clip heart rate sensor. It is used to measure your - * heart rate. + * heart rate. * - * @image html ehr.jpg + * @image html ehr.jpg * @snippet ehr.cxx Interesting */ class EHR { @@ -59,6 +60,13 @@ namespace upm { * @param pin Digital pin to use */ EHR(int pin); + /** + * Instantiates EHR Heart Rate sensor based on a given string. + * + * @param initStr string containing specific information for EHR initialization. + */ + EHR(std::string initStr); + /** * EHR destructor */ @@ -116,10 +124,11 @@ namespace upm { * */ static void beatISR(void *ctx); - + volatile uint32_t m_beatCounter; struct timeval m_startTime; mraa_gpio_context m_gpio; + mraa::MraaIo mraaIo; }; }