Adafruit_GenericDevice.cpp 3.2 KB

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