From a3bf6d76a9205590a61a4591f98042e0cf8c3de0 Mon Sep 17 00:00:00 2001 From: Adelin Dobre Date: Tue, 24 Jul 2018 17:00:48 +0300 Subject: [PATCH] Collision Sensor: Add string based constructor Signed-off-by: Adelin Dobre Signed-off-by: Mihai Tudor Panu --- src/collision/collision.cxx | 18 ++++++++++++++++-- src/collision/collision.hpp | 12 ++++++++++-- 2 files changed, 26 insertions(+), 4 deletions(-) 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 8fe2764d..645d9901 100644 --- a/src/collision/collision.hpp +++ b/src/collision/collision.hpp @@ -23,6 +23,7 @@ */ #pragma once +#include #include #include @@ -59,6 +60,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,6 +76,7 @@ namespace upm { virtual bool isColliding(); private: - mraa_gpio_context m_gpio; - }; + mraa_gpio_context m_gpio; + mraa::MraaIo mraaIo; + }; }