arduinoprojects

git clone https://git.tarina.org/arduinoprojects
Log | Files | Refs

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