Adafruit Bus IO Library
Adafruit_BusIO_Register.h
1 #ifndef Adafruit_BusIO_Register_h
2 #define Adafruit_BusIO_Register_h
3 
4 #include <Arduino.h>
5 
6 #if !defined(SPI_INTERFACES_COUNT) || \
7  (defined(SPI_INTERFACES_COUNT) && (SPI_INTERFACES_COUNT > 0))
8 
9 #include <Adafruit_GenericDevice.h>
10 #include <Adafruit_I2CDevice.h>
11 #include <Adafruit_SPIDevice.h>
12 
13 typedef enum _Adafruit_BusIO_SPIRegType {
14  ADDRBIT8_HIGH_TOREAD = 0,
21  AD8_HIGH_TOREAD_AD7_HIGH_TOINC = 1,
22 
29  ADDRBIT8_HIGH_TOWRITE = 2,
30 
36  ADDRESSED_OPCODE_BIT0_LOW_TO_WRITE = 3,
37 
38 } Adafruit_BusIO_SPIRegType;
39 
45 public:
46  Adafruit_BusIO_Register(Adafruit_I2CDevice *i2cdevice, uint16_t reg_addr,
47  uint8_t width = 1, uint8_t byteorder = LSBFIRST,
48  uint8_t address_width = 1);
49 
50  Adafruit_BusIO_Register(Adafruit_SPIDevice *spidevice, uint16_t reg_addr,
51  Adafruit_BusIO_SPIRegType type, uint8_t width = 1,
52  uint8_t byteorder = LSBFIRST,
53  uint8_t address_width = 1);
54 
56  Adafruit_SPIDevice *spidevice,
57  Adafruit_BusIO_SPIRegType type, uint16_t reg_addr,
58  uint8_t width = 1, uint8_t byteorder = LSBFIRST,
59  uint8_t address_width = 1);
60 
62  uint16_t reg_addr, uint8_t width = 1,
63  uint8_t byteorder = LSBFIRST,
64  uint8_t address_width = 1);
65 
66  bool read(uint8_t *buffer, uint8_t len);
67  bool read(uint8_t *value);
68  bool read(uint16_t *value);
69  uint32_t read(void);
70  uint32_t readCached(void);
71  bool write(uint8_t *buffer, uint8_t len);
72  bool write(uint32_t value, uint8_t numbytes = 0);
73 
74  uint8_t width(void);
75 
76  void setWidth(uint8_t width);
77  void setAddress(uint16_t address);
78  void setAddressWidth(uint16_t address_width);
79 
80  void print(Stream *s = &Serial);
81  void println(Stream *s = &Serial);
82 
83 private:
84  Adafruit_I2CDevice *_i2cdevice;
85  Adafruit_SPIDevice *_spidevice;
86  Adafruit_GenericDevice *_genericdevice;
87  Adafruit_BusIO_SPIRegType _spiregtype;
88  uint16_t _address;
89  uint8_t _width, _addrwidth, _byteorder;
90  uint8_t _buffer[4]; // we won't support anything larger than uint32 for
91  // non-buffered read
92  uint32_t _cached = 0;
93 };
94 
100 public:
102  uint8_t shift);
103  bool write(uint32_t value);
104  uint32_t read(void);
105 
106 private:
107  Adafruit_BusIO_Register *_register;
108  uint8_t _bits, _shift;
109 };
110 
111 #endif // SPI exists
112 #endif // BusIO_Register_h
The class which defines a device register (a location to read/write data from)
Definition: Adafruit_BusIO_Register.h:44
The class which defines a slice of bits from within a device register (a location to read/write data ...
Definition: Adafruit_BusIO_Register.h:99
void print(Stream *s=&Serial)
Pretty printer for this register.
Definition: Adafruit_BusIO_Register.cpp:297
void setAddress(uint16_t address)
Set register address.
Definition: Adafruit_BusIO_Register.cpp:372
void println(Stream *s=&Serial)
Pretty printer for this register.
Definition: Adafruit_BusIO_Register.cpp:307
void setWidth(uint8_t width)
Set the default width of data.
Definition: Adafruit_BusIO_Register.cpp:366
< The class which defines how we will talk to this device over I2C
Definition: Adafruit_I2CDevice.h:8
void setAddressWidth(uint16_t address_width)
Set the width of register address.
Definition: Adafruit_BusIO_Register.cpp:380
Adafruit_BusIO_Register(Adafruit_I2CDevice *i2cdevice, uint16_t reg_addr, uint8_t width=1, uint8_t byteorder=LSBFIRST, uint8_t address_width=1)
Create a register we access over an I2C Device (which defines the bus and address) ...
Definition: Adafruit_BusIO_Register.cpp:18
uint32_t readCached(void)
Read cached data from last time we wrote to this register.
Definition: Adafruit_BusIO_Register.cpp:211
Class for communicating with a device via generic read/write functions.
Definition: Adafruit_GenericDevice.h:21
Definition: Adafruit_SPIDevice.h:95
uint32_t read(void)
Read data from the register location. This does not do any error checking!
Definition: Adafruit_BusIO_Register.cpp:188
uint8_t width(void)
The width of the register data, helpful for doing calculations.
Definition: Adafruit_BusIO_Register.cpp:360
bool write(uint8_t *buffer, uint8_t len)
Write a buffer of data to the register location.
Definition: Adafruit_BusIO_Register.cpp:118