|
| 1 | +/* |
| 2 | + Written with help by Claude! |
| 3 | + https://claude.ai/chat/335f50b1-3dd8-435e-9139-57ec7ca26a3c (at this time |
| 4 | + chats are not shareable :( |
| 5 | +*/ |
| 6 | + |
| 7 | +#include "Adafruit_GenericDevice.h" |
| 8 | + |
| 9 | +/*! |
| 10 | + * @brief Create a Generic device with the provided read/write functions |
| 11 | + * @param obj Pointer to object instance |
| 12 | + * @param read_func Function pointer for reading raw data |
| 13 | + * @param write_func Function pointer for writing raw data |
| 14 | + * @param readreg_func Function pointer for reading registers (optional) |
| 15 | + * @param writereg_func Function pointer for writing registers (optional) */ |
| 16 | +Adafruit_GenericDevice::Adafruit_GenericDevice( |
| 17 | + void *obj, busio_genericdevice_read_t read_func, |
| 18 | + busio_genericdevice_write_t write_func, |
| 19 | + busio_genericdevice_readreg_t readreg_func, |
| 20 | + busio_genericdevice_writereg_t writereg_func) { |
| 21 | + _obj = obj; |
| 22 | + _read_func = read_func; |
| 23 | + _write_func = write_func; |
| 24 | + _readreg_func = readreg_func; |
| 25 | + _writereg_func = writereg_func; |
| 26 | + _begun = false; |
| 27 | +} |
| 28 | + |
| 29 | +/*! @brief Simple begin function (doesn't do much at this time) |
| 30 | + @return true always |
| 31 | +*/ |
| 32 | +bool Adafruit_GenericDevice::begin(void) { |
| 33 | + _begun = true; |
| 34 | + return true; |
| 35 | +} |
| 36 | + |
| 37 | +/*! |
| 38 | +@brief Marks the GenericDevice as no longer in use. |
| 39 | +@note: Since this is a GenericDevice, if you are using this with a Serial |
| 40 | +object, this does NOT disable serial communication or release the RX/TX pins. |
| 41 | +That must be done manually by calling Serial.end(). |
| 42 | +*/ |
| 43 | +void Adafruit_GenericDevice::end(void) { _begun = false; } |
| 44 | + |
| 45 | +/*! @brief Write a buffer of data |
| 46 | + @param buffer Pointer to buffer of data to write |
| 47 | + @param len Number of bytes to write |
| 48 | + @return true if write was successful, otherwise false */ |
| 49 | +bool Adafruit_GenericDevice::write(const uint8_t *buffer, size_t len) { |
| 50 | + if (!_begun) |
| 51 | + return false; |
| 52 | + return _write_func(_obj, buffer, len); |
| 53 | +} |
| 54 | + |
| 55 | +/*! @brief Read data into a buffer |
| 56 | + @param buffer Pointer to buffer to read data into |
| 57 | + @param len Number of bytes to read |
| 58 | + @return true if read was successful, otherwise false */ |
| 59 | +bool Adafruit_GenericDevice::read(uint8_t *buffer, size_t len) { |
| 60 | + if (!_begun) |
| 61 | + return false; |
| 62 | + return _read_func(_obj, buffer, len); |
| 63 | +} |
| 64 | + |
| 65 | +/*! @brief Read from a register location |
| 66 | + @param addr_buf Buffer containing register address |
| 67 | + @param addrsiz Size of register address in bytes |
| 68 | + @param buf Buffer to store read data |
| 69 | + @param bufsiz Size of data to read in bytes |
| 70 | + @return true if read was successful, otherwise false */ |
| 71 | +bool Adafruit_GenericDevice::readRegister(uint8_t *addr_buf, uint8_t addrsiz, |
| 72 | + uint8_t *buf, uint16_t bufsiz) { |
| 73 | + if (!_begun || !_readreg_func) |
| 74 | + return false; |
| 75 | + return _readreg_func(_obj, addr_buf, addrsiz, buf, bufsiz); |
| 76 | +} |
| 77 | + |
| 78 | +/*! @brief Write to a register location |
| 79 | + @param addr_buf Buffer containing register address |
| 80 | + @param addrsiz Size of register address in bytes |
| 81 | + @param buf Buffer containing data to write |
| 82 | + @param bufsiz Size of data to write in bytes |
| 83 | + @return true if write was successful, otherwise false */ |
| 84 | +bool Adafruit_GenericDevice::writeRegister(uint8_t *addr_buf, uint8_t addrsiz, |
| 85 | + const uint8_t *buf, |
| 86 | + uint16_t bufsiz) { |
| 87 | + if (!_begun || !_writereg_func) |
| 88 | + return false; |
| 89 | + return _writereg_func(_obj, addr_buf, addrsiz, buf, bufsiz); |
| 90 | +} |
0 commit comments