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 71a0d784..3de9c538 100644 --- a/src/a110x/a110x.hpp +++ b/src/a110x/a110x.hpp @@ -25,6 +25,7 @@ #include #include +#include namespace upm { /** @@ -66,6 +67,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 */ @@ -96,6 +104,7 @@ namespace upm { private: bool m_isrInstalled; + mraa::MraaIo mraaIo; mraa_gpio_context m_gpio; }; }