diff --git a/src/grove/grove.cxx b/src/grove/grove.cxx index fc71a512..697d6931 100644 --- a/src/grove/grove.cxx +++ b/src/grove/grove.cxx @@ -25,6 +25,8 @@ */ #include +#include +#include #include "grove.h" #include "math.h" @@ -35,8 +37,12 @@ using namespace upm; GroveLed::GroveLed(int pin) { - mraa_init(); - 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?"); + return; + } + mraa_gpio_dir(m_gpio, MRAA_GPIO_OUT); m_name = "LED Socket"; } @@ -68,8 +74,11 @@ mraa_result_t GroveLed::off() GroveRelay::GroveRelay(unsigned int pin) { - mraa_init(); - 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?"); + return; + } mraa_gpio_dir(m_gpio, MRAA_GPIO_OUT); m_name = "Relay Switch"; } @@ -103,8 +112,11 @@ bool GroveRelay::isOff() GroveTemp::GroveTemp(unsigned int pin) { - mraa_init(); - m_aio = mraa_aio_init(pin); + if ( !(m_aio = mraa_aio_init(pin)) ) { + throw std::invalid_argument(std::string(__FUNCTION__) + + ": mraa_aio_init() failed, invalid pin?"); + return; + } m_name = "Temperature Sensor"; } @@ -130,8 +142,11 @@ float GroveTemp::raw_value() GroveLight::GroveLight(unsigned int pin) { - mraa_init(); - m_aio = mraa_aio_init(pin); + if ( !(m_aio = mraa_aio_init(pin)) ) { + throw std::invalid_argument(std::string(__FUNCTION__) + + ": mraa_aio_init() failed, invalid pin?"); + return; + } m_name = "Light Sensor"; } @@ -157,8 +172,11 @@ float GroveLight::raw_value() GroveRotary::GroveRotary(unsigned int pin) { - mraa_init(); - m_aio = mraa_aio_init(pin); + if ( !(m_aio = mraa_aio_init(pin)) ) { + throw std::invalid_argument(std::string(__FUNCTION__) + + ": mraa_aio_init() failed, invalid pin?"); + return; + } m_name = "Rotary Angle Sensor"; } @@ -201,8 +219,11 @@ float GroveRotary::rel_rad() GroveSlide::GroveSlide(unsigned int pin, float ref_voltage) { - mraa_init(); - m_aio = mraa_aio_init(pin); + if ( !(m_aio = mraa_aio_init(pin)) ) { + throw std::invalid_argument(std::string(__FUNCTION__) + + ": mraa_aio_init() failed, invalid pin?"); + return; + } m_ref_voltage = ref_voltage; m_name = "Slide Potentiometer"; } @@ -234,8 +255,11 @@ float GroveSlide::ref_voltage() GroveButton::GroveButton(unsigned int pin) { - mraa_init(); - 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?"); + return; + } mraa_gpio_dir(m_gpio, MRAA_GPIO_IN); m_name = "Button Sensor"; }