XPoint 0.1.0
Hardware-agnostic crosspoint matrix routing library
Loading...
Searching...
No Matches
ArduinoShiftRegisterDriver.h
Go to the documentation of this file.
1// SPDX-License-Identifier: AGPL-3.0-only
2// Copyright (c) 2026 Douglas Quigg (dstroy0) <dquigg123@gmail.com>
3// https://github.com/dstroy0/XPoint
4
21#ifndef ARDUINO_SHIFT_REGISTER_DRIVER_H
22#define ARDUINO_SHIFT_REGISTER_DRIVER_H
23
24#include "XPointDriver.h"
25#include <stdint.h>
26
27#if defined(ARDUINO)
28#include <Arduino.h>
29#endif
30
38{
39 public:
41 typedef uint16_t (*MapFn)(uint8_t r, uint8_t c);
42
52 ArduinoShiftRegisterDriver(uint16_t nOut, MapFn map, int dPin, int ckPin, int ltPin);
53
56
62 void begin() override;
63
74 void setNodeHardware(uint8_t r, uint8_t c, bool state) override;
75
82 void commitPhysicalUpdates() override;
83
84 private:
85 uint16_t _nOut;
86 MapFn _map;
87 uint16_t _nBytes;
88 uint8_t *_buf;
89 int _dPin;
90 int _ckPin;
91 int _ltPin;
92};
93
94#endif // ARDUINO_SHIFT_REGISTER_DRIVER_H
Abstract hardware driver interface for the XPoint crosspoint matrix.
XPointDriver implementation for daisy-chained 74HC595 shift registers.
Definition ArduinoShiftRegisterDriver.h:38
void setNodeHardware(uint8_t r, uint8_t c, bool state) override
Update the shadow buffer for the bit mapped from (r, c).
Definition ArduinoShiftRegisterDriver.cpp:33
~ArduinoShiftRegisterDriver()
Destructor — frees the shadow byte buffer.
Definition ArduinoShiftRegisterDriver.cpp:17
void commitPhysicalUpdates() override
Clock the full shadow buffer out to the shift register chain.
Definition ArduinoShiftRegisterDriver.cpp:46
uint16_t(* MapFn)(uint8_t r, uint8_t c)
Function pointer type: (row, col) → bit index within the shift register chain.
Definition ArduinoShiftRegisterDriver.h:41
void begin() override
Configure DATA, CLOCK, and LATCH pins as OUTPUT then clear all outputs.
Definition ArduinoShiftRegisterDriver.cpp:22
Abstract base class for all XPoint hardware drivers.
Definition XPointDriver.h:41