Control Surface  1.1.0
MIDI Control Surface library for Arduino
Public Types | Public Member Functions | Static Public Member Functions | Protected Member Functions | Protected Attributes | Private Attributes | Static Private Attributes | List of all members
AH::ShiftRegisterOutBase< N > Class Template Referenceabstract

A class for serial-in/parallel-out shift registers, like the 74HC595. More...

#include <ShiftRegisterOutBase.hpp>

Inheritance diagram for AH::ShiftRegisterOutBase< N >:
Collaboration diagram for AH::ShiftRegisterOutBase< N >:

Public Types

using BitOrder_t = uint8_t
 

Public Member Functions

void pinMode (pin_t pin, uint8_t mode) override __attribute__((deprecated))
 The pinMode function is not implemented because the mode is OUTPUT by definition. More...
 
void digitalWrite (pin_t pin, uint8_t val) override
 Set the state of a given output pin. More...
 
int digitalRead (pin_t pin) override
 Get the current state of a given output pin. More...
 
analog_t analogRead (pin_t pin) override __attribute__((deprecated))
 The analogRead function is deprecated because a shift is always digital. More...
 
void analogWrite (pin_t pin, analog_t val) override __attribute__((deprecated))
 The analogWrite function is not deprecated because a shift is always digital. More...
 
pin_t red (pin_t id)
 Get the red output pin of the given LED. More...
 
Array< pin_t, N/3 > redPins ()
 Get an array containing all pins with red LEDs. More...
 
pin_t green (pin_t id)
 Get the green output pin of the given LED. More...
 
Array< pin_t, N/3 > greenPins ()
 Get an array containing all pins with green LEDs. More...
 
pin_t blue (pin_t id)
 Get the blue output pin of the given LED. More...
 
Array< pin_t, N/3 > bluePins ()
 Get an array containing all pins with blue LEDs. More...
 
Array< pin_t, N > pins () const
 Get an array containing all pins of the element. More...
 
virtual void begin ()=0
 Initialize the extended IO element. More...
 
virtual void update ()=0
 Update the extended IO element: write the internal state to the physical outputs, or read the physical state into the input buffers. More...
 
pin_t pin (pin_t pin) const
 Get the extended IO pin number of a given physical pin of this extended IO element. More...
 
pin_t operator[] (pin_t pin) const
 Get the extended IO pin number of a given physical pin of this extended IO element. More...
 
pin_t getLength () const
 Get the number of pins this IO element has. More...
 
pin_t getEnd () const
 Get the largest global extended IO pin number that belongs to this extended IO element. More...
 
pin_t getStart () const
 Get the smallest global extended IO pin number that belongs to this extended IO element. More...
 

Static Public Member Functions

static constexpr uint16_t length ()
 
static void beginAll ()
 Initialize all extended IO elements. More...
 
static DoublyLinkedList< ExtendedIOElement > & getAll ()
 Get the list of all Extended IO elements. More...
 

Protected Member Functions

 ShiftRegisterOutBase (pin_t latchPin, BitOrder_t bitOrder)
 Create a new ShiftRegisterOutBase object with a given bit order, and a given number of outputs. More...
 

Protected Attributes

const pin_t latchPin
 
const BitOrder_t bitOrder
 
BitArray< N > buffer
 
bool dirty = true
 
ExtendedIOElementnext
 
ExtendedIOElementprevious
 

Private Attributes

const pin_t start
 
const pin_t end
 

Static Private Attributes

static pin_t offset = NUM_DIGITAL_PINS + NUM_ANALOG_INPUTS
 
static DoublyLinkedList< ExtendedIOElementelements
 

Detailed Description

template<uint8_t N>
class AH::ShiftRegisterOutBase< N >

A class for serial-in/parallel-out shift registers, like the 74HC595.

Template Parameters
NThe number of bits in total. Usually, shift registers (e.g. the 74HC595) have eight bits per chip, so length = 8 * k where k is the number of cascaded chips.

Definition at line 25 of file ShiftRegisterOutBase.hpp.

Member Typedef Documentation

◆ BitOrder_t

template<uint8_t N>
using AH::ShiftRegisterOutBase< N >::BitOrder_t = uint8_t

Definition at line 30 of file ShiftRegisterOutBase.hpp.

Constructor & Destructor Documentation

◆ ShiftRegisterOutBase()

template<uint8_t N>
AH::ShiftRegisterOutBase< N >::ShiftRegisterOutBase ( pin_t  latchPin,
BitOrder_t  bitOrder 
)
protected

Create a new ShiftRegisterOutBase object with a given bit order, and a given number of outputs.

