48#if __cplusplus == 201103L
59template<
typename T,
typename... Args>
60std::unique_ptr<T> make_unique(Args &&... args)
62 return std::unique_ptr<T>(
new T(std::forward<Args>(args)...));
77template <
typename T,
size_t N>
247 uint8_t value = 0x00;
311 return writeRegister(reg,
reinterpret_cast<uint8_t *
>(&val), 1);
334 uint8_t *read_buffer,
size_t read_len) = 0;
351 return writeRegister(reg,
reinterpret_cast<uint8_t *
>(&value), 1) == 0;
365 value &= ~(1 << bit);
366 return writeRegister(reg,
reinterpret_cast<uint8_t *
>(&value), 1) == 0;
380 return (value & (1 << bit)) != 0;
390 virtual int updateBits(uint8_t reg, uint8_t mask, uint8_t value_shifted)
393 if (cur < 0)
return cur;
394 uint8_t newv = (uint8_t(cur) & ~mask) | (value_shifted & mask);
476 virtual void pinMode(uint8_t pin, uint8_t mode) = 0;
502 virtual void delay(uint32_t ms) = 0;
constexpr size_t arraySize(const T(&arr)[N])
Returns the number of elements in a C‑style array at compile time.
#define SPI_MODE0
CPOL = 0, CPHA = 0.
#define SPI_MSB
Most significant bit first.
Abstract base for all communication parameter objects.
virtual ~CommParamsBase()=default
I2C communication parameters.
uint8_t getType() const
Retrieve the parameter type.
uint32_t params
The value of the parameter.
I2CParamType
Identifiers for the various I2C settings that can be changed.
@ I2C_SET_ADDR
Set device address.
@ I2C_SET_CLOCK
Set I2C clock frequency.
@ I2C_SET_FLAG
Set a generic flag (interpretation depends on driver)
@ I2C_SET_READ_DELAY_US
Delay after read operations (microseconds)
@ I2C_SET_WRITE_DELAY_US
Delay after write operations (microseconds)
uint32_t getParams() const
Retrieve the stored parameter value.
I2CParam(I2CParamType type, uint32_t params)
Construct an I2C parameter object.
enum I2CParamType type
Which I2C parameter this object represents.
SPI communication parameters.
SPIParam(SPISettings setting)
Construct an SPI parameter object from an SPISettings.
SPISettings getSetting() const
Retrieve the stored SPI settings.
Emulation of Arduino's SPISettings class.
SPISettings(uint32_t clock, uint8_t bitOrder, uint8_t dataMode)
uint32_t clock
SPI clock frequency in Hz.
uint8_t bitOrder
SPI_LSB or SPI_MSB.
uint8_t dataMode
SPI_MODE0 .. SPI_MODE3.
Abstract base class for low‑level sensor communication.
virtual int writeThenRead(const uint8_t *write_buffer, size_t write_len, uint8_t *read_buffer, size_t read_len)=0
Perform a write followed by a read (e.g., for register‑based sensors).
virtual bool clrRegisterBit(const uint8_t reg, uint8_t bit)
Clear a specific bit in a register.
virtual int readRegister(const uint8_t reg, uint8_t *buf, size_t len)=0
Read multiple bytes from a register into a buffer.
virtual int readBuffer(uint8_t *buf, size_t len)=0
Read bytes directly from the device (no register address sent).
virtual int writeBuffer(uint8_t *buffer, size_t len)=0
Write a buffer directly to the device (no register address).
virtual ~SensorCommBase()=default
virtual int writeRegister(const uint8_t reg, uint8_t *buf, size_t len)=0
Write multiple bytes to a register.
virtual int writeRegister(const uint8_t reg, uint8_t norVal, uint8_t orVal)
Modify a register using a NOR and OR mask.
virtual bool setRegisterBit(const uint8_t reg, uint8_t bit)
Set a specific bit in a register.
virtual void setParams(const CommParamsBase ¶ms)=0
Apply communication parameters (e.g., I2C address, SPI settings).
virtual int updateBits(uint8_t reg, uint8_t mask, uint8_t value_shifted)
Update specific bits in a register.
virtual int readRegister(const uint8_t reg)
Read a single byte from a register.
virtual void deinit()=0
Deinitialise the communication interface (close device, etc.).
virtual bool init()=0
Initialise the communication interface (open device, etc.).
virtual int writeRegister(const uint8_t reg, uint8_t val)
Write a single byte to a register.
virtual bool getRegisterBit(const uint8_t reg, uint8_t bit)
Read the state of a specific bit in a register.
Customisation point for low‑level GPIO callbacks.
void(*)(uint8_t pin, uint8_t mode) CustomMode
Set pin mode (INPUT/OUTPUT, etc.)
void setCustomRead(CustomRead callback)
Set a custom digitalRead implementation.
CustomMode modeCallback
Custom pinMode, nullptr if not set.
CustomWrite writeCallback
Custom digitalWrite, nullptr if not set.
void(*)(uint8_t pin, uint8_t level) CustomWrite
Set pin level (0/1)
CustomRead readCallback
Custom digitalRead, nullptr if not set.
void setCustomMode(CustomMode callback)
Set a custom pinMode implementation.
void setCustomWrite(CustomWrite callback)
Set a custom digitalWrite implementation.
uint8_t(*)(uint8_t pin) CustomRead
Read pin level.
Abstract hardware abstraction layer.
virtual uint8_t digitalRead(uint8_t pin)=0
Read the digital value from a pin.
virtual void pinMode(uint8_t pin, uint8_t mode)=0
Set the mode of a digital pin.
virtual void digitalWrite(uint8_t pin, uint8_t level)=0
Write a digital value to a pin.
virtual void delay(uint32_t ms)=0
Blocking delay for a given number of milliseconds.
virtual void delayMicroseconds(uint32_t us)=0
Blocking delay for a given number of microseconds.
virtual uint32_t millis()=0
Get the current system time in milliseconds.