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