From d00dc3e332ed151ca655979c4a133ba4a492727a Mon Sep 17 00:00:00 2001 From: Adelin Dobre Date: Wed, 11 Jul 2018 15:46:26 +0300 Subject: [PATCH] ADXL335: Add string based constructor for Accelerometer Signed-off-by: Adelin Dobre Signed-off-by: Mihai Tudor Panu --- src/ad8232/ad8232.cxx | 5 +++-- src/adxl335/adxl335.cxx | 48 +++++++++++++++++++++++++++++++++++++++++ src/adxl335/adxl335.hpp | 9 ++++++++ 3 files changed, 60 insertions(+), 2 deletions(-) diff --git a/src/ad8232/ad8232.cxx b/src/ad8232/ad8232.cxx index 08d033c2..077832fd 100644 --- a/src/ad8232/ad8232.cxx +++ b/src/ad8232/ad8232.cxx @@ -23,9 +23,10 @@ */ #include +#include + #include "upm_string_parser.hpp" #include "ad8232.hpp" -#include using namespace upm; using namespace std; @@ -63,7 +64,7 @@ AD8232::AD8232(std::string initStr) ": mraa_gpio_init() failed, invalid pin?"); } - if(!mraaIo->gpios.empty()) + if(!mraaIo->aios.empty()) { m_aioOUT = &mraaIo->aios[0]; } diff --git a/src/adxl335/adxl335.cxx b/src/adxl335/adxl335.cxx index 7b3a2429..a7ff6d2e 100644 --- a/src/adxl335/adxl335.cxx +++ b/src/adxl335/adxl335.cxx @@ -29,6 +29,7 @@ #include #include +#include "upm_string_parser.hpp" #include "adxl335.hpp" using namespace std; @@ -63,6 +64,53 @@ ADXL335::ADXL335(int pinX, int pinY, int pinZ, float aref) } } +ADXL335::ADXL335(std::string initStr) : mraaIo(initStr) +{ + m_aref = ADXL335_DEFAULT_AREF; + m_zeroX = 0.0; + m_zeroY = 0.0; + m_zeroZ = 0.0; + + mraa_io_descriptor* descs = mraaIo.getMraaDescriptors(); + + if(!descs->aios) + { + throw std::invalid_argument(std::string(__FUNCTION__) + + ": mraa_aio_init(X) failed, invalid pin?"); + } + else + { + printf("ADXL335 else inside constructor\n"); + if( !(m_aioX = descs->aios[0]) ) + { + throw std::invalid_argument(std::string(__FUNCTION__) + + ": mraa_aio_init(X) failed, invalid pin?"); + } + if( !(m_aioY = descs->aios[1]) ) + { + throw std::invalid_argument(std::string(__FUNCTION__) + + ": mraa_aio_init(X) failed, invalid pin?"); + } + if( !(m_aioZ = descs->aios[2]) ) + { + throw std::invalid_argument(std::string(__FUNCTION__) + + ": mraa_aio_init(X) failed, invalid pin?"); + } + } + + std::vector upmTokens; + + if (!mraaIo.getLeftoverStr().empty()) { + upmTokens = UpmStringParser::parse(mraaIo.getLeftoverStr()); + } + + for (std::string tok : upmTokens) { + if(tok.substr(0,5) == "aref:") { + m_aref = std::stof(tok.substr(5)); + } + } +} + ADXL335::~ADXL335() { mraa_aio_close(m_aioX); diff --git a/src/adxl335/adxl335.hpp b/src/adxl335/adxl335.hpp index f7657457..fe42e8c8 100644 --- a/src/adxl335/adxl335.hpp +++ b/src/adxl335/adxl335.hpp @@ -29,6 +29,7 @@ #include #include #include +#include #include @@ -74,6 +75,13 @@ namespace upm { */ ADXL335(int pinX, int pinY, int pinZ, float aref=ADXL335_DEFAULT_AREF); + /** + * Instantiates ADXL335 Accelerometer based on a given string. + * + * @param initStr string containing specific information for ADXL335 initialization. + */ + ADXL335(std::string initStr); + /** * ADXL335 destructor */ @@ -146,6 +154,7 @@ namespace upm { void calibrate(); private: + mraa::MraaIo mraaIo; mraa_aio_context m_aioX; mraa_aio_context m_aioY; mraa_aio_context m_aioZ;