From 1111a830c9a934f4036328552c62c5361abfd651 Mon Sep 17 00:00:00 2001 From: Adelin Dobre Date: Wed, 31 Oct 2018 12:57:16 +0200 Subject: [PATCH] AD8232: Make some changes in cpp interface Signed-off-by: Adelin Dobre Signed-off-by: Mihai Tudor Panu --- src/ad8232/ad8232.cxx | 78 ++++++++++++++++++------------------------- src/ad8232/ad8232.hpp | 6 ++-- 2 files changed, 35 insertions(+), 49 deletions(-) diff --git a/src/ad8232/ad8232.cxx b/src/ad8232/ad8232.cxx index 871e52ea..699ead90 100644 --- a/src/ad8232/ad8232.cxx +++ b/src/ad8232/ad8232.cxx @@ -31,74 +31,60 @@ using namespace upm; using namespace std; -static bool operator!(mraa::MraaIo &mraaIo) + +AD8232::AD8232(int loPlus, int loMinus, int output, float aref) : + m_gpioLOPlus(loPlus), m_gpioLOMinus(loMinus), m_aioOUT(output) { - return mraaIo.getMraaDescriptors() == NULL; -} - -AD8232::AD8232(int loPlus, int loMinus, int output, float aref) { - m_gpioLOPlus = new mraa::Gpio(loPlus); - m_gpioLOMinus = new mraa::Gpio(loMinus); - m_aioOUT = new mraa::Aio(output); - - m_gpioLOPlus->dir(mraa::DIR_IN); - m_gpioLOMinus->dir(mraa::DIR_IN); + m_gpioLOPlus.dir(mraa::DIR_IN); + m_gpioLOMinus.dir(mraa::DIR_IN); m_aref = aref; - m_ares = (1 << m_aioOUT->getBit()); + m_ares = (1 << m_aioOUT.getBit()); } -AD8232::AD8232(std::string initStr) : mraaIo(initStr) { - if(!mraaIo.gpios.empty()) { - if(mraaIo.gpios.size() == 2) { - m_gpioLOPlus = &mraaIo.gpios[0]; - m_gpioLOMinus = &mraaIo.gpios[1]; - } - else { - throw std::invalid_argument(std::string(__FUNCTION__) + - ": mraa_gpio_init() must initialize two pins"); - } - } - else { - throw std::invalid_argument(std::string(__FUNCTION__) + - ": mraa_gpio_init() failed, invalid pin?"); - } - - if(!mraaIo.aios.empty()) { - m_aioOUT = &mraaIo.aios[0]; - } - else { - throw std::invalid_argument(std::string(__FUNCTION__) + - ": mraa_aio_init() failed, invalid pin?"); - } - +AD8232::AD8232(std::string initStr) : + m_gpioLOPlus(nullptr), m_gpioLOMinus(nullptr), m_aioOUT(nullptr), mraaIo(initStr) { + + mraa_io_descriptor* descs = mraaIo.getMraaDescriptors(); std::vector upmTokens; - + if(!mraaIo.getLeftoverStr().empty()) { upmTokens = UpmStringParser::parse(mraaIo.getLeftoverStr()); } + if(!descs->gpios) { + throw std::invalid_argument(std::string(__FUNCTION__) + + ": mraa_gpio_init() must initialize two pins"); + } else { + if(descs->gpios[0]) + m_gpioLOPlus = descs->gpios[0]; + if(descs->gpios[1]) + m_gpioLOMinus = descs->gpios[1]; + } + + if(!descs->aios){ + throw std::invalid_argument(std::string(__FUNCTION__) + + ": mraa_aio_init() failed, invalid pin?"); + } else { + m_aioOUT = descs->aios[0]; + } + for (std::string tok : upmTokens) { - if(tok.substr(0, 5) == "volt:") { + if(tok.substr(0, 5) == "aref:") { m_aref = std::stof(tok.substr(5)); } } - m_ares = (1 << m_aioOUT->getBit()); + m_ares = (1 << m_aioOUT.getBit()); } AD8232::~AD8232() { - if(!mraaIo) { - delete m_gpioLOPlus; - delete m_gpioLOMinus; - delete m_aioOUT; - } } int AD8232::value() { - if (m_gpioLOPlus->read() || m_gpioLOMinus->read()) + if (m_gpioLOPlus.read() || m_gpioLOMinus.read()) return 0; else - return m_aioOUT->read(); + return m_aioOUT.read(); } diff --git a/src/ad8232/ad8232.hpp b/src/ad8232/ad8232.hpp index ec1aa455..19d22b1a 100644 --- a/src/ad8232/ad8232.hpp +++ b/src/ad8232/ad8232.hpp @@ -105,10 +105,10 @@ namespace upm { int value(); private: + mraa::Gpio m_gpioLOPlus; + mraa::Gpio m_gpioLOMinus; + mraa::Aio m_aioOUT; mraa::MraaIo mraaIo; - mraa::Gpio *m_gpioLOPlus = NULL; - mraa::Gpio *m_gpioLOMinus = NULL; - mraa::Aio *m_aioOUT = NULL; float m_aref; int m_ares;