Adafruit_BusIO_Register.h 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. #include <Adafruit_I2CDevice.h>
  2. #include <Adafruit_SPIDevice.h>
  3. #include <Arduino.h>
  4. #ifndef Adafruit_BusIO_Register_h
  5. #define Adafruit_BusIO_Register_h
  6. typedef enum _Adafruit_BusIO_SPIRegType {
  7. ADDRBIT8_HIGH_TOREAD = 0,
  8. AD8_HIGH_TOREAD_AD7_HIGH_TOINC = 1,
  9. ADDRBIT8_HIGH_TOWRITE = 2,
  10. } Adafruit_BusIO_SPIRegType;
  11. /*!
  12. * @brief The class which defines a device register (a location to read/write
  13. * data from)
  14. */
  15. class Adafruit_BusIO_Register {
  16. public:
  17. Adafruit_BusIO_Register(Adafruit_I2CDevice *i2cdevice, uint16_t reg_addr,
  18. uint8_t width = 1, uint8_t byteorder = LSBFIRST,
  19. uint8_t address_width = 1);
  20. Adafruit_BusIO_Register(Adafruit_SPIDevice *spidevice, uint16_t reg_addr,
  21. Adafruit_BusIO_SPIRegType type, uint8_t width = 1,
  22. uint8_t byteorder = LSBFIRST,
  23. uint8_t address_width = 1);
  24. Adafruit_BusIO_Register(Adafruit_I2CDevice *i2cdevice,
  25. Adafruit_SPIDevice *spidevice,
  26. Adafruit_BusIO_SPIRegType type, uint16_t reg_addr,
  27. uint8_t width = 1, uint8_t byteorder = LSBFIRST,
  28. uint8_t address_width = 1);
  29. bool read(uint8_t *buffer, uint8_t len);
  30. bool read(uint8_t *value);
  31. bool read(uint16_t *value);
  32. uint32_t read(void);
  33. bool write(uint8_t *buffer, uint8_t len);
  34. bool write(uint32_t value, uint8_t numbytes = 0);
  35. uint8_t width(void);
  36. void print(Stream *s = &Serial);
  37. void println(Stream *s = &Serial);
  38. private:
  39. Adafruit_I2CDevice *_i2cdevice;
  40. Adafruit_SPIDevice *_spidevice;
  41. Adafruit_BusIO_SPIRegType _spiregtype;
  42. uint16_t _address;
  43. uint8_t _width, _addrwidth, _byteorder;
  44. uint8_t _buffer[4]; // we wont support anything larger than uint32 for
  45. // non-buffered read
  46. };
  47. /*!
  48. * @brief The class which defines a slice of bits from within a device register
  49. * (a location to read/write data from)
  50. */
  51. class Adafruit_BusIO_RegisterBits {
  52. public:
  53. Adafruit_BusIO_RegisterBits(Adafruit_BusIO_Register *reg, uint8_t bits,
  54. uint8_t shift);
  55. bool write(uint32_t value);
  56. uint32_t read(void);
  57. private:
  58. Adafruit_BusIO_Register *_register;
  59. uint8_t _bits, _shift;
  60. };
  61. #endif // BusIO_Register_h