98 pinModeBuffered(pin, mode);
99 updateBufferedOutputs();
119 digitalWriteBuffered(pin, state);
120 updateBufferedOutputs();
139 updateBufferedInputs();
140 return digitalReadBuffered(pin);
159 analogWriteBuffered(pin,
val);
160 updateBufferedOutputs();
179 updateBufferedInputs();
180 return analogReadBuffered(pin);
198 static void beginAll();
209 static void updateAllBufferedOutputs();
220 static void updateAllBufferedInputs();
246 pin_t getLength()
const;
252 pin_t getEnd()
const;
258 pin_t getStart()
const;
278 elementPin(element ? pin - element->getStart() : pin) {}
284 if (element !=
nullptr)
285 return (element->*
func)(elementPin,
args...);
286 else if (elementPin != NO_PIN)
289 return static_cast<FRet>(0);
300 &ExtendedIOElement::pinMode,
307 &ExtendedIOElement::digitalWrite,
313 return pin.apply(&ExtendedIOElement::digitalRead,
320 return pin.apply(&ExtendedIOElement::analogRead,
328 &ExtendedIOElement::analogWrite,
332 &ExtendedIOElement::analogWrite,
353 else if (dataPin.
element !=
nullptr && clockPin.
element !=
nullptr) {
380 &ExtendedIOElement::pinModeBuffered,
387 &ExtendedIOElement::digitalWriteBuffered,
393 return pin.apply(&ExtendedIOElement::digitalReadBuffered,
400 return pin.apply(&ExtendedIOElement::analogReadBuffered,
408 &ExtendedIOElement::analogWriteBuffered,
412 &ExtendedIOElement::analogWriteBuffered,
423using ExtIO::CachedExtIOPin;
#define BEGIN_AH_NAMESPACE
constexpr PinStatus_t LOW
AH::function_traits< decltype(::digitalWrite)>::argument_t< 1 > PinStatus_t
constexpr PinStatus_t HIGH
AH::function_traits< decltype(::pinMode)>::argument_t< 1 > PinMode_t
AH::function_traits< decltype(::digitalWrite)>::argument_t< 0 > ArduinoPin_t
An abstract base class for Extended Input/Output elements.
ExtendedIOElement(ExtendedIOElement &&)=default
Move constructor.
virtual void updateBufferedInputs()=0
Read the physical state into the input buffers.
ExtendedIOElement(const ExtendedIOElement &)=delete
Copying not allowed.
virtual void updateBufferedOutputs()=0
Write the internal state to the physical outputs.
virtual void analogWriteBuffered(pin_t pin, analog_t val)=0
Write an analog (or PWM) value to the software buffer given pin.
virtual analog_t analogRead(pin_t pin)
Read the analog value of the given pin.
virtual PinStatus_t digitalReadBuffered(pin_t pin)=0
Read the state of the given pin from the software buffer.
virtual void digitalWriteBuffered(pin_t pin, PinStatus_t state)=0
Set the output of a given pin in the software buffer.
virtual void pinMode(pin_t pin, PinMode_t mode)
Set the mode of a given pin.
ExtendedIOElement & operator=(const ExtendedIOElement &)=delete
Copying not allowed.
virtual void begin()=0
Initialize the extended IO element.
virtual void analogWrite(pin_t pin, analog_t val)
Write an analog (or PWM) value to the given pin.
ExtendedIOElement & operator=(ExtendedIOElement &&)=delete
Move assignment.
virtual void digitalWrite(pin_t pin, PinStatus_t state)
Set the output of the given pin to the given state.
virtual void pinModeBuffered(pin_t pin, PinMode_t mode)=0
Set the mode of a given pin in the software buffer.
virtual analog_t analogReadBuffered(pin_t pin)=0
Read the analog value of the given pin from the software buffer.
virtual PinStatus_t digitalRead(pin_t pin)
Read the state of the given pin.
A class that reads and filters an analog input.
A super class for object that have to be updated regularly.
Array< decltype(F{}(U{})), N > apply(const Array< U, N > &src, F f)
Apply a function to all elements of the array and return a copy.
void analogWriteBuffered(pin_t pin, analog_t val)
A buffered ExtIO version of the Arduino function.
bool isNativePin(pin_t pin)
Check if the given pin number is a real Arduino pin number, and not an ExtIO pin number.
void pinModeBuffered(pin_t pin, PinMode_t mode)
A buffered ExtIO version of the Arduino function.
ExtendedIOElement * getIOElementOfPin(pin_t pin)
Find the IO element of a given extended IO pin number.
void digitalWriteBuffered(pin_t pin, PinStatus_t val)
A buffered ExtIO version of the Arduino function.
void analogWrite(pin_t pin, analog_t val)
An ExtIO version of the Arduino function.
void pinMode(pin_t pin, PinMode_t mode)
An ExtIO version of the Arduino function.
PinStatus_t digitalReadBuffered(pin_t pin)
A buffered ExtIO version of the Arduino function.
analog_t analogRead(pin_t pin)
An ExtIO version of the Arduino function.
analog_t analogReadBuffered(pin_t pin)
A buffered ExtIO version of the Arduino function.
PinStatus_t digitalRead(pin_t pin)
An ExtIO version of the Arduino function.
void shiftOut(pin_t dataPin, pin_t clockPin, BitOrder_t bitOrder, uint8_t val)
An ExtIO version of the Arduino function.
void digitalWrite(pin_t pin, PinStatus_t val)
An ExtIO version of the Arduino function.
uint16_t analog_t
The type returned from analogRead and similar functions.
uint16_t pin_t
The type for Arduino pins (and ExtendedIOElement pins).
ArduinoPin_t arduino_pin_cast(T t)
ExtendedIOElement * element
CachedExtIOPin(pin_t pin)