/* * File: pin.hpp * Author: naopross * * Created on May 3, 2018, 8:02 PM */ #ifndef PIN_HPP #define PIN_HPP extern "C" { #include } class gpio { public: virtual ~gpio() {} // digital functions virtual void set_mode(unsigned m) = 0; virtual void set(unsigned s) = 0; virtual unsigned read() const = 0; virtual void toggle() = 0; protected: gpio() {} }; template class io_pin : public gpio { 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; 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 */