Parameters
latchPinThe digital output pin connected to the latch pin (ST_CP or RCLK) of the shift register.
bitOrderEither MSBFIRST (most significant bit first) or LSBFIRST (least significant bit first).

Definition at line 8 of file ShiftRegisterOutBase.ipp.

Member Function Documentation

◆ pinMode()

template<uint8_t N>
void AH::ShiftRegisterOutBase< N >::pinMode ( pin_t  pin,
uint8_t  mode 
)
inlineoverridevirtual

The pinMode function is not implemented because the mode is OUTPUT by definition.

Implements AH::ExtendedIOElement.

Definition at line 52 of file ShiftRegisterOutBase.hpp.

◆ digitalWrite()

template<uint8_t N>
void AH::ShiftRegisterOutBase< N >::digitalWrite ( pin_t  pin,
uint8_t  val 
)
overridevirtual

Set the state of a given output pin.

Parameters
pinThe shift register pin to set.
valThe value to set the pin to. (Either HIGH (1) or LOW (0))

Implements AH::ExtendedIOElement.

Definition at line 13 of file ShiftRegisterOutBase.ipp.

◆ digitalRead()

template<uint8_t N>
int AH::ShiftRegisterOutBase< N >::digitalRead ( pin_t  pin)
overridevirtual

Get the current state of a given output pin.

Parameters
pinThe shift register pin to read from.
Return values
0The state of the pin is LOW.
1The state of the pin is HIGH.

Implements AH::ExtendedIOElement.

Definition at line 20 of file ShiftRegisterOutBase.ipp.

◆ analogRead()

template<uint8_t N>
analog_t AH::ShiftRegisterOutBase< N >::analogRead ( pin_t  pin)
inlineoverridevirtual

The analogRead function is deprecated because a shift is always digital.

Parameters
pinThe shift register pin to read from.
Return values
0The state of the pin is LOW.
1023The state of the pin is HIGH.

Implements AH::ExtendedIOElement.

Definition at line 90 of file ShiftRegisterOutBase.hpp.

◆ analogWrite()

template<uint8_t N>
void AH::ShiftRegisterOutBase< N >::analogWrite ( pin_t  pin,
analog_t  val 
)
inlineoverridevirtual

The analogWrite function is not deprecated because a shift is always digital.

Parameters
pinThe shift register pin to set.
valThe value to set the pin to. A value greater or equal to 0x80 will set the pin to a HIGH state, a value less than 0x80 will set the pin to a LOW state.

Implements AH::ExtendedIOElement.

Definition at line 104 of file ShiftRegisterOutBase.hpp.

◆ red()

template<uint8_t N>
pin_t AH::ShiftRegisterOutBase< N >::red ( pin_t  id)

Get the red output pin of the given LED.

Parameters
idThe zero-based LED number.

Definition at line 36 of file ShiftRegisterOutBase.ipp.

◆ redPins()

template<uint8_t N>
Array< pin_t, N/3 > AH::ShiftRegisterOutBase< N >::redPins ( )

Get an array containing all pins with red LEDs.

Definition at line 41 of file ShiftRegisterOutBase.ipp.

◆ green()

template<uint8_t N>
pin_t AH::ShiftRegisterOutBase< N >::green ( pin_t  id)

Get the green output pin of the given LED.

Parameters
idThe zero-based LED number.

Definition at line 25 of file ShiftRegisterOutBase.ipp.

◆ greenPins()

template<uint8_t N>
Array< pin_t, N/3 > AH::ShiftRegisterOutBase< N >::greenPins ( )

Get an array containing all pins with green LEDs.

Definition at line 30 of file ShiftRegisterOutBase.ipp.

◆ blue()

template<uint8_t N>
pin_t AH::ShiftRegisterOutBase< N >::blue ( pin_t  id)

Get the blue output pin of the given LED.

Parameters
idThe zero-based LED number.

Definition at line 47 of file ShiftRegisterOutBase.ipp.

◆ bluePins()

template<uint8_t N>
Array< pin_t, N/3 > AH::ShiftRegisterOutBase< N >::bluePins ( )

Get an array containing all pins with blue LEDs.

Definition at line 52 of file ShiftRegisterOutBase.ipp.

◆ pins()

template<uint16_t N>
Array<pin_t, N> AH::StaticSizeExtendedIOElement< N >::pins ( ) const
inlineinherited

Get an array containing all pins of the element.

Definition at line 27 of file StaticSizeExtendedIOElement.hpp.

◆ length()

