/* * File: pin.hpp * Author: naopross * * Created on May 3, 2018, 8:02 PM */ #ifndef PIN_HPP #define PIN_HPP #include extern "C" { #include } class gpio_pin { public: virtual ~gpio_pin() {} // digital mode methods virtual void set_mode(unsigned m) = 0; // digital output methods virtual void set(unsigned s) = 0; virtual unsigned is_set() const = 0; virtual void toggle() = 0; // digital input methods virtual unsigned read() const = 0; // TODO: analog mode methods protected: gpio_pin() {} }; template class io_pin : public gpio_pin { public: enum class mode : unsigned { INPUT = 1, OUTPUT = 0 }; enum class state : unsigned { ON = 1, OFF = 0 }; io_pin() = delete; template io_pin(latch_T *latch, tris_T *tris, port_T *port); virtual ~io_pin(); void set_mode(unsigned m); void set_mode(mode m); unsigned read() const; unsigned is_set() const; void set(unsigned s); void set(state s); void toggle(); bool operator==(const io_pin &other) const; bool operator!=(const io_pin &other) const; private: volatile uint8_t *_latch; volatile uint8_t *_tris; volatile uint8_t *_port; }; #endif /* PIN_HPP */