esp32_Adafruit_BusIO/Adafruit_BusIO_Register.h

64 lines
1.8 KiB
C
Raw Normal View History

#include <Adafruit_I2CDevice.h>
2019-05-18 04:36:14 +01:00
#include <Adafruit_SPIDevice.h>
#include <Arduino.h>
2019-05-18 04:36:14 +01:00
#ifndef Adafruit_BusIO_Register_h
#define Adafruit_BusIO_Register_h
2019-05-18 05:04:51 +01:00
typedef enum _Adafruit_BusIO_SPIRegType {
ADDRBIT8_HIGH_TOREAD = 0,
} Adafruit_BusIO_SPIRegType;
2019-05-18 04:36:14 +01:00
class Adafruit_BusIO_Register {
public:
2019-05-18 04:36:14 +01:00
Adafruit_BusIO_Register(Adafruit_I2CDevice *i2cdevice, uint16_t reg_addr,
2019-05-18 05:04:51 +01:00
uint8_t width=1, uint8_t bitorder=LSBFIRST,
uint8_t address_width=1);
Adafruit_BusIO_Register(Adafruit_SPIDevice *spidevice, uint16_t reg_addr,
Adafruit_BusIO_SPIRegType type,
uint8_t width=1, uint8_t bitorder=LSBFIRST,
uint8_t address_width=1);
2019-05-18 07:47:48 +01:00
Adafruit_BusIO_Register(Adafruit_I2CDevice *i2cdevice,
Adafruit_SPIDevice *spidevice,
Adafruit_BusIO_SPIRegType type,
uint16_t reg_addr,
2019-05-18 07:47:48 +01:00
uint8_t width=1, uint8_t bitorder=LSBFIRST,
uint8_t address_width=1);
bool read(uint8_t *buffer, uint8_t len);
bool read(uint8_t *value);
bool read(uint16_t *value);
bool read(uint32_t *value);
2019-03-07 21:23:12 +00:00
uint32_t read(void);
bool write(uint8_t *buffer, uint8_t len);
bool write(uint32_t value, uint8_t numbytes=0);
2019-03-08 07:29:27 +00:00
uint8_t width(void) { return _width; }
void print(Stream *s=&Serial);
void println(Stream *s=&Serial);
private:
2019-05-18 04:36:14 +01:00
Adafruit_I2CDevice *_i2cdevice;
Adafruit_SPIDevice *_spidevice;
2019-05-18 05:04:51 +01:00
Adafruit_BusIO_SPIRegType _spiregtype;
uint16_t _address;
uint8_t _width, _addrwidth, _bitorder;
uint8_t _buffer[4]; // we wont support anything larger than uint32 for non-buffered read
};
2019-05-18 04:36:14 +01:00
class Adafruit_BusIO_RegisterBits {
2019-03-08 07:29:27 +00:00
public:
2019-05-18 04:36:14 +01:00
Adafruit_BusIO_RegisterBits(Adafruit_BusIO_Register *reg, uint8_t bits, uint8_t shift);
2019-03-08 07:29:27 +00:00
void write(uint32_t value);
uint32_t read(void);
private:
2019-05-18 04:36:14 +01:00
Adafruit_BusIO_Register *_register;
2019-03-08 07:29:27 +00:00
uint8_t _bits, _shift;
};
2019-05-18 04:36:14 +01:00
#endif //BusIO_Register_h