From 5e3acab84772a7a54f2486506f9175df1e460c63 Mon Sep 17 00:00:00 2001 From: Javier Balloffet Date: Fri, 2 Feb 2024 06:23:58 -0300 Subject: [PATCH] Add digital output interface and the Arduino implementation (#208) Signed-off-by: Javier Balloffet --- andino_firmware/src/digital_out.h | 58 +++++++++++++++++++++ andino_firmware/src/digital_out_arduino.cpp | 40 ++++++++++++++ andino_firmware/src/digital_out_arduino.h | 49 +++++++++++++++++ 3 files changed, 147 insertions(+) create mode 100644 andino_firmware/src/digital_out.h create mode 100644 andino_firmware/src/digital_out_arduino.cpp create mode 100644 andino_firmware/src/digital_out_arduino.h diff --git a/andino_firmware/src/digital_out.h b/andino_firmware/src/digital_out.h new file mode 100644 index 00000000..6a5c35a2 --- /dev/null +++ b/andino_firmware/src/digital_out.h @@ -0,0 +1,58 @@ +// BSD 3-Clause License +// +// Copyright (c) 2024, Ekumen Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// 1. Redistributions of source code must retain the above copyright notice, this +// list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// 3. Neither the name of the copyright holder nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +#pragma once + +namespace andino { + +/// @brief This class defines an interface for digital outputs. +class DigitalOut { + public: + /// @brief Constructs a DigitalOut using the specified GPIO pin. + /// + /// @param gpio_pin GPIO pin. + explicit DigitalOut(const int gpio_pin) : gpio_pin_(gpio_pin) {} + + /// @brief Destructs the digital output. + virtual ~DigitalOut() = default; + + /// @brief Initializes the digital output. + virtual void begin() const = 0; + + /// @brief Sets the digital output value (0 or 1). + /// + /// @param value Digital output value. + virtual void write(int value) const = 0; + + protected: + /// GPIO pin. + const int gpio_pin_; +}; + +} // namespace andino diff --git a/andino_firmware/src/digital_out_arduino.cpp b/andino_firmware/src/digital_out_arduino.cpp new file mode 100644 index 00000000..d6bf6299 --- /dev/null +++ b/andino_firmware/src/digital_out_arduino.cpp @@ -0,0 +1,40 @@ +// BSD 3-Clause License +// +// Copyright (c) 2024, Ekumen Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// 1. Redistributions of source code must retain the above copyright notice, this +// list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// 3. Neither the name of the copyright holder nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +#include "digital_out_arduino.h" + +#include + +namespace andino { + +void DigitalOutArduino::begin() const { pinMode(gpio_pin_, OUTPUT); } + +void DigitalOutArduino::write(int value) const { digitalWrite(gpio_pin_, value); } + +} // namespace andino diff --git a/andino_firmware/src/digital_out_arduino.h b/andino_firmware/src/digital_out_arduino.h new file mode 100644 index 00000000..3e476dde --- /dev/null +++ b/andino_firmware/src/digital_out_arduino.h @@ -0,0 +1,49 @@ +// BSD 3-Clause License +// +// Copyright (c) 2024, Ekumen Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// 1. Redistributions of source code must retain the above copyright notice, this +// list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// 3. Neither the name of the copyright holder nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +#pragma once + +#include "digital_out.h" + +namespace andino { + +/// @brief This class provides an Arduino implementation of the digital output interface. +class DigitalOutArduino : public DigitalOut { + public: + /// @brief Constructs a DigitalOutArduino using the specified GPIO pin. + /// + /// @param gpio_pin GPIO pin. + explicit DigitalOutArduino(const int gpio_pin) : DigitalOut(gpio_pin) {} + + void begin() const override; + + void write(int value) const override; +}; + +} // namespace andino