diff --git a/src/collision/collision.cxx b/src/collision/collision.cxx index 5d79f9ed..542c636d 100644 --- a/src/collision/collision.cxx +++ b/src/collision/collision.cxx @@ -26,13 +26,13 @@ #include #include "collision.hpp" +#include "upm_string_parser.hpp" using namespace upm; Collision::Collision(int pin) { - - if ( !(m_gpio = mraa_gpio_init(pin)) ) + if ( !(m_gpio = mraa_gpio_init(pin)) ) { throw std::invalid_argument(std::string(__FUNCTION__) + ": mraa_gpio_init() failed, invalid pin?"); @@ -41,6 +41,20 @@ Collision::Collision(int pin) mraa_gpio_dir(m_gpio, MRAA_GPIO_IN); } +Collision::Collision(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?"); + } + } +} + Collision::~Collision() { mraa_gpio_close(m_gpio); diff --git a/src/collision/collision.hpp b/src/collision/collision.hpp index 2501a9c8..7e019f44 100644 --- a/src/collision/collision.hpp +++ b/src/collision/collision.hpp @@ -23,6 +23,7 @@ */ #pragma once +#include #include namespace upm { @@ -42,10 +43,10 @@ namespace upm { * @con gpio * * @brief API for the Collision Sensor - * + * * The Collision Sensor can detect whether any * collision movement or vibration happens. - * It outputs a low pulse signal when vibration is detected. + * It outputs a low pulse signal when vibration is detected. * * @image html collision.jpg * @snippet collision.cxx Interesting @@ -58,6 +59,12 @@ namespace upm { * @param pin Digital pin to use */ Collision(int pin); + /** + * Instantiates Collision Sensor based on a given string. + * + * @param initStr string containing specific information for Collision Sensor. + */ + Collision(std::string initStr); /** * Collision destructor */ @@ -69,5 +76,6 @@ namespace upm { private: mraa_gpio_context m_gpio; + mraa::MraaIo mraaIo; }; }