diff --git a/src/button/button.cxx b/src/button/button.cxx index 2c3018fc..97059de9 100644 --- a/src/button/button.cxx +++ b/src/button/button.cxx @@ -44,6 +44,23 @@ Button::Button(unsigned int pin) m_name = "Button Sensor"; } +Button::Button(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 { + if( !(m_gpio = descs->gpios[0]) ) { + throw std::invalid_argument(std::string(__FUNCTION__) + + ": mraa_gpio_init() failed, invalid pin?"); + } + } + + mraa_gpio_dir(m_gpio, MRAA_GPIO_IN); + m_name = "Button Sensor"; +} + Button::~Button() { mraa_gpio_close(m_gpio); diff --git a/src/button/button.hpp b/src/button/button.hpp index f90bbe94..a0b2f47c 100644 --- a/src/button/button.hpp +++ b/src/button/button.hpp @@ -27,6 +27,7 @@ #pragma once #include +#include #include namespace upm { @@ -62,6 +63,12 @@ class Button{ * @param pin Pin to use */ Button(unsigned int pin); + /** + * Instantiates Button/Switch Library based on a given string. + * + * @param initStr string containing specific information for Button initialization. + */ + Button(std::string initStr); /** * button destructor */ @@ -99,5 +106,6 @@ class Button{ bool m_isrInstalled; std::string m_name; mraa_gpio_context m_gpio; + mraa::MraaIo mraaIo; }; }