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);