79 lines
2.9 KiB
C++
79 lines
2.9 KiB
C++
|
/*
|
||
|
Written with help by Claude!
|
||
|
https://claude.ai/chat/335f50b1-3dd8-435e-9139-57ec7ca26a3c (at this time
|
||
|
chats are not shareable :(
|
||
|
*/
|
||
|
|
||
|
#include "Adafruit_GenericDevice.h"
|
||
|
|
||
|
/*! @brief Create a Generic device with the provided read/write functions
|
||
|
@param read_func Function pointer for reading raw data
|
||
|
@param write_func Function pointer for writing raw data
|
||
|
@param readreg_func Function pointer for reading registers (optional)
|
||
|
@param writereg_func Function pointer for writing registers (optional) */
|
||
|
Adafruit_GenericDevice::Adafruit_GenericDevice(
|
||
|
busio_genericdevice_read_t read_func,
|
||
|
busio_genericdevice_write_t write_func,
|
||
|
busio_genericdevice_readreg_t readreg_func,
|
||
|
busio_genericdevice_writereg_t writereg_func) {
|
||
|
_read_func = read_func;
|
||
|
_write_func = write_func;
|
||
|
_readreg_func = readreg_func;
|
||
|
_writereg_func = writereg_func;
|
||
|
_begun = false;
|
||
|
}
|
||
|
|
||
|
/*! @brief Initializes the device
|
||
|
@return true if initialization was successful, otherwise false */
|
||
|
bool Adafruit_GenericDevice::begin(void) {
|
||
|
_begun = true;
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
/*! @brief Write a buffer of data
|
||
|
@param buffer Pointer to buffer of data to write
|
||
|
@param len Number of bytes to write
|
||
|
@return true if write was successful, otherwise false */
|
||
|
bool Adafruit_GenericDevice::write(const uint8_t *buffer, size_t len) {
|
||
|
if (!_begun)
|
||
|
return false;
|
||
|
return _write_func(buffer, len);
|
||
|
}
|
||
|
|
||
|
/*! @brief Read data into a buffer
|
||
|
@param buffer Pointer to buffer to read data into
|
||
|
@param len Number of bytes to read
|
||
|
@return true if read was successful, otherwise false */
|
||
|
bool Adafruit_GenericDevice::read(uint8_t *buffer, size_t len) {
|
||
|
if (!_begun)
|
||
|
return false;
|
||
|
return _read_func(buffer, len);
|
||
|
}
|
||
|
|
||
|
/*! @brief Read from a register location
|
||
|
@param addr_buf Buffer containing register address
|
||
|
@param addrsiz Size of register address in bytes
|
||
|
@param buf Buffer to store read data
|
||
|
@param bufsiz Size of data to read in bytes
|
||
|
@return true if read was successful, otherwise false */
|
||
|
bool Adafruit_GenericDevice::readRegister(uint8_t *addr_buf, uint8_t addrsiz,
|
||
|
uint8_t *buf, uint16_t bufsiz) {
|
||
|
if (!_begun || !_readreg_func)
|
||
|
return false;
|
||
|
return _readreg_func(addr_buf, addrsiz, buf, bufsiz);
|
||
|
}
|
||
|
|
||
|
/*! @brief Write to a register location
|
||
|
@param addr_buf Buffer containing register address
|
||
|
@param addrsiz Size of register address in bytes
|
||
|
@param buf Buffer containing data to write
|
||
|
@param bufsiz Size of data to write in bytes
|
||
|
@return true if write was successful, otherwise false */
|
||
|
bool Adafruit_GenericDevice::writeRegister(uint8_t *addr_buf, uint8_t addrsiz,
|
||
|
const uint8_t *buf,
|
||
|
uint16_t bufsiz) {
|
||
|
if (!_begun || !_writereg_func)
|
||
|
return false;
|
||
|
return _writereg_func(addr_buf, addrsiz, buf, bufsiz);
|
||
|
}
|