72 lines
2.1 KiB
C++
72 lines
2.1 KiB
C++
#pragma once
|
|
|
|
#include "ExtendedInputOutput.hpp"
|
|
#include <AH/Containers/Updatable.hpp>
|
|
#include <AH/Hardware/Hardware-Types.hpp>
|
|
|
|
BEGIN_AH_NAMESPACE
|
|
|
|
class ExtendedIOElement : public UpdatableCRTP<ExtendedIOElement> {
|
|
protected:
|
|
ExtendedIOElement(pin_int_t length);
|
|
ExtendedIOElement(const ExtendedIOElement &) = delete;
|
|
ExtendedIOElement &operator=(const ExtendedIOElement &) = delete;
|
|
ExtendedIOElement(ExtendedIOElement &&) = default;
|
|
ExtendedIOElement &operator=(ExtendedIOElement &&) = delete;
|
|
|
|
public:
|
|
virtual void pinMode(pin_int_t pin, PinMode_t mode) {
|
|
pinModeBuffered(pin, mode);
|
|
updateBufferedOutputs();
|
|
}
|
|
virtual void pinModeBuffered(pin_int_t pin, PinMode_t mode) = 0;
|
|
|
|
virtual void digitalWrite(pin_int_t pin, PinStatus_t state) {
|
|
digitalWriteBuffered(pin, state);
|
|
updateBufferedOutputs();
|
|
}
|
|
virtual void digitalWriteBuffered(pin_int_t pin, PinStatus_t state) = 0;
|
|
|
|
virtual PinStatus_t digitalRead(pin_int_t pin) {
|
|
updateBufferedInputs();
|
|
return digitalReadBuffered(pin);
|
|
}
|
|
virtual PinStatus_t digitalReadBuffered(pin_int_t pin) = 0;
|
|
|
|
virtual void analogWrite(pin_int_t pin, analog_t val) {
|
|
analogWriteBuffered(pin, val);
|
|
updateBufferedOutputs();
|
|
}
|
|
virtual void analogWriteBuffered(pin_int_t pin, analog_t val) = 0;
|
|
|
|
virtual analog_t analogRead(pin_int_t pin) {
|
|
updateBufferedInputs();
|
|
return analogReadBuffered(pin);
|
|
}
|
|
virtual analog_t analogReadBuffered(pin_int_t pin) = 0;
|
|
|
|
virtual void begin() = 0;
|
|
static void beginAll();
|
|
|
|
virtual void updateBufferedOutputs() = 0;
|
|
static void updateAllBufferedOutputs();
|
|
|
|
virtual void updateBufferedInputs() = 0;
|
|
static void updateAllBufferedInputs();
|
|
|
|
pin_t pin(pin_int_t pin) const;
|
|
pin_t operator[](pin_int_t pin) const;
|
|
pin_int_t getLength() const;
|
|
pin_t getEnd() const;
|
|
pin_t getStart() const;
|
|
static DoublyLinkedList<ExtendedIOElement> &getAll();
|
|
|
|
private:
|
|
const pin_int_t length;
|
|
const pin_t start;
|
|
const pin_t end;
|
|
static pin_t offset;
|
|
};
|
|
|
|
END_AH_NAMESPACE
|