From 9ba309bc48fbfbdf66ce6478e76808036914aeff Mon Sep 17 00:00:00 2001 From: Adelin Dobre Date: Thu, 28 Jun 2018 16:23:47 +0300 Subject: [PATCH] A110X: Add string based contsructor Signed-off-by: Mihai Tudor Panu --- src/a110x/a110x.cxx | 27 +++++++++++++++++++++++++++ src/a110x/a110x.hpp | 9 +++++++++ 2 files changed, 36 insertions(+) diff --git a/src/a110x/a110x.cxx b/src/a110x/a110x.cxx index b0b063f5..53ed180d 100644 --- a/src/a110x/a110x.cxx +++ b/src/a110x/a110x.cxx @@ -26,6 +26,7 @@ #include #include +#include "upm_string_parser.hpp" #include "a110x.hpp" using namespace upm; @@ -44,6 +45,32 @@ A110X::A110X(int pin) m_isrInstalled = false; } +A110X::A110X(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?"); + return; + } + else + { + if( !(m_gpio = descs->gpios[0]) ) + { + throw std::invalid_argument(std::string(__FUNCTION__) + + ": mraa_gpio_init() failed, invalid pin?"); + + return; + } + } + + mraa_gpio_dir(m_gpio, MRAA_GPIO_IN); + m_isrInstalled = false; +} + + A110X::~A110X() { if (m_isrInstalled) diff --git a/src/a110x/a110x.hpp b/src/a110x/a110x.hpp index 9959f9a4..fbc27a71 100644 --- a/src/a110x/a110x.hpp +++ b/src/a110x/a110x.hpp @@ -25,6 +25,7 @@ #include #include +#include #include namespace upm { @@ -67,6 +68,13 @@ namespace upm { * @param pin Digital pin to use */ A110X(int pin); + /** + * Instantiates A110x digital sensor based on a given string. + * + * @param initStr string containing specific information for A110X initialization. + */ + A110X(std::string initStr); + /** * A110X destructor */ @@ -97,6 +105,7 @@ namespace upm { private: bool m_isrInstalled; + mraa::MraaIo mraaIo; mraa_gpio_context m_gpio; }; }