From fd34b9669d0d0a9aebddb69709b03762676e8107 Mon Sep 17 00:00:00 2001 From: Stefan Andritoiu Date: Wed, 20 Jun 2018 18:28:43 +0300 Subject: [PATCH] Added interface iButton Signed-off-by: Stefan Andritoiu Signed-off-by: Mihai Tudor Panu --- include/interfaces/iButton.hpp | 44 ++++++++++++++++++++++++++++++++++ src/button/button.cxx | 5 ++++ src/button/button.hpp | 10 +++++++- src/grove/grovebutton.cxx | 5 ++++ src/grove/grovebutton.hpp | 10 +++++++- src/ttp223/ttp223.hpp | 5 ++-- 6 files changed, 75 insertions(+), 4 deletions(-) create mode 100644 include/interfaces/iButton.hpp diff --git a/include/interfaces/iButton.hpp b/include/interfaces/iButton.hpp new file mode 100644 index 00000000..45439b2e --- /dev/null +++ b/include/interfaces/iButton.hpp @@ -0,0 +1,44 @@ +/* + * Author: Mihai Stefanescu + * Copyright (c) 2018 Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#pragma once + +namespace upm +{ +/** + * @brief Interface for Button sensors +*/ + class iButton + { + public: + virtual ~iButton() {} + + /** + * Gets the current button press state. + * + * @returns Button state + */ + virtual bool isPressed() = 0; + }; +} diff --git a/src/button/button.cxx b/src/button/button.cxx index 2c3018fc..36cbb1fd 100644 --- a/src/button/button.cxx +++ b/src/button/button.cxx @@ -59,6 +59,11 @@ int Button::value() return mraa_gpio_read(m_gpio); } +bool Button::isPressed() +{ + return (bool) Button::value(); +} + void Button::installISR(mraa::Edge level, void (*isr)(void *), void *arg) { if (m_isrInstalled) diff --git a/src/button/button.hpp b/src/button/button.hpp index f90bbe94..81403a03 100644 --- a/src/button/button.hpp +++ b/src/button/button.hpp @@ -28,6 +28,7 @@ #include #include +#include namespace upm { @@ -54,7 +55,7 @@ namespace upm { * @image html button.jpg * @snippet button.cxx Interesting */ -class Button{ +class Button : virtual public iButton { public: /** * button constructor @@ -79,6 +80,13 @@ class Button{ */ int value(); + /** + * Gets the current button press state. + * + * @returns Button state + */ + virtual bool isPressed(); + /** * Installs an interrupt service routine (ISR) to be called when * the button is activated or deactivated. diff --git a/src/grove/grovebutton.cxx b/src/grove/grovebutton.cxx index ce50d2ec..b606d8d5 100644 --- a/src/grove/grovebutton.cxx +++ b/src/grove/grovebutton.cxx @@ -58,6 +58,11 @@ int GroveButton::value() return mraa_gpio_read(m_gpio); } +bool GroveButton::isPressed() +{ + return (bool) GroveButton::value(); +} + void GroveButton::installISR(mraa::Edge level, void (*isr)(void *), void *arg) { if (m_isrInstalled) diff --git a/src/grove/grovebutton.hpp b/src/grove/grovebutton.hpp index 60773c25..d11817cd 100644 --- a/src/grove/grovebutton.hpp +++ b/src/grove/grovebutton.hpp @@ -29,6 +29,7 @@ #include #include #include "grovebase.hpp" +#include namespace upm { @@ -51,7 +52,7 @@ namespace upm { * @image html grovebutton.jpg * @snippet grove-grovebutton.cxx Interesting */ -class GroveButton: public Grove { +class GroveButton: public Grove, virtual public iButton { public: /** * Grove button constructor @@ -76,6 +77,13 @@ class GroveButton: public Grove { */ int value(); + /** + * Gets the current button press state. + * + * @returns Button state + */ + virtual bool isPressed(); + /** * Installs an interrupt service routine (ISR) to be called when * the button is activated or deactivated. diff --git a/src/ttp223/ttp223.hpp b/src/ttp223/ttp223.hpp index bae77662..da2e8328 100644 --- a/src/ttp223/ttp223.hpp +++ b/src/ttp223/ttp223.hpp @@ -25,6 +25,7 @@ #include #include +#include namespace upm { /** @@ -52,7 +53,7 @@ namespace upm { * @image html ttp223.jpg * @snippet ttp223.cxx Interesting */ -class TTP223 { +class TTP223 : virtual public iButton { public: /** * TTP223 constructor @@ -85,7 +86,7 @@ class TTP223 { * * @return True if touched, false otherwise */ - bool isPressed(); + virtual bool isPressed(); /** * Installs an interrupt service routine (ISR) to be called when