template<uint16_t N>
static constexpr uint16_t AH::StaticSizeExtendedIOElement< N >::length ( )
inlinestaticconstexprinherited

Definition at line 31 of file StaticSizeExtendedIOElement.hpp.

◆ begin()

virtual void AH::ExtendedIOElement::begin ( )
pure virtualinherited

Initialize the extended IO element.

Implemented in AH::AnalogMultiplex< N >, AH::ShiftRegisterOut< N >, AH::SPIShiftRegisterOut< N >, and AH::MAX7219.

◆ beginAll()

void AH::ExtendedIOElement::beginAll ( )
staticinherited

Initialize all extended IO elements.

Definition at line 23 of file ExtendedIOElement.cpp.

◆ update()

virtual void AH::ExtendedIOElement::update ( )
pure virtualinherited

Update the extended IO element: write the internal state to the physical outputs, or read the physical state into the input buffers.

Implemented in AH::MAX7219, AH::AnalogMultiplex< N >, AH::ShiftRegisterOut< N >, and AH::SPIShiftRegisterOut< N >.

◆ pin()

pin_t AH::ExtendedIOElement::pin ( pin_t  pin) const
inherited

Get the extended IO pin number of a given physical pin of this extended IO element.

Parameters
pinThe zero-based physical pin number of this IO element.
Returns
The global, unique extended IO pin number for the given pin.

Definition at line 28 of file ExtendedIOElement.cpp.

◆ operator[]()

pin_t AH::ExtendedIOElement::operator[] ( pin_t  pin) const
inherited

Get the extended IO pin number of a given physical pin of this extended IO element.


It is alias for ExtendedIOElement::pin.

Parameters
pinThe zero-based physical pin number of this IO element.
Returns
The global, unique extended IO pin number for the given pin.

Definition at line 43 of file ExtendedIOElement.cpp.

◆ getLength()

pin_t AH::ExtendedIOElement::getLength ( ) const
inherited

Get the number of pins this IO element has.

Returns
The number of pins this IO element has.

Definition at line 45 of file ExtendedIOElement.cpp.

◆ getEnd()

pin_t AH::ExtendedIOElement::getEnd ( ) const
inherited

Get the largest global extended IO pin number that belongs to this extended IO element.

Definition at line 47 of file ExtendedIOElement.cpp.

◆ getStart()

pin_t AH::ExtendedIOElement::getStart ( ) const
inherited

Get the smallest global extended IO pin number that belongs to this extended IO element.

Definition at line 49 of file ExtendedIOElement.cpp.

◆ getAll()

DoublyLinkedList< ExtendedIOElement > & AH::ExtendedIOElement::getAll ( )
staticinherited

Get the list of all Extended IO elements.

Definition at line 51 of file ExtendedIOElement.cpp.

Member Data Documentation

◆ latchPin

template<uint8_t N>
const pin_t AH::ShiftRegisterOutBase< N >::latchPin
protected

Definition at line 149 of file ShiftRegisterOutBase.hpp.

◆ bitOrder

template<uint8_t N>
const BitOrder_t AH::ShiftRegisterOutBase< N >::bitOrder
protected

Definition at line 150 of file ShiftRegisterOutBase.hpp.

◆ buffer

template<uint8_t N>
BitArray<N> AH::ShiftRegisterOutBase< N >::buffer
protected

Definition at line 152 of file ShiftRegisterOutBase.hpp.

◆ dirty

template<uint8_t N>
bool AH::ShiftRegisterOutBase< N >::dirty = true
protected

Definition at line 153 of file ShiftRegisterOutBase.hpp.

◆ start

const pin_t AH::ExtendedIOElement::start
privateinherited

Definition at line 193 of file ExtendedIOElement.hpp.

◆ end

const pin_t AH::ExtendedIOElement::end
privateinherited

Definition at line 194 of file ExtendedIOElement.hpp.

◆ offset

pin_t AH::ExtendedIOElement::offset = NUM_DIGITAL_PINS + NUM_ANALOG_INPUTS
staticprivateinherited

Definition at line 195 of file ExtendedIOElement.hpp.

◆ elements

DoublyLinkedList< ExtendedIOElement > AH::ExtendedIOElement::elements
staticprivateinherited

Definition at line 197 of file ExtendedIOElement.hpp.

◆ next

ExtendedIOElement * DoublyLinkable< ExtendedIOElement >::next
protectedinherited

Definition at line 305 of file LinkedList.hpp.

◆ previous

ExtendedIOElement * DoublyLinkable< ExtendedIOElement >::previous
protectedinherited

Definition at line 306 of file LinkedList.hpp.


The documentation for this class was generated from the following files: