Control Surface  1.1.1
MIDI Control Surface library for Arduino
SPIShiftRegisterOut.ipp
Go to the documentation of this file.
1 #ifdef ARDUINO // I'm too lazy to mock the SPI library
2 
5 
7 #include <SPI.h>
9 
11 
12 template <uint8_t N>
14  : ShiftRegisterOutBase<N>(latchPin, bitOrder) {}
15 
16 template <uint8_t N>
18  ExtIO::pinMode(this->latchPin, OUTPUT);
19  SPI.begin();
20  update();
21 }
22 
23 template <uint8_t N>
25  if (!this->dirty)
26  return;
27  SPISettings settings = {SPI_MAX_SPEED, this->bitOrder, SPI_MODE0};
28  SPI.beginTransaction(settings);
29  ExtIO::digitalWrite(this->latchPin, LOW);
30  const uint8_t bufferLength = this->buffer.getBufferLength();
31  if (this->bitOrder == LSBFIRST)
32  for (uint8_t i = 0; i < bufferLength; i++)
33  SPI.transfer(this->buffer.getByte(i));
34  else
35  for (int8_t i = bufferLength - 1; i >= 0; i--)
36  SPI.transfer(this->buffer.getByte(i));
37  ExtIO::digitalWrite(this->latchPin, HIGH);
38  SPI.endTransaction();
39  this->dirty = false;
40 }
41 
43 
44 #endif
AH::ExtIO::pinMode
void pinMode(pin_t pin, uint8_t mode)
An ExtIO version of the Arduino function.
Definition: ExtendedInputOutput.cpp:36
AH::SPI_MAX_SPEED
constexpr static Frequency SPI_MAX_SPEED
Definition: AH/Settings/Settings.hpp:85
AH::ShiftRegisterOutBase
A class for serial-in/parallel-out shift registers, like the 74HC595.
Definition: ShiftRegisterOutBase.hpp:25
AH::pin_t
uint16_t pin_t
The type for Arduino pins (and ExtendedIOElement pins).
Definition: Hardware-Types.hpp:17
SPIShiftRegisterOut.hpp
ExtendedInputOutput.hpp
AH_DIAGNOSTIC_POP
#define AH_DIAGNOSTIC_POP()
Definition: Warnings.hpp:17
HIGH
const uint8_t HIGH
Definition: ExtendedInputOutput.hpp:46
LOW
const uint8_t LOW
Definition: ExtendedInputOutput.hpp:47
AH_DIAGNOSTIC_EXTERNAL_HEADER
#define AH_DIAGNOSTIC_EXTERNAL_HEADER()
Definition: Warnings.hpp:18
AH::ShiftRegisterOutBase::BitOrder_t
uint8_t BitOrder_t
Definition: ShiftRegisterOutBase.hpp:30
BEGIN_AH_NAMESPACE
#define BEGIN_AH_NAMESPACE
Definition: AH/Settings/NamespaceSettings.hpp:9
OUTPUT
const uint8_t OUTPUT
Definition: ExtendedInputOutput.hpp:50
END_AH_NAMESPACE
#define END_AH_NAMESPACE
Definition: AH/Settings/NamespaceSettings.hpp:10
AH::SPIShiftRegisterOut
A class for serial-in/parallel-out shift registers, like the 74HC595 that are connected to the SPI bu...
Definition: SPIShiftRegisterOut.hpp:29
AH::ExtIO::digitalWrite
void digitalWrite(pin_t pin, uint8_t val)
An ExtIO version of the Arduino function.
Definition: ExtendedInputOutput.cpp:48