8 #include <AH/Hardware/ExtendedInputOutput/ExtendedInputOutput.hpp> 
   34         : loadPin(loadPin), chainlength(chainlength) {}
 
   36     static constexpr uint8_t DECODEMODE = 9;
 
   37     static constexpr uint8_t INTENSITY = 10;
 
   38     static constexpr uint8_t SCANLIMIT = 11;
 
   39     static constexpr uint8_t SHUTDOWN = 12;
 
   40     static constexpr uint8_t DISPLAYTEST = 15;
 
   50         sendRawAll(DISPLAYTEST, 0); 
 
   51         sendRawAll(SCANLIMIT, 7);   
 
   52         sendRawAll(DECODEMODE, 0);  
 
   53         sendRawAll(INTENSITY, 0xF); 
 
   55         sendRawAll(SHUTDOWN, 1); 
 
   62         for (uint8_t j = 1; j < 8 + 1; j++)
 
   76     void send(uint8_t digit, uint8_t value, uint8_t chip = 0) {
 
   77         sendRaw((digit & 0x7) + 1, value, chip);
 
  112                     uint8_t leading_dim = 1) {
 
  113         uint8_t opcode = (digit & 0x7) + 1;
 
  115         SPI.beginTransaction(settings);
 
  116         for (uint8_t i = 0; i < chainlength; ++i) {
 
  117             SPI.transfer(opcode);
 
  118             SPI.transfer(values[uint16_t(i) * leading_dim]);
 
  121         SPI.endTransaction();
 
  143         for (uint8_t row = 0; row < 8; ++row)
 
  144             sendRowAll(row, values + row, 8);
 
  157         SPI.beginTransaction(settings);
 
  158         for (uint8_t i = 0; i < chainlength; ++i) {
 
  159             SPI.transfer(opcode);
 
  163         SPI.endTransaction();
 
  176     void sendRaw(uint8_t opcode, uint8_t value, uint8_t chip = 0) {
 
  177         if (chip >= chainlength)
 
  180         SPI.beginTransaction(settings);
 
  182         for (; c < chip; c++) {
 
  186         SPI.transfer(opcode);
 
  188         for (c++; c < chainlength; c++) {
 
  193         SPI.endTransaction();
 
  203         sendRawAll(INTENSITY, intensity & 0xF);
 
  215         sendRaw(INTENSITY, intensity & 0xF, chip);