Adafruit_GenericDevice.h 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. #ifndef ADAFRUIT_GENERICDEVICE_H
  2. #define ADAFRUIT_GENERICDEVICE_H
  3. #include <Arduino.h>
  4. typedef bool (*busio_genericdevice_read_t)(void *obj, uint8_t *buffer,
  5. size_t len);
  6. typedef bool (*busio_genericdevice_write_t)(void *obj, const uint8_t *buffer,
  7. size_t len);
  8. typedef bool (*busio_genericdevice_readreg_t)(void *obj, uint8_t *addr_buf,
  9. uint8_t addrsiz, uint8_t *data,
  10. uint16_t datalen);
  11. typedef bool (*busio_genericdevice_writereg_t)(void *obj, uint8_t *addr_buf,
  12. uint8_t addrsiz,
  13. const uint8_t *data,
  14. uint16_t datalen);
  15. /*!
  16. * @brief Class for communicating with a device via generic read/write functions
  17. */
  18. class Adafruit_GenericDevice {
  19. public:
  20. Adafruit_GenericDevice(
  21. void *obj, busio_genericdevice_read_t read_func,
  22. busio_genericdevice_write_t write_func,
  23. busio_genericdevice_readreg_t readreg_func = nullptr,
  24. busio_genericdevice_writereg_t writereg_func = nullptr);
  25. bool begin(void);
  26. void end(void);
  27. bool read(uint8_t *buffer, size_t len);
  28. bool write(const uint8_t *buffer, size_t len);
  29. bool readRegister(uint8_t *addr_buf, uint8_t addrsiz, uint8_t *buf,
  30. uint16_t bufsiz);
  31. bool writeRegister(uint8_t *addr_buf, uint8_t addrsiz, const uint8_t *buf,
  32. uint16_t bufsiz);
  33. protected:
  34. /*! @brief Function pointer for reading raw data from the device */
  35. busio_genericdevice_read_t _read_func;
  36. /*! @brief Function pointer for writing raw data to the device */
  37. busio_genericdevice_write_t _write_func;
  38. /*! @brief Function pointer for reading a 'register' from the device */
  39. busio_genericdevice_readreg_t _readreg_func;
  40. /*! @brief Function pointer for writing a 'register' to the device */
  41. busio_genericdevice_writereg_t _writereg_func;
  42. bool _begun; ///< whether we have initialized yet (in case the function needs
  43. ///< to do something)
  44. private:
  45. void *_obj; ///< Pointer to object instance
  46. };
  47. #endif // ADAFRUIT_GENERICDEVICE_H